Microsoft Azure is a cloud platform with more than 200 products to find a solution to your problem. Among those, Cognitive Services are some amazing products that provide you with many AI functionalities. For example:
- Anomalie-Detektor
- Inhaltsmoderator
- Personalisierung
- Sprachverständnis
- QnA-Hersteller
- Textanalyse
- Übersetzer
- Sprachdienst
- Computer Vision
- Benutzerdefinierte Vision
- Gesichts-API
- Cognitive Services-Multidienstkonto
With these resources, any developer can incorporate AI into their applications without the need for deep learning of machine learning. All of these can be accessed via the REST API and the Windows IDE, allowing them to be used in any modern application.
Inhaltsverzeichnis
Was ist die Bing Visual Search-API?
Mit der Bing Visual Search API können Sie Bildsuchfunktionen in Ihre Anwendung integrieren. Benutzer können suchen, indem sie ein Bild bereitstellen, und die Bing-Such-API findet Bilder, die visuell oder thematisch ähnlich sind. Außerdem können Prominente, Orte, Gegenstände und andere verwandte Objekte mit dem Quellbild identifiziert werden. Sie können sogar Barcodes und Text aus Bildern extrahieren. Es ist eine ziemlich mächtige Ressource.
Wie erhalte ich den Abonnementschlüssel, um die Bing Visual Search API zu verwenden?
Gehe zu Azure-Portal und melden Sie sich an. Geben Sie im Portal „Bing“ in das Suchfeld ein und wählen Sie auf dem Marktplatz „Bing Search v7“ aus. Geben Sie nun einen Namen, ein Abonnement und eine Ressourcengruppe ein und erstellen Sie eine neue Ressource. Gehen Sie dann zur neu erstellten Ressource und finden Sie unter der Registerkarte „Schlüssel und Endpunkt“ zwei Abonnementschlüssel. Verwenden Sie diesen Schlüssel im nächsten Schritt.
Wie implementiere ich die Bing Visual Search API in Delphi?
Wir können leicht Implementieren Sie die API für die visuelle Suche über die Delphi-REST-Komponenten. Wir können die API zur Entwurfszeit mit diesen Komponenten einrichten:
TRESTClient
TRESTRequest
TRESTResponse
Mach Folgendes..
Erstellen Sie eine neue VCL-Anwendung, legen Sie eine TRESTClient-Komponente ab und legen Sie den Inhaltstyp auf „application/json“ fest. Legen Sie dann eine „TRESTRequest“-Komponente ab und setzen Sie die Methode auf „rmPOST“. Legen Sie außerdem eine „TRESTResponse“-Komponente ab, um die Antwort zu erhalten. Außerdem benötigen Sie eine TIdHTTP-Komponente, um Bilder in der Antwort herunterzuladen.
Unsere API-URL lautet:
https://api.bing.microsoft.com/v7.0/images/visualsearch/
Außerdem benötigen Sie eine Bilddatei, um mit der Anfrage zu posten. Legen Sie also eine TOpenDialog-Komponente ab, um Bilddateien zu öffnen. Fügen Sie eine Schaltfläche hinzu, um nach Bildern zu suchen.
Fügen Sie nun etwas Code für das OnClick-Ereignis hinzu
1 2 3 4 5 6 7 8 9 10 11 12 13 |
procedure TfrmMain.btnBrowseClick(Sender: TObject); var Picture: TPicture; Start if nicht dlgOpenImage.Execute then exit; strImgPath := dlgOpenImage.FileName; btnSearch.Enabled := strImgPath <> ''; Picture := TPicture.Create; Picture.LoadFromFile(strImgPath); imgSource.Picture := Picture; edImgPath.Text := strImgPath; end; |
In der Suchschaltfläche fügen wir zunächst das „Ocp-Apim-Abonnement-Schlüssel
“ als Header-Parameter. Dann fügen wir das zu verarbeitende Bild als pkFile-Parameter des RESTRequest hinzu. Dann führen wir die Anfrage aus und analysieren die Antwort. Die Antwort liegt im JSON-Format vor. Wir können die Objekte „TJSONObject“ und „TJSONArray“ verwenden, um die Antwort einfach zu analysieren. Dann können wir ähnliche Bilder herunterladen und in unserer Delphi-Anwendung anzeigen.
Der Delphi-Code der vollständigen Suchschaltfläche für die Suche nach Bildern sollte wie folgt aussehen:
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; Start for i:=0 to ComponentCount-1 do if (Komponenten[i] is TImage) then if (Komponenten[i] as TImage).Parent=scrlbxImages then freeandnil(Komponenten[i]); memResponse.Lines.klar; RESTClient.BaseURL := edAPIURL.Text; RESTRequest.Method:=rmpost; imgProcessed := false; try RESTRequest.Params.klar; 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 nicht RESTResponse.Status.Success then showmessage(RESTResponse.StatusText + ' ' + inttostr(RESTResponse.StatusCode)) sonst Start memResponse.Lines.Add(RESTResponse.JSONText); jsonObj := RESTResponse.JSONValue as TJSONObject; jsonTags := jsonObj.Values['tags'] as TJSONArray; for I := 0 to jsonTags.Count - 1 do Start jsonObj := jsonTags.Items[I] as TJSONObject; jsonActions := jsonObj.Values['actions'] as TJSONArray; for x := 0 to jsonActions.Count - 1 do Start jsonObj := jsonActions.Items[x] as TJSONObject; if jsonObj.Values['actionType'].Value = 'PagesIncluding' then Start jsonValue := (jsonObj.Values['data'] as TJSONObject).Values['value'] as TJSONArray; for y := 0 to jsonValue.Count - 1 do Start 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; |
Hier ist ein Screenshot unserer fertigen Demo Visual Search Delphi-Anwendung
Sie können die Demo-Anwendung unter diesem Link herunterladen: https://github.com/checkdigits/SearchByImage_example
Design. Code. Kompilieren. Bereitstellen.
Kostenlos testenUpgrade heute
Kostenlose Delphi Community EditionKostenlose C ++ Builder Community Edition