SearchByImage

Microsoft Azureは、問題の解決策を見つけるための200を超える製品を備えたクラウドプラットフォームです。それらの中で、Cognitive Servicesはあなたに多くのAI機能を提供するいくつかの素晴らしい製品です。例えば:

  • 異常検出器
  • コンテンツモデレーター
  • パーソナライザー
  • 言語理解
  • QnAメーカー
  • テキスト分析
  • 翻訳者
  • スピーチサービス
  • コンピュータビジョン
  • カスタムビジョン
  • Face API
  • コグニティブサービスマルチサービスアカウント

これらのリソースを使用すると、開発者は機械学習を深く学習しなくても、AIをアプリケーションに導入できます。これらはすべてRESTAPIを介して使用できます。つまり、現代のアプリケーション内に実装できます。

Bing Visual Search APIとは

Bing Visual Search APIを使用すると、画像検索機能をアプリケーションに統合できます。ユーザーは画像を提供することで検索でき、Bing検索APIは視覚的または主題的に類似した画像を検索します。また、有名人、場所、アイテム、およびソース画像に関連するその他のオブジェクトを識別できます。画像からバーコードやテキストを抽出することもできます。これは非常に強力なリソースです。

Bing Visual Search APIを使用するためのサブスクリプションキーを取得するには

後藤 Azureポータル とサインインします。ポータルで、検索ボックスに「Bing」と入力し、マーケットプレイスから「BingSearchv7」を選択します。次に、名前、サブスクリプション、およびリソースグループを入力し、新しいリソースを作成します。次に、新しく作成されたリソースに移動し、[キーとエンドポイント]タブの下に、2つのサブスクリプションキーがあります。次のステップでそのキーを使用します。

DelphiでBingVisual Search APIを実装するには

私たちはできる 簡単に DelphiRESTコンポーネントを介してVisualSearchAPIを実装します。これらのコンポーネントを使用して、設計時にAPIをセットアップできます。

  • TRESTClient
  • TRESTRequest
  • TRESTResponse

最初の手順

新しいVCLアプリケーションを作成し、TRESTClientコンポーネントを削除して、コンテンツタイプを「application / json」として設定します。次に、「TRESTRequest」コンポーネントを削除し、メソッドを「rmPOST」に設定します。また、「TRESTResponse」コンポーネントをドロップして応答を取得します。また、応答で画像をダウンロードするには、TIdHTTPコンポーネントが必要です。

APIURLは次のとおりです。

https://api.bing.microsoft.com/v7.0/images/visualsearch/

また、リクエストとともに投稿するには画像ファイルが必要です。したがって、TOpenDialogコンポーネントをドロップして、画像ファイルを開きます。画像を閲覧するためのボタンを追加します。

OnClickイベントのコードを追加

procedure TfrmMain.btnBrowseClick(Sender: TObject);
var
 Picture: TPicture;
begin
 if not 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-サブスクリプション-キー」をヘッダーパラメータとして使用します。次に、処理する画像をRESTRequestのpkFileパラメーターとして追加します。次に、リクエストを実行し、レスポンスを解析します。応答はJSON形式です。 「TJSONObject」オブジェクトと「TJSONArray」オブジェクトを使用して、応答を簡単に解析できます。次に、同様の画像をダウンロードして、Delphiアプリケーションに表示できます。

画像検索ボタンのDelphiによる実装コード

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 i:=0 to ComponentCount-1 do
    if (Components[i] is TImage) then
      if (Components[i] as TImage).Parent=scrlbxImages then
        freeandnil(Components[i]);

  memResponse.Lines.Clear;
  RESTClient.BaseURL := edAPIURL.Text;
  RESTRequest.Method:=rmpost;
  imgProcessed := false;
  try
    RESTRequest.Params.Clear;
    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 not 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

閉じる

RAD Studio、Delphi、またはC ++ Builderを使用すると、開発時間を短縮し、より早く市場に投入できます。
設計。コード。コンパイル。デプロイします。
無料トライアルを開始   本日アップグレード

   無料のDelphiコミュニティエディション   無料のC ++ Builder Community Edition