Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Note
Azure AI Vyhledávač je k dispozici prostřednictvím portálu Azure, rozhraní REST API a Sady Azure SDK. Podporuje také Foundry IQ, spravovanou znalostní vrstvu, která transformuje podnikový obsah na opakovaně použitelné znalostní báze s podporou oprávnění pro agenty na portálu Microsoft Foundry.
Obrázky často obsahují užitečné informace, které jsou relevantní ve scénářích hledání. Azure AI Vyhledávač nevytváří dotaz na obsah obrázků v reálném čase, ale během indexování můžete extrahovat informace o obrázku a tento obsah prohledávat. Pokud chcete reprezentovat obsah obrázku v indexu vyhledávání, můžete použít tyto přístupy:
- Vektorizovat obrázky tak, aby představovaly vizuální obsah jako prohledávatelný vektor.
- Popište obrázky pomocí funkce GenAI Prompt, která odešle požadavek na slovní vyjádření modelu LLM na dokončení chatu k popisu obrázku.
- Analýza obrázků pomocí dovednosti analýzy obrázku k vygenerování textové reprezentace obrázku, jako je pamdelion pro fotku pamdelionu nebo barva žlutá. Můžete také extrahovat metadata o obrázku, například jeho velikost.
- Pomocí OCR můžete extrahovat text a z fotek nebo obrázků, například slovo STOP ve znaméně stop.
Můžete také vytvořit vlastní dovednost pro vyvolání jakéhokoli externího zpracování obrázků, které chcete poskytnout.
Tento článek se zaměřuje na analýzu obrázků a OCR, speciální dovednosti, které poskytují externí zpracování, práci s vloženými obrázky a překryvné vizualizace na původních obrázcích. Pokud je preferovaným přístupem slovesnost nebo vektorizace, přečtěte si místo toho vícemodální vyhledávání .
Pokud chcete pracovat s obsahem obrázků v sadě dovedností, potřebujete:
- Zdrojové soubory, které obsahují obrázky
- Indexer vyhledávání nakonfigurovaný pro akce obrázků
- Sada dovedností s integrovanými nebo vlastními dovednostmi, které vyvolávají analýzu OCR nebo obrázků
- Index vyhledávání s poli pro příjem analyzovaného textového výstupu a mapování výstupních polí v indexeru, které vytvářejí přidružení
Volitelně můžete definovat projekce pro přijetí výstupu z analýzy obrázku do repozitáře znalostí pro scénáře dolování dat.
Nastavení zdrojových souborů
Zpracování obrázků je řízeno indexerem, což znamená, že nezpracované vstupy musí být v podporovaném zdroji dat.
- Analýza obrázků podporuje JPEG, PNG, GIF a BMP.
- OCR podporuje JPEG, PNG, BMP a TIF.
Obrázky jsou buď samostatné binární soubory, nebo vložené do dokumentů, jako jsou PDF, RTF nebo soubory aplikací Microsoftu. Z daného dokumentu lze extrahovat maximálně 1 000 obrázků. Pokud je v dokumentu více než 1 000 obrázků, vyextrahuje se prvních 1 000 a vygeneruje se upozornění.
Azure Blob Storage je nejčastěji používaným storage pro zpracování obrázků v Azure AI Vyhledávač. Existují tři hlavní úlohy související s načtením obrázků z blob kontejneru:
Povolte access obsahu v kontejneru. Pokud používáte úplný přístupový řetězec, který obsahuje klíč, ten vám udělí oprávnění k obsahu. Případně můžete ověřit pomocí spravované identity nebo připojit se jako důvěryhodná služba.
Vytvořte zdroj dat typu azureblob, který se připojuje k kontejneru objektů blob, do kterého se ukládají soubory.
Zkontrolujte limity úrovně služby a ujistěte se, že zdrojová data jsou pod maximální velikostí a omezeními množství pro indexery a rozšiřování.
Konfigurace indexerů pro zpracování obrázků
Po nastavení zdrojových souborů povolte normalizaci image nastavením parametru v konfiguraci indexeru imageAction . Normalizace obrázků pomáhá zajistit jednotnost pro následné zpracování. Normalizace obrázků zahrnuje následující operace:
- Velikost velkých obrázků se mění na maximální výšku a šířku, aby byly jednotná.
- U obrázků s metadaty, které určují orientaci, se otočení obrázku upraví pro vertikální načítání.
Upozorňujeme, že povolení imageAction (nastavení tohoto parametru na jinou než none) bude účtovat další poplatek za extrakci obrázků podle cen Azure AI Vyhledávač.
Úpravy metadat se zaznamenávají ve složitém typu vytvořeném pro každou image. Z požadavku na normalizaci obrázku se nemůžete odhlásit. Dovednosti, které pracují s obrazy, jako je OCR a analýza obrazů, vyžadují normalizované obrazy.
Vytvořte nebo aktualizujte indexer a nastavte vlastnosti konfigurace:
{ "parameters": { "configuration": { "dataToExtract": "contentAndMetadata", "parsingMode": "default", "imageAction": "generateNormalizedImages" } } }Nastaveno
dataToExtractnacontentAndMetadata(povinné).Ověřte, že
parsingModeje nastavená na výchozí (povinné).Tento parametr určuje členitost vyhledávacích dokumentů vytvořených v indexu. Výchozí režim nastaví korespondenci 1:1 tak, aby jeden blob odpovídal jednomu hledanému dokumentu. Pokud jsou dokumenty velké nebo pokud dovednosti vyžadují menší bloky textu, můžete přidat dovednost Rozdělení textu, která rozdělí dokument do stránkování pro účely zpracování. V případě scénářů hledání se ale vyžaduje jeden objekt blob na dokument, pokud rozšiřování zahrnuje zpracování obrázků.
Nastavte
imageActionpro povolení uzlunormalized_imagesve stromu obohacení (povinné):generateNormalizedImagesgenerovat pole normalizovaných obrázků jako součást rozpoznávání dokumentu.generateNormalizedImagePerPage(platí jenom pro PDF) pro vygenerování pole normalizovaných obrázků, kde se každá stránka v PDF vykresluje na jeden výstupní obrázek. U souborů, které nejsou soubory PDF, chování tohoto parametru je podobné, jako kdybyste nastaviligenerateNormalizedImages. NastavenígenerateNormalizedImagePerPagevšak může záměrně snížit výkon indexačních operací (zejména u velkých dokumentů), protože by bylo nutné vygenerovat několik obrázků.
Volitelně můžete upravit šířku nebo výšku vygenerovaných normalizovaných obrázků:
normalizedImageMaxWidthv pixelech. Výchozí hodnota je 2 000. Maximální hodnota je 10 000.normalizedImageMaxHeightv pixelech. Výchozí hodnota je 2 000. Maximální hodnota je 10 000.
Výchozí hodnota 2 000 pixelů pro normalizované obrázky maximální šířky a výšky je založená na maximální velikosti podporované dovedností OCR a dovednosti analýzy obrázků. Dovednost OCR podporuje maximální šířku a výšku 4 200 pro neanglické jazyky a 10 000 pro angličtinu. Pokud zvýšíte maximální limity, zpracování může selhat na větších obrázcích v závislosti na definici sady dovedností a jazyce dokumentů.
Volitelně set kritéria typu souboru pokud úloha cílí na konkrétní typ souboru. Konfigurace indexeru objektů blob zahrnuje nastavení zahrnutí souborů a vyloučení. Můžete vyfiltrovat soubory, které nechcete.
{
"parameters" : {
"configuration" : {
"indexedFileNameExtensions" : ".pdf, .docx",
"excludedFileNameExtensions" : ".png, .jpeg"
}
}
}
Informace o normalizovaných obrázcích
Pokud imageAction je nastavena jiná hodnota než žádná, obsahuje nové normalized_images pole pole obrázků. Každý obrázek je komplexní typ, který má následující členy:
| Prvek obrázku | Description |
|---|---|
| data | Base64 kódovaný řetězec normalizovaného obrázku ve formátu JPEG. |
| width | Šířka normalizovaného obrázku v pixelech |
| height | Výška normalizovaného obrázku v pixelech |
| originalWidth | Původní šířka obrázku před normalizací. |
| originalHeight | Původní výška obrázku před normalizací. |
| rotationFromOriginal | Otočení proti směru hodinových ručiček ve stupních, které bylo použito k vytvoření normalizovaného obrázku. Hodnota mezi 0 a 360 stupni. Tento krok přečte metadata z obrázku vygenerovaného fotoaparátem nebo skenerem. Obvykle násobek 90 stupňů. |
| contentOffset | Posun znaku v poli obsahu, z nějž byl obrázek extrahován. Toto pole platí jenom pro soubory s vloženými obrázky. Obrázky contentOffset extrahované z dokumentů PDF jsou vždy na konci textu na stránce, ze které byly extrahovány z dokumentu. To znamená, že obrázky se zobrazí po všech textech na této stránce bez ohledu na původní umístění obrázku na stránce. |
| pageNumber | Pokud se obrázek extrahoval nebo vykresloval z PDF, obsahuje toto pole číslo stránky v PDF, ze které bylo extrahováno nebo vykresleno od 1. Pokud obrázek není z PDF, je toto pole 0. |
| boundingPolygon | Pokud se obrázek extrahoval nebo vykresloval z PDF, obsahuje toto pole souřadnice ohraničujícího mnohoúhelníku, který obrázek ohraničuje na stránce. Mnohoúhelník je reprezentován jako vnořená matice bodů, kde každý bod má souřadnice x a y normalizované na rozměry stránky. To platí pouze pro obrázky extrahované pomocí imageAction: generateNormalizedImages. |
Ukázková hodnota 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}]]"
}
]
Data ohraničujících mnohoúhelníků jsou reprezentována jako řetězec obsahující dvojitě vnořený JSON kódovaný řetězec mnohoúhelníků. Každý mnohoúhelník je matice bodů, kde každý bod má souřadnice x a y. Souřadnice jsou relativní vzhledem ke stránce PDF s původem (0, 0) v levém horním rohu.
V současné době obrázky extrahované pomocí imageAction: generateNormalizedImages vždy obsahují pouze jeden mnohoúhelník, ale dvojitě vnořená struktura je zachována kvůli konzistenci s dovednostmi, které podporují více mnohoúhelníků, jako je například dovednost Azure Content Understanding skill.
Definice dovedností pro zpracování obrazů
Tato část doplňuje referenční články dovedností tím, že poskytuje kontext pro práci se vstupy dovedností, výstupy a vzory, které souvisejí se zpracováním obrázků.
Vytvořte nebo aktualizujte sadu dovedností, abyste mohli přidat dovednosti.
Přidejte šablony pro analýzu OCR a obrázků z Azure portal nebo zkopírujte definice z referenční dokumentace skill. Vložte je do pole schopností ve vaší definici sady schopností.
V případě potřeby zahrňte do skillsetu klíč prostředku Microsoft Foundry. Azure AI Vyhledávač provádí volání na zpoplatněný prostředek Microsoft Foundry pro OCR a analýzu obrázků pro transakce, které překračují bezplatný limit (20 na indexer na den). Pokud nepoužíváte připojení bez klíčů, musí být prostředek Microsoft Foundry ve stejné oblasti jako vaše vyhledávací služba.
Pokud jsou původní obrázky vložené do souborů PDF nebo aplikací, jako je PPTX nebo DOCX, musíte přidat dovednost sloučení textu, pokud chcete mít výstup obrázku a textový výstup dohromady. Práce s vloženými obrázky je podrobněji popsána v tomto článku.
Jakmile vytvoříte základní architekturu sady dovedností a nakonfigurujete Nástroje Foundry, můžete se zaměřit na jednotlivé dovednosti obrázků, definovat vstupy a zdrojový kontext a mapovat výstupy na pole v indexu nebo úložišti znalostí.
Note
Příklad sady dovedností, která kombinuje zpracování obrázků s podřízeným zpracováním přirozeného jazyka, najdete v tématu REST Tutorial: Použití rozhraní REST a AI ke generování prohledávatelného obsahu z objektů blob Azure. Ukazuje, jak využít výstup z obrazového zpracování dovedností pro rozpoznávání entit a extrakci klíčových frází.
Vstupy pro zpracování obrazu
Jak je uvedeno, obrázky se extrahují během prolomení dokumentu a pak se normalizují jako předběžný krok. Normalizované obrázky jsou vstupy do libovolné dovednosti zpracování obrázků a vždy jsou reprezentovány v rozšířeném stromu dokumentů jedním ze dvou způsobů:
/document/normalized_images/*je určen pro dokumenty, které jsou zpracovány jako celek./document/normalized_images/*/pagesje určen pro dokumenty, které se zpracovávají v blocích (stránkách).
Bez ohledu na to, jestli používáte analýzu OCR a obrázků ve stejné, mají vstupy prakticky stejnou konstrukci:
{
"@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": [ ]
}
Mapování výstupů na vyhledávací pole
V rámci dovedností je výstup analýzy obrázků a OCR vždy text. Výstupní text je reprezentován jako uzly v interním rozšířeném stromu dokumentů a každý uzel musí být namapován na pole v indexu vyhledávání nebo na projekce ve znalostním úložišti, aby byl obsah dostupný ve vaší aplikaci.
V rámci sady dovedností si projděte
outputssekci každé dovednosti a zjistěte, které uzly existují v rozšířeném dokumentu.{ "@odata.type": "#Microsoft.Skills.Vision.OcrSkill", "context": "/document/normalized_images/*", "detectOrientation": true, "inputs": [ ], "outputs": [ { "name": "text", "targetName": "text" }, { "name": "layoutText", "targetName": "layoutText" } ] }Vytvořte nebo aktualizujte index vyhledávání a přidejte pole pro příjem výstupů dovedností.
V následujícím příkladu kolekce polí je obsah obsahem objektu blob. Metadata_storage_name obsahuje název souboru (nastavený
retrievablena hodnotu true). Metadata_storage_path je jedinečná cesta blobu a je výchozím klíčem dokumentu. Merged_content je výstupem funkce Sloučení textu (užitečné při vložení obrázků).Text a layoutText jsou výstupy dovedností OCR a musí se jednat o kolekci řetězců, aby bylo možné zachytit veškerý výstup vygenerovaný OCR pro celý dokument.
"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 } ],Aktualizujte indexer tak, aby mapoval výstupy sady dovedností (uzly ve stromu obohacování) na pole indexu.
Rozšířené dokumenty jsou interní. Pokud chcete externalizovat uzly v rozšířeném stromu dokumentů, nastavte mapování výstupního pole, které určuje, které pole indexu přijímá obsah uzlu. K obohaceným datům přistupuje vaše aplikace prostřednictvím pole indexu. Následující příklad ukazuje textový uzel (výstup OCR) v rozšířeném dokumentu, který je namapovaný na textové pole v indexu vyhledávání.
"outputFieldMappings": [ { "sourceFieldName": "/document/normalized_images/*/text", "targetFieldName": "text" }, { "sourceFieldName": "/document/normalized_images/*/layoutText", "targetFieldName": "layoutText" } ]Spuštěním indexeru vyvoláte načtení zdrojového dokumentu, zpracování obrázků a indexování.
Ověření výsledků
Spuštěním dotazu na index zkontrolujte výsledky zpracování obrázků. Použijte Průzkumníka Search jako klienta vyhledávání nebo jakýkoli nástroj, který odesílá požadavky HTTP. Následující dotaz vybere pole, která obsahují výstup zpracování obrázků.
POST /indexes/[index name]/docs/search?api-version=[api-version]
{
"search": "*",
"select": "metadata_storage_name, text, layoutText, imageCaption, imageTags"
}
OCR rozpozná text v souborech obrázků. To znamená, že pole OCR (text a layoutText) jsou prázdná, pokud jsou zdrojové dokumenty čistě textové nebo čisté obrázky. Podobně jsou pole analýzy obrázků (imageCaption a imageTags) prázdná, pokud jsou vstupy zdrojového dokumentu výhradně textem. Spuštění indexeru vygeneruje upozornění, pokud jsou vstupy imaging prázdné. Taková upozornění se očekávají, když jsou uzly v obohaceném dokumentu nevyplněné. Připomeňme si, že indexování objektů blob umožňuje zahrnout nebo vyloučit typy souborů, pokud chcete pracovat s typy obsahu izolovaně. Tato nastavení můžete použít ke snížení šumu během spuštění indexeru.
Alternativní dotaz pro kontrolu výsledků může zahrnovat pole content a merged_content. Všimněte si, že tato pole obsahují obsah pro jakýkoli soubor objektu blob, i když nedošlo k žádnému zpracování obrázků.
Informace o výstupech dovedností
Výstupy dovedností zahrnují text (OCR), layoutText (OCR), merged_content, captions (analýza obrázků), (analýza obrázků): tags
textukládá výstup vygenerovaný OCR. Tento uzel by měl být mapován na pole typuCollection(Edm.String). Pro každý vyhledávací dokument existuje jednotextpole, které se skládá z řetězců oddělených čárkami pro dokumenty, které obsahují více obrázků. Následující obrázek znázorňuje výstup OCR pro tři dokumenty. První je dokument obsahující soubor bez obrázků. Druhý je dokument (soubor obrázku) obsahující jedno slovo, Microsoft. Třetí je dokument obsahující více obrázků, některé bez textu ("",)."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" ] } ]layoutTextukládá informace o umístění textu na stránce generované službou OCR, které jsou popsány z hlediska ohraničujících polí a souřadnic normalizovaného obrázku. Tento uzel by měl být mapován na pole typuCollection(Edm.String). Pro každý hledaný dokument existuje jednolayoutTextpole, které se skládá z řetězců oddělených čárkami.merged_contentuloží výstup dovednosti sloučení textu a mělo by to být jedno velké pole typuEdm.String, které obsahuje nezpracovaný text ze zdrojového dokumentu a vloženýtextmísto obrázku. Pokud jsou soubory pouze textové, pak OCR a analýza obrázků nemají co dělat amerged_contentje totožný scontent(vlastnost objektu blob, která obsahuje obsah objektu blob).imageCaptionzachycuje popis obrázku jako jednotlivé značky a delší textový popis.imageTagsukládá značky o obrázku jako kolekci klíčových slov, jednu kolekci pro všechny obrázky ve zdrojovém dokumentu.
Následující snímek obrazovky je obrázek PDF, který obsahuje text a vložené obrázky. Bylo zjištěno prolomení dokumentu, které odhalilo tři vložené obrázky: hejno racků, mapa, orel. Jiný text v příkladu (včetně názvů, nadpisů a základního textu) byl extrahován jako text a vyloučen ze zpracování obrázků.
Výstup analýzy obrázků je znázorněný v následujícím formátu JSON (výsledek hledání). Definice dovednosti umožňuje určit, které vizuální funkce jsou zajímavé. V tomto příkladu byly vytvořeny značky a popisy, ale existují další výstupy, ze které si můžete vybrat.
imageCaptionvýstup je pole popisů, jeden na obrázek, označený jedním slovemtagsa delšími frázemi popisujícími obrázek. Všimněte si, že značky obsahují hejno racků plovoucích ve vodě, nebo záběr zblízka na ptáka.imageTagsvýstup je pole jednoduchých značek, které jsou uvedeny v pořadí vytvoření. Všimněte si, že značky se opakují. Neexistuje žádná agregace ani seskupení.
"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"
. . .
Scénář: Vložené obrázky do souborů PDF
Když jsou obrázky, které chcete zpracovat, vložené do jiných souborů, jako je PDF nebo DOCX, kanál rozšiřování extrahuje jenom obrázky a pak je předá do OCR nebo analýzy obrázků ke zpracování. Extrakce obrázků probíhá během fáze analýzy dokumentu a jakmile jsou obrázky odděleny, zůstávají oddělené, pokud zpracovaný výstup výslovně nesloučíte zpět do zdrojového textu.
Sloučení textu se používá k vložení výstupu zpracování obrázků zpět do dokumentu. I když Text Merge není striktním požadavkem, často se používá, aby se výstup obrazu (text OCR, layoutText OCR, značky obrázků, titulky obrázků) mohl znovu zavést do dokumentu. V závislosti na dovednosti nahradí výstup obrázku vložený binární obrázek ekvivalentem místního textu. Výstup analýzy obrázků je možné sloučit v umístění obrázku. Výstup OCR se vždy zobrazí na konci každé stránky.
Následující pracovní postup popisuje proces extrakce, analýzy, slučování a jak rozšířit řetězec tak, aby zpracovaný výstup obrázků byl využit v dalších textově založených dovednostech, jako je rozpoznávání entit nebo překlad textu.
Po připojení ke zdroji dat indexer načte a zpracovává zdrojové dokumenty, extrahuje obrázky a text a zařadí každý typ obsahu do fronty ke zpracování. Vytvoří se obohacený dokument, který se skládá jenom z kořenového uzlu (dokumentu).
Obrázky ve frontě jsou normalizovány a předávají se do obohacených dokumentů jako uzel dokument/normalized_images.
Obohacení obrázků se provádí pomocí
"/document/normalized_images"jako vstupu.Výstupy obrázků se předávají do rozšířeného stromu dokumentů, přičemž každý výstup je samostatný uzel. Výstupy se liší podle dovedností (text a layoutText pro OCR, značky a titulky pro analýzu obrázků).
Volitelné, ale doporučené, pokud chcete, aby vyhledávací dokumenty obsahovaly text i text pocházející z obrázku dohromady, se spustí Slučování textu, které zkombinuje textovou reprezentaci obrazů s nezpracovaným textem extrahovaným ze souboru. Textové bloky se sloučí do jednoho velkého řetězce, kde se nejprve vloží text, a poté se přidají výstupy OCR nebo značky a titulky obrázků.
Výstup sloučení textu je nyní konečným textem, který se má analyzovat pro všechny podřízené dovednosti, které provádějí zpracování textu. Pokud například vaše sada dovedností zahrnuje OCR i Rozpoznávání entit, měl by být
"document/merged_text"vstup do rozpoznávání entit (targetName výstupu dovednosti sloučení textu).Po provedení všech funkcí je obohacený dokument dokončen. V posledním kroku indexery odkazují na mapování výstupních polí za účelem odesílání rozšířeného obsahu do jednotlivých polí v indexu vyhledávání.
Následující příklad sady dovedností vytvoří merged_text pole obsahující původní text dokumentu s vloženým textem OCRed místo vložených obrázků. Zahrnuje také dovednost Rozpoznávání entit, používající merged_text jako vstup.
Syntaxe textu požadavku
{
"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"
}
]
}
]
}
Teď, když máte merged_text pole, můžete ho mapovat jako prohledávatelné pole v definici indexeru. Veškerý obsah souborů, včetně textu obrázků, bude prohledávatelný.
Scénář: Vizualizace ohraničujících polí
Dalším běžným scénářem je vizualizace informací o rozložení výsledků hledání. Můžete třeba zvýraznit místo, kde se část textu na obrázku našla jako součást výsledků hledání.
Vzhledem k tomu, že se krok OCR provádí na normalizovaných obrázcích, souřadnice rozložení jsou v normalizovaném prostoru obrázku, ale pokud potřebujete zobrazit původní obrázek, převeďte souřadnicové body v rozložení na původní souřadnicový systém obrázku.
Vzor znázorňuje následující algoritmus:
/// <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;
}
Scénář: Vlastní funkce pro obrazy
Obrázky lze také předat a vrátit z vlastních dovedností. Sada dovedností base64 kóduje obrázek, který se předává do vlastní dovednosti. Pokud chcete použít obrázek ve vlastní dovednosti, nastavte "/document/normalized_images/*/data" jako vstup pro vlastní dovednost. V kódu vašich vlastních dovedností dekódujte řetězec z formátu base64 před převodem na obrázek. Pokud chcete vrátit obrázek do sady dovedností, zakódujte obrázek před vrácením do sady dovedností kódováním base64.
Obrázek se vrátí jako objekt s následujícími vlastnostmi.
{
"$type": "file",
"data": "base64String"
}
Úložiště Ukázky Azure Search pro Python obsahuje kompletní ukázku vlastní funkce implementované v Pythonu, která zpracovává obrázky.
Předávání obrázků vlastním funkcím
Ve scénářích, ve kterých potřebujete vlastní dovednost pro práci na obrázcích, můžete předat obrázky vlastní dovednosti a vrátit text nebo obrázky. Sada dovedností uvedená níže pochází z ukázkového příkladu.
Následující modul vezme normalizovaný obrázek (získaný během prolomení dokumentu) a výstupem jsou části obrázku.
Ukázkový soubor dovedností
{
"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": {}
}
]
}
Příklad vlastní dovednosti
Dovednost vytvořená na míru je oddělena od sady dovedností. V tomto případě je to kód Pythonu, který nejprve prochází dávkou záznamů požadavků ve vlastním formátu dovedností a pak převede řetězec kódovaný base64 na obrázek.
# 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
Podobně jako při vrácení obrázku vraťte řetězec kódovaný v base64 v objektu JSON s $type vlastností souboru.
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
}