Microsoft Azureは、問題の解決策を見つけるための200を超える製品を備えたクラウドプラットフォームです。それらの中で、Cognitive Servicesは多くのAI機能を提供するいくつかの素晴らしい製品です。例えば、以下のようなものがあります。
- 異常検出器
- コンテンツモデレーター
- パーソナライザー
- 言語理解
- QnAメーカー
- テキスト分析
- 翻訳者
- スピーチサービス
- コンピュータビジョン
- カスタムビジョン
- Face API
- コグニティブサービスマルチサービスアカウント
これらのリソースを使用すると、開発者は機械学習のディープラーニングを必要とせずにAIをアプリケーションに組み込むことができます。これらはすべて、REST APIと Windows IDEを介してアクセスできるため、最新のアプリケーションで使用できます。
目次
Bing Visual Search APIとは
Bing Visual Search APIを使用すると、画像検索機能をアプリケーションに統合できます。ユーザーは画像を提供することで検索でき、Bing検索APIは視覚的または主題的に類似した画像を検索します。また、有名人、場所、アイテム、およびソース画像に関連するその他のオブジェクトを識別できます。画像からバーコードやテキストを抽出することもできます。これは非常に強力なリソースです。
Bing Visual Search APIを使用するためのサブスクリプションキーを取得するには
まず Azureポータル とサインインします。ポータルで、検索ボックスに「Bing」と入力し、マーケットプレイスから「BingSearchv7」を選択します。次に、名前、サブスクリプション、およびリソースグループを入力し、新しいリソースを作成します。次に、新しく作成されたリソースに移動し、[キーとエンドポイント]タブの下に、2つのサブスクリプションキーがあります。次のステップでそのキーを使用します。
DelphiでBingVisual Search APIを実装するには
私たちはできる 簡単に Delphi RESTコンポーネントを介してVisual Search APIを実装します。これらのコンポーネントを使用して、設計時にAPIをセットアップできます。
TRESTClient
TRESTRequest
TRESTResponse
最初の手順
新しいVCLアプリケーションを作成し、TRESTClientコンポーネントを削除して、コンテンツタイプを「application / json」として設定します。次に、「TRESTRequest」コンポーネントを削除し、メソッドを「rmPOST」に設定します。また、「TRESTResponse」コンポーネントをドロップして応答を取得します。また、応答で画像をダウンロードするには、TIdHTTPコンポーネントが必要です。
APIURLは次のとおりです。
https://api.bing.microsoft.com/v7.0/images/visualsearch/
また、リクエストとともに投稿するには画像ファイルが必要です。したがって、TOpenDialogコンポーネントをドロップして、画像ファイルを開きます。画像を閲覧するためのボタンを追加します。
OnClickイベントのコードを追加
1 2 3 4 5 6 7 8 9 10 11 12 13 |
procedure TfrmMain.btnBrowseClick(Sender: TObject); var Picture: TPicture; begin if ない dlgOpenImage.Execute then exit; strImgPath := dlgOpenImage.FileName; btnSearch.Enabled := strImgPath <> ''; Picture := TPicture.Create; Picture.LoadFromFile(strImgPath); imgSource.Picture := Picture; edImgPath.Text := strImgPath; end; |
検索ボタンに、まず「Ocp-Apim-Subscription-Key
」をヘッダーパラメータとして使用します。次に、処理する画像をRESTRequestのpkFileパラメーターとして追加します。次に、リクエストを実行し、レスポンスを解析します。応答はJSON形式です。 「TJSONObject」オブジェクトと「TJSONArray」オブジェクトを使用して、応答を簡単に解析できます。次に、同様の画像をダウンロードして、Delphiアプリケーションに表示できます。
画像検索ボタンのDelphiによる実装コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
procedure TfrmMain.btnSearchClick(Sender: TObject); var lparam : Trestrequestparameter; imgProcessed: bool; jsonObj: TJSONObject; jsonTags, jsonActions, jsonValue: TJSONArray; MS: TMemoryStream; Picture: TPicture; I, x, y: integer; image: TImage; begin for 私:=0 to ComponentCount-1 do if (Components[私] is TImage) then if (Components[私] as TImage).Parent=scrlbxImages then freeandnil(Components[私]); memResponse.Lines.晴れ; RESTClient.BaseURL := edAPIURL.Text; RESTRequest.Method:=rmpost; imgProcessed := false; try RESTRequest.Params.晴れ; RESTResponse.RootElement := ''; lparam := RESTRequest.Params.AddItem; lparam.name := 'Ocp-Apim-Subscription-Key'; lparam.Value := edSubKey.Text; lparam.ContentType := ctNone; lparam.Kind := pkHTTPHEADER; //This one is Important otherwise the '==' will get url encoded lparam.Options := [poDoNotEncode]; lparam := RESTRequest.Params.AddItem; lparam.name := 'image'; lparam.Value := strImgPath; lparam.ContentType := ctIMAGE_JPEG; lparam.Kind := pkFile; lparam.Options := [poDoNotEncode]; RESTRequest.Execute; if ない RESTResponse.Status.Success then showmessage(RESTResponse.StatusText + ' ' + inttostr(RESTResponse.StatusCode)) else begin memResponse.Lines.Add(RESTResponse.JSONText); jsonObj := RESTResponse.JSONValue as TJSONObject; jsonTags := jsonObj.Values['tags'] as TJSONArray; for I := 0 to jsonTags.Count - 1 do begin jsonObj := jsonTags.Items[I] as TJSONObject; jsonActions := jsonObj.Values['actions'] as TJSONArray; for x := 0 to jsonActions.Count - 1 do begin jsonObj := jsonActions.Items[x] as TJSONObject; if jsonObj.Values['actionType'].Value = 'PagesIncluding' then begin jsonValue := (jsonObj.Values['data'] as TJSONObject).Values['value'] as TJSONArray; for y := 0 to jsonValue.Count - 1 do begin if y> 10 then Break; jsonObj := jsonValue.Items[y] as TJSONObject; MS := TMemoryStream.Create; http.Get(StringReplace(jsonObj.Values['thumbnailUrl'].Value, 'https', 'http',[rfReplaceAll, rfIgnoreCase]), MS); MS.Position := 0; Picture := TPicture.Create; Picture.LoadFromStream(MS); image := TImage.Create(self); image.Parent := scrlbxImages; image.Align := alTop; image.Height := 180; image.Picture := Picture; image.Center := True; image.Proportional := true; MS.Free; end; end; end; end; end; finally end; end; |
完成したVisual Search Delphiデモアプリケーションのスクリーンショット
以下のリンクからデモアプリケーションをダウンロードできます。 https://github.com/checkdigits/SearchByImage_example