Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Note
Azure AI-sökning är tillgängligt via Azure-portalen, REST-API:er och Azure-SDK:er. Den ligger också till grund för Foundry IQ, det hanterade kunskapsskiktet som omvandlar företagsinnehåll till återanvändbara, behörighetsmedvetna kunskapsbaser för agenter i Microsoft Foundry-portalen.
Bilder innehåller ofta användbar information som är relevant i sökscenarier. Azure AI-sökning frågar inte efter bildinnehåll i realtid, men du kan extrahera information om en bild under indexeringen och göra innehållet sökbart. Om du vill representera bildinnehåll i ett sökindex kan du använda följande metoder:
- Vektorisera bilder för att representera visuellt innehåll som en sökbar vektor.
- Verbalisera bilder med hjälp av GenAI Prompt-funktionen som skickar en verbaliseringsbegäran till en LLM-chattkompletteringsmodell för att beskriva bilden.
- Analysera bilder med hjälp av en bildanalysfärdighet för att generera en textrepresentation av en bild, till exempel maskros för ett foto av en maskros eller färgen gul. Du kan också extrahera metadata om bilden, till exempel dess storlek.
- Använd OCR för att extrahera text och från foton eller bilder, till exempel ordet STOP i ett stopptecken.
Du kan också skapa en anpassad färdighet för att anropa alla externa bildbearbetningar som du vill tillhandahålla.
Den här artikeln fokuserar på bildanalys och OCR, anpassade kunskaper som ger extern bearbetning, arbete med inbäddade bilder och överlägg visualiseringar på ursprungliga bilder. Om verbalisering eller vektorisering är din föredragna metod kan du läsa Multimodal sökning i stället.
Om du vill arbeta med bildinnehåll i en kompetensuppsättning behöver du:
- Källfiler som innehåller bilder
- En sökindexerare, konfigurerad för bildåtgärder
- En kompetensuppsättning med inbyggda eller anpassade kunskaper som anropar OCR eller bildanalys
- Ett sökindex med fält för att ta emot analyserade textutdata, samt mappningar av utdatafält i indexer som upprättar associationer.
Du kan också definiera projektioner för att acceptera bildanalyserade utdata i ett kunskapslager för datautvinningsscenarier.
Konfigurera källfiler
Bildbearbetningen är indexerdriven, vilket innebär att rådataindata måste finnas i en datakälla som stöds.
- Bildanalys stöder JPEG, PNG, GIF och BMP
- OCR stöder JPEG, PNG, BMP och TIF
Bilder är antingen fristående binära filer eller inbäddade i dokument, till exempel PDF-, RTF- eller Microsoft-programfiler. Högst 1 000 bilder kan extraheras från ett visst dokument. Om det finns fler än 1 000 bilder i ett dokument extraheras de första 1 000 och sedan genereras en varning.
Azure Blob Storage är den mest frekvent använda lagringen för bildbearbetning i Azure AI-sökning. Det finns tre huvudsakliga uppgifter som rör hämtning av avbildningar från en blobcontainer:
Aktivera access till innehåll i containern. Om du använder en anslutningssträng med fullständig åtkomst som innehåller en nyckel, ger nyckeln dig åtkomst till innehållet. Du kan också autentisera med hjälp av en hanterad identitet eller ansluta som en betrodd tjänst.
Skapa en datakälla av typen azureblob som ansluter till blobcontainern som lagrar dina filer.
Granska gränserna för tjänstnivå för att se till att dina källdata är under maximal storlek och kvantitetsgränser för indexerare och berikning.
Konfigurera indexerare för bildbearbetning
När källfilerna har konfigurerats aktiverar du avbildningsnormalisering genom att ange parametern imageAction i indexerarens konfiguration. Bildnormalisering hjälper till att göra bilderna mer enhetliga för nedströmsbearbetning. Bildnormalisering innehåller följande åtgärder:
- Stora bilder ändras till en maximal höjd och bredd för att göra dem enhetliga.
- För bilder som har metadata som anger orientering justeras bildrotationen för vertikal inläsning.
Observera att om du aktiverar imageAction (om du anger den här parametern till andra än none) debiteras en extra kostnad för bildextrahering enligt prissättningen Azure AI-sökning.
Metadatajusteringar registreras i en komplex typ som skapats för varje bild. Du kan inte välja bort kravet på bildnormalisering. Kunskaper som itererar över bilder, till exempel OCR och bildanalys, förväntar sig normaliserade bilder.
Skapa eller uppdatera en indexerare för att ange konfigurationsegenskaperna:
{ "parameters": { "configuration": { "dataToExtract": "contentAndMetadata", "parsingMode": "default", "imageAction": "generateNormalizedImages" } } }Ange
dataToExtracttillcontentAndMetadata(krävs).Kontrollera att
parsingModeär inställd på standard (krävs).Den här parametern avgör kornigheten för sökdokument som skapats i indexet. Standardläget konfigurerar en en-till-en-korrespondens så att en blob resulterar i ett sökdokument. Om dokumenten är stora, eller om färdigheterna kräver mindre textsegment, kan du lägga till färdigheten Textdelning som delar upp ett dokument i sidindelning för bearbetningsändamål. Men för sökscenarier krävs en blob per dokument om berikning omfattar bildbearbetning.
Ange
imageActionför att aktiveranormalized_imagesnoden i ett berikningsträd (krävs):generateNormalizedImagesför att generera en array med normaliserade bilder som en del av dokumentbehandling.generateNormalizedImagePerPage(gäller endast PDF) för att generera en matris med normaliserade bilder där varje sida i PDF-filen återges till en utdatabild. För icke-PDF-filer är beteendet för den här parametern ungefär som om du hade angettgenerateNormalizedImages. Att ställa ingenerateNormalizedImagePerPagekan dock göra indexeringsåtgärden mindre effektiv (särskilt för stora dokument) eftersom flera bilder måste genereras.
Du kan också justera bredden eller höjden på de genererade normaliserade bilderna:
normalizedImageMaxWidthi bildpunkter. Standardvärdet är 2 000. Maximalt värde är 10 000.normalizedImageMaxHeighti bildpunkter. Standardvärdet är 2 000. Maximalt värde är 10 000.
Standardvärdet på 2 000 bildpunkter för de normaliserade bildernas maximala bredd och höjd baseras på de maximala storlekar som stöds av OCR-färdigheten och bildanalysens skicklighet. OCR-färdigheten stöder en maximal bredd och höjd på 4 200 för icke-engelska språk och 10 000 för engelska. Om du ökar de maximala gränserna kan bearbetningen misslyckas på större bilder beroende på din kompetensuppsättningsdefinition och dokumentens språk.
Du kan också ange filtypkriterier om arbetsbelastningen är inriktad på en viss filtyp. Blob Indexer-konfigurationen innehåller inställningar för filinkludering och undantag. Du kan filtrera bort filer som du inte vill ha.
{
"parameters" : {
"configuration" : {
"indexedFileNameExtensions" : ".pdf, .docx",
"excludedFileNameExtensions" : ".png, .jpeg"
}
}
}
Om normaliserade bilder
När imageAction är inställt på ett annat värde än inget, innehåller det nya normalized_images fältet en matris med bilder. Varje bild är en komplex typ som har följande medlemmar:
| Bildmedlem | Description |
|---|---|
| data | BASE64-kodad sträng för den normaliserade bilden i JPEG-format. |
| width | Bredden på den normaliserade bilden i bildpunkter. |
| height | Höjden på den normaliserade bilden i bildpunkter. |
| originalWidth | Bildens ursprungliga bredd före normalisering. |
| originalHeight | Bildens ursprungliga höjd före normalisering. |
| rotationFromOriginal | Motsols rotation i grader som uppstod för att skapa den normaliserade avbildningen. Ett värde mellan 0 grader och 360 grader. Det här steget läser metadata från bilden som genereras av en kamera eller skanner. Vanligtvis en multipel av 90 grader. |
| contentOffset | Teckenförskjutningen i innehållsfältet där bilden extraherades från. Det här fältet gäller endast för filer med inbäddade bilder.
contentOffset bilder som extraherats från PDF-dokument finns alltid i slutet av texten på sidan i dokumentet som de extraherades från. Det innebär att bilder visas efter all text på den sidan, oavsett bildens ursprungliga plats på sidan. |
| pageNumber | Om bilden extraherades eller renderades från en PDF innehåller det här fältet sidnumret i PDF-filen som den extraherades eller renderades från, från och med 1. Om avbildningen inte är från en PDF-fil är det här fältet 0. |
| boundingPolygon | Om bilden extraherades eller renderades från en PDF innehåller det här fältet koordinaterna för den avgränsningspolygon som omger bilden på sidan. Polygonen representeras som en kapslad matris med punkter, där varje punkt har x- och y-koordinater som normaliseras till sidans dimensioner. Detta gäller endast för bilder som extraherats med .imageAction: generateNormalizedImages |
Exempelvärde för normalized_images:
[
{
"data": "BASE64 ENCODED STRING OF A JPEG IMAGE",
"width": 500,
"height": 300,
"originalWidth": 5000,
"originalHeight": 3000,
"rotationFromOriginal": 90,
"contentOffset": 500,
"pageNumber": 2,
"boundingPolygon": "[[{\"x\":0.0,\"y\":0.0},{\"x\":500.0,\"y\":0.0},{\"x\":0.0,\"y\":300.0},{\"x\":500.0,\"y\":300.0}]]"
}
]
Avgränsande polygondata representeras som en sträng som innehåller en dubbelt kapslad, JSON-kodad array med polygoner. Varje polygon är en matris med punkter, där varje punkt har x- och y-koordinater. Koordinaterna är relativa till PDF-sidan, med ursprunget (0, 0) i det övre vänstra hörnet.
För närvarande ger bilder som extraheras med imageAction: generateNormalizedImages alltid en enda polygon, men den dubbelnästlade strukturen bibehålls för att vara konsekvent med färdigheter som stöder flera polygoner, till exempel Azure Content Understanding-färdigheten.
Definiera kompetensuppsättningar för bildbearbetning
Det här avsnittet kompletterar kunskapsreferensartiklarna genom att ge sammanhang för att arbeta med kunskapsindata, utdata och mönster, eftersom de relaterar till bildbearbetning.
Skapa eller uppdatera en kompetensuppsättning för att lägga till färdigheter.
Lägg till mallar för OCR och bildanalys från Azure-portalen eller kopiera definitionerna från skill-referensens dokumentation. Infoga dem i kompetensmatrisen för din kompetensuppsättningsdefinition.
Om det behövs ska du inkludera en Microsoft Foundry-resursnyckel i kompetensuppsättningen. Azure AI-sökning anropar en fakturerbar Microsoft Foundry-resurs för OCR och bildanalys för transaktioner som överskrider den kostnadsfria gränsen (20 per indexerare per dag). Om du inte använder en nyckellös anslutning måste Microsoft Foundry-resursen finnas i samma region som söktjänsten.
Om originalbilderna är inbäddade i PDF- eller programfiler som PPTX eller DOCX måste du lägga till en kunskaper om att sammanfoga text om du vill ha bildutdata och textutdata tillsammans. I den här artikeln beskrivs hur du arbetar med inbäddade avbildningar.
När det grundläggande ramverket för din kompetensuppsättning har skapats och Foundry Tools har konfigurerats kan du fokusera på varje enskild bildfärdighet, definiera indata och källkontext och mappa utdata till fält i ett index- eller kunskapslager.
Note
Ett exempel på en kunskapsuppsättning som kombinerar bildbearbetning med nedströms bearbetning av naturligt språk finns i självstudien REST: Använd REST och AI för att generera sökbart innehåll från Azure blobbar. Det visar hur du matar in färdighetsavbildning i entitetsigenkänning och extrahering av nyckelfraser.
Indata för bildbearbetning
Som nämnts extraheras bilder under dokumentanalys och normaliseras därefter som ett första steg. De normaliserade bilderna är indata för alla kunskaper i bildbearbetning och representeras alltid i ett berikat dokumentträd på något av två sätt:
/document/normalized_images/*gäller för dokument som bearbetas helt./document/normalized_images/*/pagesär för dokument som bearbetas i segment (sidor).
Oavsett om du använder OCR och bildanalys på samma sätt har indata praktiskt taget samma konstruktion:
{
"@odata.type": "#Microsoft.Skills.Vision.OcrSkill",
"context": "/document/normalized_images/*",
"detectOrientation": true,
"inputs": [
{
"name": "image",
"source": "/document/normalized_images/*"
}
],
"outputs": [ ]
},
{
"@odata.type": "#Microsoft.Skills.Vision.ImageAnalysisSkill",
"context": "/document/normalized_images/*",
"visualFeatures": [ "tags", "description" ],
"inputs": [
{
"name": "image",
"source": "/document/normalized_images/*"
}
],
"outputs": [ ]
}
Mappa utdata till sökfält
I en kompetensuppsättning är bildanalys och OCR-kunskapsutdata alltid text. Utdatatext representeras som noder i ett internt berikat dokumentträd, och varje nod måste mappas till fält i ett sökindex, eller till projektioner i ett kunskapslager, för att göra innehållet tillgängligt i din app.
I kompetensuppsättningen granskar du
outputsdelen för varje färdighet för att avgöra vilka noder som finns i det utökade dokumentet.{ "@odata.type": "#Microsoft.Skills.Vision.OcrSkill", "context": "/document/normalized_images/*", "detectOrientation": true, "inputs": [ ], "outputs": [ { "name": "text", "targetName": "text" }, { "name": "layoutText", "targetName": "layoutText" } ] }Skapa eller uppdatera ett sökindex för att lägga till fält för att acceptera kunskapsutdata.
I följande exempel på fältsamling är innehållet blobinnehåll. Metadata_storage_name innehåller namnet på filen (inställd
retrievablepå true). Metadata_storage_path är blobens unika sökväg och är standarddokumentnyckeln. Merged_content är utdata från Text Merge (användbart när bilder är inbäddade).Text och layoutText är OCR-kunskapsutdata och måste vara en strängsamling för att samla in alla OCR-genererade utdata för hela dokumentet.
"fields": [ { "name": "content", "type": "Edm.String", "filterable": false, "retrievable": true, "searchable": true, "sortable": false }, { "name": "metadata_storage_name", "type": "Edm.String", "filterable": true, "retrievable": true, "searchable": true, "sortable": false }, { "name": "metadata_storage_path", "type": "Edm.String", "filterable": false, "key": true, "retrievable": true, "searchable": false, "sortable": false }, { "name": "merged_content", "type": "Edm.String", "filterable": false, "retrievable": true, "searchable": true, "sortable": false }, { "name": "text", "type": "Collection(Edm.String)", "filterable": false, "retrievable": true, "searchable": true }, { "name": "layoutText", "type": "Collection(Edm.String)", "filterable": false, "retrievable": true, "searchable": true } ],Uppdatera indexeraren för att mappa kunskapsuppsättningsutdata (noder i ett berikningsträd) till indexfält.
Berikade dokument är interna. Om du vill externalisera noderna i ett berikat dokumentträd konfigurerar du en mappning av utdatafält som anger vilket indexfält som tar emot nodinnehåll. Berikade data nås av din app via ett indexfält. I följande exempel visas en textnod (OCR-utdata) i ett berikat dokument som mappas till ett textfält i ett sökindex.
"outputFieldMappings": [ { "sourceFieldName": "/document/normalized_images/*/text", "targetFieldName": "text" }, { "sourceFieldName": "/document/normalized_images/*/layoutText", "targetFieldName": "layoutText" } ]Kör indexeraren för att anropa källdokumenthämtning, bildbearbetning och indexering.
Verifiera resultat
Kör en fråga mot indexet för att kontrollera resultatet av bildbearbetningen. Använd Search Explorer som en sökklient eller något verktyg som skickar HTTP-begäranden. Följande fråga väljer fält som innehåller utdata från bildbearbetningen.
POST /indexes/[index name]/docs/search?api-version=[api-version]
{
"search": "*",
"select": "metadata_storage_name, text, layoutText, imageCaption, imageTags"
}
OCR identifierar text i bildfiler. Det innebär att OCR-fält (text och layoutText) är tomma om källdokument är ren text eller rena bilder. På samma sätt är bildanalysfälten (imageCaption och imageTags) tomma om källdokumentindata är strikt text. Indexerarens körning avger varningar om avbildningsingångar är tomma. Sådana varningar kan förväntas när noder är tomma i det berikade dokumentet. Kom ihåg att blobindexering gör att du kan inkludera eller exkludera filtyper om du vill arbeta med innehållstyper isolerat. Du kan använda de här inställningarna för att minska bruset under indexeringskörningar.
En alternativ fråga för att kontrollera resultaten kan innehålla innehåll och merged_content fält. Observera att fälten innehåller innehåll för alla blobfiler, även de där ingen bildbearbetning utfördes.
Om kunskapsutdata
Färdighetsutdata inkluderar text (OCR), layoutText (OCR), merged_content, captions (bildanalys), tags (bildanalys):
textlagrar OCR-genererade utdata. Den här noden ska mappas till fältet av typenCollection(Edm.String). Det finns etttextfält per sökdokument som består av kommaavgränsade strängar för dokument som innehåller flera bilder. Följande bild visar OCR-utdata för tre dokument. Först är ett dokument som innehåller en fil utan bilder. Det andra är ett dokument (bildfil) som innehåller ett ord, Microsoft. Det tredje är ett dokument som innehåller flera bilder, vissa utan text ("",)."value": [ { "@search.score": 1, "metadata_storage_name": "facts-about-microsoft.html", "text": [] }, { "@search.score": 1, "metadata_storage_name": "guthrie.jpg", "text": [ "Microsoft" ] }, { "@search.score": 1, "metadata_storage_name": "Foundry Tools and Content Intelligence.pptx", "text": [ "", "Microsoft", "", "", "", "Azure AI Search and Augmentation Combining Foundry Tools and Azure Search" ] } ]layoutTextlagrar OCR-genererad information om textplatsen på sidan, som beskrivs i termer av avgränsningsrutor och koordinater för den normaliserade bilden. Den här noden ska mappas till fältet av typenCollection(Edm.String). Det finns ettlayoutTextfält per sökdokument som består av kommaavgränsade strängar.merged_contentlagrar utdata från en färdighet för sammanslagning av text, och det bör vara ett stort fält av typenEdm.Stringsom innehåller rå text från källdokumentet, med inbäddattexti stället för en bild. Om filer endast innehåller text, så har OCR och bildanalys inget arbete, ochmerged_contentär samma somcontent(en blobegenskap som innehåller innehållet i bloben).imageCaptioninnehåller en beskrivning av en bild som enskilda taggar och en längre textbeskrivning.imageTagslagrar taggar om en bild som en samling nyckelord, en samling för alla bilder i källdokumentet.
Följande skärmbild är en bild av en PDF som innehåller text och inbäddade bilder. Dokumentsprickor upptäckte tre inbäddade bilder: flock med måsar, karta, örn. Annan text i exemplet (inklusive rubriker, rubriker och brödtext) extraherades som text och exkluderades från bildbearbetning.
Bildanalysutdata illustreras i följande JSON (sökresultat). Med kunskapsdefinitionen kan du ange vilka visuella funktioner som är av intresse. I det här exemplet producerades taggar och beskrivningar, men det finns fler utdata att välja mellan.
imageCaptionoutput är en matris med beskrivningar, en per bild, som anges genomtagsatt bestå av enkla ord och längre fraser som beskriver bilden. Observera att taggarna som består av en flock måsar simmar i vattnet eller en närbild av en fågel.imageTagsoutput är en matris med enskilda taggar som anges i skapandeordningen. Observera att taggarna upprepas. Det finns ingen aggregering eller gruppering.
"imageCaption": [
"{\"tags\":[\"bird\",\"outdoor\",\"water\",\"flock\",\"many\",\"lot\",\"bunch\",\"group\",\"several\",\"gathered\",\"pond\",\"lake\",\"different\",\"family\",\"flying\",\"standing\",\"little\",\"air\",\"beach\",\"swimming\",\"large\",\"dog\",\"landing\",\"jumping\",\"playing\"],\"captions\":[{\"text\":\"a flock of seagulls are swimming in the water\",\"confidence\":0.70419257326275686}]}",
"{\"tags\":[\"map\"],\"captions\":[{\"text\":\"map\",\"confidence\":0.99942880868911743}]}",
"{\"tags\":[\"animal\",\"bird\",\"raptor\",\"eagle\",\"sitting\",\"table\"],\"captions\":[{\"text\":\"a close up of a bird\",\"confidence\":0.89643581933539462}]}",
. . .
"imageTags": [
"bird",
"outdoor",
"water",
"flock",
"animal",
"bunch",
"group",
"several",
"drink",
"gathered",
"pond",
"different",
"family",
"same",
"map",
"text",
"animal",
"bird",
"bird of prey",
"eagle"
. . .
Scenario: Inbäddade avbildningar i PDF-filer
När de bilder du vill bearbeta är inbäddade i andra filer, till exempel PDF eller DOCX, utdrar berikningspipelinene enbart bilderna och skickar dem sedan till OCR eller bildanalys för bearbetning. Bildextrahering sker under dokumentets sprickfas, och när bilderna har separerats förblir de separata om du inte uttryckligen sammanfogar de bearbetade utdata tillbaka till källtexten.
Textsammanslagning används för att föra tillbaka bildbearbetningsutdata till dokumentet. Även om sammanslagning av text inte är ett hårt krav anropas det ofta så att bildutdata (OCR-text, OCR layoutText, bildtaggar, bildtexter) kan återinföras i dokumentet. Beroende på färdigheten ersätter bildens utdata en inbäddad binär bild med en motsvarande text på plats. Bildanalysutdata kan sammanfogas på bildplatsen. OCR-utdata visas alltid i slutet av varje sida.
Följande arbetsflöde beskriver processen för bildextrahering, analys, sammanslagning och hur du utökar pipelinen för att skicka bildbearbetade utdata till andra textbaserade kunskaper som entitetsigenkänning eller textöversättning.
När du har anslutit till datakällan läser indexeraren in och bearbetar källdokument, extraherar bilder och text och köar varje typ av innehåll för bearbetning. Ett berikat dokument som endast består av en rotnod (dokument) skapas.
Bilder i kön normaliseras och skickas till berikade dokument som ett dokument/normalized_images nod.
Bildberikningar körs med indata
"/document/normalized_images".Bildutdata skickas till det berikade dokumentträdet, med varje utdata som en separat nod. Utdata varierar beroende på skicklighet (text och layoutText för OCR, taggar och bildtexter för bildanalys).
Valfritt men rekommenderas om du vill att sökdokument ska inkludera både text och text med ursprung från bild tillsammans, körs Textmerge för att kombinera textrepresentationen av dessa bilder med den råtext som extraheras från filen. Textsegment konsolideras till en enda stor sträng, där texten först infogas i strängen och sedan OCR-textutdata eller bildtaggar och bildtexter.
Utdata från Sammanslagning av text är nu den slutgiltiga text som ska analyseras för eventuella underordnade kunskaper som utför textbearbetning. Om din kompetensuppsättning till exempel innehåller både OCR och Entitetsigenkänning ska indata till Entitetsigenkänning vara
"document/merged_text"(målnamnet för kunskapsutdata för textsammanslagning).När alla funktioner har körts är det berikade dokumentet färdigt. I det sista steget refererar indexerare till utdatafältmappningar för att skicka berikat innehåll till enskilda fält i sökindexet.
I följande exempeluppsättning skapas ett merged_text fält som innehåller den ursprungliga texten i dokumentet med inbäddad OCRed-text i stället för inbäddade bilder. Den innehåller också en entitetsigenkänningsfärdighet som använder merged_text som indata.
Syntax för begärandetext
{
"description": "Extract text from images and merge with content text to produce merged_text",
"skills":
[
{
"description": "Extract text (plain and structured) from image.",
"@odata.type": "#Microsoft.Skills.Vision.OcrSkill",
"context": "/document/normalized_images/*",
"defaultLanguageCode": "en",
"detectOrientation": true,
"inputs": [
{
"name": "image",
"source": "/document/normalized_images/*"
}
],
"outputs": [
{
"name": "text"
}
]
},
{
"@odata.type": "#Microsoft.Skills.Text.MergeSkill",
"description": "Create merged_text, which includes all the textual representation of each image inserted at the right location in the content field.",
"context": "/document",
"insertPreTag": " ",
"insertPostTag": " ",
"inputs": [
{
"name":"text", "source": "/document/content"
},
{
"name": "itemsToInsert", "source": "/document/normalized_images/*/text"
},
{
"name":"offsets", "source": "/document/normalized_images/*/contentOffset"
}
],
"outputs": [
{
"name": "mergedText", "targetName" : "merged_text"
}
]
},
{
"@odata.type": "#Microsoft.Skills.Text.V3.EntityRecognitionSkill",
"context": "/document",
"categories": [ "Person"],
"defaultLanguageCode": "en",
"minimumPrecision": 0.5,
"inputs": [
{
"name": "text", "source": "/document/merged_text"
}
],
"outputs": [
{
"name": "persons", "targetName": "people"
}
]
}
]
}
Nu när du har ett merged_text fält kan du mappa det som ett sökbart fält i indexerarens definition. Allt innehåll i dina filer, inklusive texten i bilderna, kommer att vara sökbart.
Scenario: Visualisera begränsningsrutor
Ett annat vanligt scenario är att visualisera layoutinformation för sökresultat. Du kanske till exempel vill markera var en textdel hittades i en bild som en del av sökresultaten.
Eftersom OCR-steget utförs på de normaliserade bilderna finns layoutkoordinaterna i det normaliserade bildutrymmet, men om du behöver visa den ursprungliga bilden konverterar du koordinatpunkter i layouten till det ursprungliga bildkoordinatsystemet.
Följande algoritm illustrerar mönstret:
/// <summary>
/// Converts a point in the normalized coordinate space to the original coordinate space.
/// This method assumes the rotation angles are multiples of 90 degrees.
/// </summary>
public static Point GetOriginalCoordinates(Point normalized,
int originalWidth,
int originalHeight,
int width,
int height,
double rotationFromOriginal)
{
Point original = new Point();
double angle = rotationFromOriginal % 360;
if (angle == 0 )
{
original.X = normalized.X;
original.Y = normalized.Y;
} else if (angle == 90)
{
original.X = normalized.Y;
original.Y = (width - normalized.X);
} else if (angle == 180)
{
original.X = (width - normalized.X);
original.Y = (height - normalized.Y);
} else if (angle == 270)
{
original.X = height - normalized.Y;
original.Y = normalized.X;
}
double scalingFactor = (angle % 180 == 0) ? originalHeight / height : originalHeight / width;
original.X = (int) (original.X * scalingFactor);
original.Y = (int)(original.Y * scalingFactor);
return original;
}
Scenario: Anpassade bildfärdigheter
Bilder kan också skickas till och returneras från anpassade funktioner. En färdighetsuppsättning base64-kodar bilden som skickas in i den anpassade färdigheten. Om du vill använda avbildningen inom den anpassade färdigheten anger du "/document/normalized_images/*/data" som indata till den anpassade färdigheten. I din anpassade färdighetskod, base64-avkoda strängen innan du konverterar den till en bild. För att returnera en bild till skillsetet, base64-koda bilden innan du returnerar den till skillsetet.
Bilden returneras som ett objekt med följande egenskaper.
{
"$type": "file",
"data": "base64String"
}
Azure Search Python-exempel-kodförrådet har ett komplett exempel i Python med en anpassad funktion som berikar bilder.
Överföra bilder till anpassade färdigheter
För scenarier där du behöver en anpassad färdighet för att arbeta med bilder kan du skicka bilder till den anpassade färdigheten och få den att returnera text eller bilder. Följande kompetenser är från ett urval.
Följande färdighetsuppsättning tar den normaliserade bilden (som erhålls under dokumentbearbetning) och producerar skivor av bilden.
Exempel på kompetens
{
"description": "Extract text from images and merge with content text to produce merged_text",
"skills":
[
{
"@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
"name": "ImageSkill",
"description": "Segment Images",
"context": "/document/normalized_images/*",
"uri": "https://your.custom.skill.url",
"httpMethod": "POST",
"timeout": "PT30S",
"batchSize": 100,
"degreeOfParallelism": 1,
"inputs": [
{
"name": "image",
"source": "/document/normalized_images/*"
}
],
"outputs": [
{
"name": "slices",
"targetName": "slices"
}
],
"httpHeaders": {}
}
]
}
Exempel på anpassad kompetens
Den anpassade färdigheten i sig är separat från kompetenserna. I det här fallet är det en Python-kod som först loopar genom batchen med förfrågningsposter i det anpassade skicklighetsformatet och sedan konverterar den base64-kodade strängen till en bild.
# deserialize the request, for each item in the batch
for value in values:
data = value['data']
base64String = data["image"]["data"]
base64Bytes = base64String.encode('utf-8')
inputBytes = base64.b64decode(base64Bytes)
# Use numpy to convert the string to an image
jpg_as_np = np.frombuffer(inputBytes, dtype=np.uint8)
# you now have an image to work with
På samma sätt som när man returnerar en bild, returnerar man en base64-kodad sträng i ett JSON-objekt med en $type egenskap av file.
def base64EncodeImage(image):
is_success, im_buf_arr = cv2.imencode(".jpg", image)
byte_im = im_buf_arr.tobytes()
base64Bytes = base64.b64encode(byte_im)
base64String = base64Bytes.decode('utf-8')
return base64String
base64String = base64EncodeImage(jpg_as_np)
result = {
"$type": "file",
"data": base64String
}