Zelfstudie: Een afbeelding bijsnijden met de Bing Visual Search SDK voor C#
Waarschuwing
Op 30 oktober 2020 zijn de Bing Search-API's verplaatst van Azure AI-services naar Bing Search Services. Deze documentatie wordt alleen ter referentie verstrekt. Zie de bing zoek-API-documentatie voor bijgewerkte documentatie. Zie Een Bing Search-resource maken via Azure Marketplace voor instructies voor het maken van nieuwe Azure-resources voor Bing Search.
Met de Bing Visual Search-SDK kunt u een afbeelding bijsnijden voordat u vergelijkbare onlineafbeeldingen kunt vinden. Met deze toepassing wordt één persoon uit een afbeelding met meerdere personen gesneden. Vervolgens worden de zoekresultaten geretourneerd met vergelijkbare afbeeldingen die online zijn gevonden.
De volledige broncode voor deze toepassing is beschikbaar op GitHub met extra foutafhandeling en aantekeningen.
In deze zelfstudie ziet u hoe u de volgende zaken kunt uitvoeren:
- Een aanvraag verzenden met de Bing Visual Search-SDK
- Het deel van een afbeelding dat u zoekt, bijsnijden met Bing Visual Search
- Het antwoord ontvangen en verwerken
- De URL's van actie-items in het antwoord zoeken
Vereisten
- Een versie van Visual Studio 2019.
- Als u Linux/MacOS gebruikt, kan deze toepassing worden uitgevoerd met behulp van Mono.
- Het NuGet-pakket Custom Search is geïnstalleerd.
- Klik in Solution Explorer in Visual Studio met de rechtermuisknop op uw project en selecteer in het menu NuGet-pakketten beheren. Installeer het
Microsoft.Azure.CognitiveServices.Search.CustomSearch
-pakket. Als u het NuGet Custom Search-pakket installeert, worden ook de volgende assembly's geïnstalleerd:- Microsoft.Rest.ClientRuntime
- Microsoft.Rest.ClientRuntime.Azure
- Newtonsoft.Json
- Klik in Solution Explorer in Visual Studio met de rechtermuisknop op uw project en selecteer in het menu NuGet-pakketten beheren. Installeer het
Een Azure-resource maken
Begin met het gebruik van de Bing Visual Search-API door een van de volgende Azure-resources te maken:
- Beschikbaar via de Azure-portal totdat u de resource verwijdert.
- Controleer de prijscategorie
S9
.
Resource met meerdere services
- Beschikbaar via de Azure-portal totdat u de resource verwijdert.
- Gebruik dezelfde sleutel en hetzelfde eindpunt voor uw toepassingen, in meerdere Azure AI-services.
Het bij te snijden gedeelte van de afbeelding opgeven
Met deze toepassing wordt een deel van deze afbeelding van het seniormanagementteam van Microsoft bijgesneden. Dit bij te snijden gedeelte wordt gedefinieerd aan de hand van de linker- en rechtercoördinaten, uitgedrukt als een percentage van de hele afbeelding:
Deze afbeelding wordt bijgesneden door een ImageInfo
-object te maken op basis van het bij te snijden gedeelte en het ImageInfo
-object in een VisualSearchRequest
te laden. Het ImageInfo
-object bevat ook de URL van de afbeelding:
CropArea CropArea = new CropArea(top: (float)0.01, bottom: (float)0.30, left: (float)0.01, right: (float)0.20);
string imageURL = "https://learn.microsoft.com/azure/cognitive-services/Bing-visual-search/media/ms_srleaders.jpg";
ImageInfo imageInfo = new ImageInfo(cropArea: CropArea, url: imageURL);
VisualSearchRequest visualSearchRequest = new VisualSearchRequest(imageInfo: imageInfo);
Zoeken naar afbeeldingen die lijken op het bij te snijden gedeelte
De variabele VisualSearchRequest
bevat informatie over het bij te snijden deel in de afbeelding en de bijbehorende URL. Met de VisualSearchMethodAsync()
-methode worden de resultaten opgehaald:
Console.WriteLine("\r\nSending visual search request with knowledgeRequest that contains URL and crop area");
var visualSearchResults = client.Images.VisualSearchMethodAsync(knowledgeRequest: visualSearchRequest).Result;
De URL-gegevens ophalen van ImageModuleAction
Resultaten van Bing Visual Search zijn ImageTag
-objecten. Elke tag bevat een lijst met ImageAction
-objecten. Elk object van het type ImageAction
bevat een Data
-veld. Dit is een lijst met waarden die afhankelijk zijn van het type actie.
U kunt de verschillende typen afdrukken met de volgende code:
Console.WriteLine("\r\n" + "ActionType: " + i.ActionType + " -> WebSearchUrl: " + i.WebSearchUrl);
De volledige toepassing retourneert:
ActionType | URL |
---|---|
PagesIncluding WebSearchURL | |
MoreSizes WebSearchURL | |
VisualSearch WebSearchURL | |
ImageById WebSearchURL | |
RelatedSearches WebSearchURL | |
Entiteit -> WebSearchUrl | https://www.bing.com/cr?IG=E40D0E1A13404994ACB073504BC937A4& CID=03DCF882D7386A442137F49BD6596BEF&rd=1&h=BvvDoRtmZ35Xc_UZE4lZx6_eg7FHgcCkigU1D98NHQo&v=1&r=https%3a%2f%2fwww.bing.com%2fsearch%3fq%3dSatya%2bNadella&p=DevEx,5380.1 |
TopicResults -> WebSearchUrl | https://www.bing.com/cr?IG=E40D0E1A13404994ACB073504BC937A4& CID=03DCF882D7386A442137F49BD6596BEF&rd=1&h=3QGtxPb3W9LemuHRxAlW4CW7XN4sPkUYCUynxAqI9zQ&v=1&r=https%3a%2f%2fwww.bing.com%2fdiscover%2fnadella%2bsatya&p=DevEx,5382.1 |
ImageResults -> WebSearchUrl | https://www.bing.com/cr?IG=E40D0E1A13404994ACB073504BC937A4& CID=03DCF882D7386A442137F49BD6596BEF&rd=1&h=l-WNHO89Kkw69AmIGe2MhlUp6MxR6YsJszgOuM5sVLs&v=1&r=https%3a%2f%2fwww.bing.com%2fimages%2fsearch%3fq%3dSatya%2bNadella&p=DevEx,5384.1 |
Zoals hierboven weergegeven, bevat Entity
ActionType een Bing-zoekquery waarmee informatie wordt geretourneerd over een herkenbare persoon, een herkenbare plaats of een herkenbaar ding. De typen TopicResults
en ImageResults
bevatten zoekopdrachten naar gerelateerde afbeeldingen. De URL's in de lijst zijn koppelingen naar Bing-zoekresultaten.
URL's voor PagesIncluding
ActionType
-afbeeldingen ophalen
Voor het ophalen van de werkelijke afbeeldings-URL's is een cast vereist die een ActionType
leest als ImageModuleAction
, die een Data
-element met een waardelijst bevat. Elke waarde is de URL van een afbeelding. De volgende code cast het actietype PagesIncluding
naar ImageModuleAction
en leest de waarde:
if (i.ActionType == "PagesIncluding")
{
foreach(ImageObject o in (i as ImageModuleAction).Data.Value)
{
Console.WriteLine("ContentURL: " + o.ContentUrl);
}
}