Szöveg és információ kinyerése képekből AI-bővítéssel
Az AI-bővítés révén az Azure AI Search számos lehetőséget kínál a kereshető szövegek képekből való létrehozására és kinyerására, többek között a következőkre:
- OCR a szöveg és számjegyek optikai karakterfelismeréséhez
- Képelemzés , amely vizuális funkciókon keresztül írja le a képeket
- Egyéni képességek bármely külső képfeldolgozás meghívásához, amelyet meg szeretne adni
Az OCR használatával olyan fényképekből vagy képekből nyerhet ki szöveget, amelyek alfanumerikus szöveget tartalmaznak, például a STOP szót egy stop jelben. A képelemzéssel létrehozhat egy kép szöveges ábrázolását, például pitypangot a pitypang fényképéhez, vagy a sárga színt. A kép metaadatait is kinyerheti, például a méretét.
Ez a cikk a képek használatának alapjait ismerteti, és számos gyakori forgatókönyvet is ismertet, például beágyazott képekkel való munkát, egyéni képességeket és az eredeti képek vizualizációinak felülírását.
A képtartalmak készségkészletben való használatához a következőkre van szükség:
- Képeket tartalmazó forrásfájlok
- Képműveletekhez konfigurált keresési indexelő
- Beépített vagy egyéni képességekkel rendelkező készségkészlet, amely OCR-t vagy képelemzést hív meg
- Keresési index mezőkkel az elemzett szöveg kimenetének fogadásához, valamint a kimeneti mezőleképezések az indexelőben, amely társításokat hoz létre
Igény szerint előrejelzéseket is meghatározhat, hogy képelemzéssel rendelkező kimenetet fogadjon el egy tudástárban adatbányászati forgatókönyvek esetén.
Forrásfájlok beállítása
A képfeldolgozás indexelőalapú, ami azt jelenti, hogy a nyers bemeneteknek támogatott adatforrásban kell lenniük.
- A képelemzés támogatja a JPEG, a PNG, a GIF és a BMP használatát
- Az OCR támogatja a JPEG, a PNG, a BMP és a TIF használatát
A képek különálló bináris fájlok, vagy dokumentumokba, például PDF-, RTF- vagy Microsoft-alkalmazásfájlokba vannak beágyazva. Egy adott dokumentumból legfeljebb 1000 kép nyerhető ki. Ha egy dokumentumban több mint 1000 kép található, az első 1000 ki lesz nyerve, majd figyelmeztetés jön létre.
Az Azure Blob Storage a képfeldolgozáshoz leggyakrabban használt tároló az Azure AI Searchben. A blobtárolóból származó képek lekéréséhez három fő feladat kapcsolódik:
Engedélyezze a tárolóban lévő tartalomhoz való hozzáférést. Ha olyan teljes hozzáférésű kapcsolati sztring használ, amely tartalmaz egy kulcsot, a kulcs engedélyt ad a tartalomra. Másik lehetőségként hitelesíthet a Microsoft Entra-azonosítóval , vagy megbízható szolgáltatásként csatlakozhat.
Hozzon létre egy azureblob típusú adatforrást, amely a fájlokat tároló blobtárolóhoz csatlakozik.
Tekintse át a szolgáltatási szint korlátait , és győződjön meg arról, hogy a forrásadatok az indexelők és a bővítés maximális méret- és mennyiségi korlátai alatt vannak.
Indexelők konfigurálása képfeldolgozáshoz
A forrásfájlok beállítása után engedélyezze a kép normalizálását a imageAction
paraméter indexelőkonfigurációjában való beállításával. A kép normalizálása segít egységesebbé tenni a képeket az alsóbb rétegbeli feldolgozáshoz. A kép normalizálása a következő műveleteket foglalja magában:
- A nagyméretű képek mérete a maximális magasságra és szélességre van átméretezve, hogy egységesek legyenek.
- A tájolást meghatározó metaadatokkal rendelkező képek esetében a kép elforgatása a függőleges betöltéshez van igazítva.
A metaadatok módosításait az egyes képekhez létrehozott összetett típus rögzíti. A kép normalizálási követelményét nem lehet kikapcsolni. A képeket iteráló készségek, például az OCR és a képelemzés normalizált képeket várnak.
Hozzon létre vagy frissítsen egy indexelőt a konfigurációs tulajdonságok beállításához:
{ "parameters": { "configuration": { "dataToExtract": "contentAndMetadata", "parsingMode": "default", "imageAction": "generateNormalizedImages" } } }
Állítsa be a (kötelező) értéket
dataToExtract
contentAndMetadata
.Ellenőrizze, hogy az
parsingMode
alapértelmezett érték van-e beállítva (kötelező).Ez a paraméter határozza meg az indexben létrehozott keresési dokumentumok részletességét. Az alapértelmezett mód egy-az-egyhez levelezést állít be, így egy blob egyetlen keresési dokumentumot eredményez. Ha a dokumentumok nagyok, vagy ha a készségek kisebb szövegrészeket igényelnek, hozzáadhatja azt a Szövegfelosztási képességet, amely feldolgozás céljából feloszt egy dokumentumot lapozásra. Keresési forgatókönyvek esetén azonban dokumentumonként egy blobra van szükség, ha a bővítés képfeldolgozást is tartalmaz.
Állítsa be
imageAction
úgy, hogy engedélyezze anormalized_images
csomópontot egy bővítőfán (kötelező):generateNormalizedImages
normalizált képek tömbjének létrehozása a dokumentumrepedés részeként.generateNormalizedImagePerPage
(csak PDF esetén) normalizált képek tömbjének létrehozásához, ahol a PDF minden oldala egyetlen kimeneti képre jelenik meg. Nem PDF-fájlok esetén a paraméter viselkedése hasonló, mintha beállítottagenerateNormalizedImages
volna. A beállítás azonbangenerateNormalizedImagePerPage
a tervezés (különösen a nagyméretű dokumentumok esetében) kevésbé teljesíthetővé teheti az indexelési műveletet, mivel több lemezképet kell létrehozni.
Igény szerint állítsa be a létrehozott normalizált képek szélességét vagy magasságát:
normalizedImageMaxWidth
képpontban. Az alapértelmezett érték 2000. A maximális érték 10 000.normalizedImageMaxHeight
képpontban. Az alapértelmezett érték 2000. A maximális érték 10 000.
A normalizált képek maximális szélessége és magassága 2000 képpont alapértelmezett értéke az OCR-képesség és a képelemzési képesség által támogatott maximális méreteken alapul. Az OCR-képesség legfeljebb 4200 szélességet és magasságot támogat a nem angol nyelvű nyelvek esetében, és 10 000 angol nyelvet. Ha növeli a maximális korlátokat, a feldolgozás a készségek definíciójától és a dokumentumok nyelvétől függően nagyobb képeken is meghiúsulhat.
Ha a számítási feladat egy adott fájltípust céloz meg, adja meg a fájltípus feltételeit . A blobindexelő konfigurációja fájlbefoglalási és kizárási beállításokat tartalmaz. Szűrheti a nem kívánt fájlokat.
{ "parameters" : { "configuration" : { "indexedFileNameExtensions" : ".pdf, .docx", "excludedFileNameExtensions" : ".png, .jpeg" } } }
Tudnivalók a normalizált képekről
Ha imageAction
a beállítás értéke nem egy, akkor az új normalized_images
mező képtömböt tartalmaz. Minden kép egy összetett típus, amelynek tagjai a következők:
Képtag | Leírás |
---|---|
adatok | A normalizált kép BASE64 kódolású sztringje JPEG formátumban. |
width (szélesség) | A normalizált kép szélessége képpontban. |
height (magasság) | A normalizált kép magassága képpontban. |
originalWidth | A kép eredeti szélessége a normalizálás előtt. |
originalHeight | A kép eredeti magassága normalizálás előtt. |
rotációFromOriginal | Az óramutató járásával ellentétes irányban forgott a normalizált kép létrehozásához használt fok. 0 és 360 fok közötti érték. Ez a lépés beolvassa a kamerával vagy képolvasóval létrehozott kép metaadatait. Általában 90 fok többszöröse. |
contentOffset | A tartalommezőben lévő karaktereltolás, amelyből a rendszerképet kinyerték. Ez a mező csak beágyazott képeket tartalmazó fájlokra vonatkozik. A contentOffset PDF-dokumentumokból kinyert képek mindig a dokumentumból kinyert oldalon lévő szöveg végén jelennek meg. Ez azt jelenti, hogy a képek a lapon lévő összes szöveg után jelennek meg, függetlenül a kép eredeti helyétől. |
pageNumber | Ha a képet PDF-fájlból nyerték ki vagy renderelték, ez a mező az oldalszámot tartalmazza a PDF-ben, amelyből kinyerték vagy renderelték, 1-től kezdve. Ha a kép nem PDF-fájlból származik, akkor ez a mező 0. |
Mintaérték:normalized_images
[
{
"data": "BASE64 ENCODED STRING OF A JPEG IMAGE",
"width": 500,
"height": 300,
"originalWidth": 5000,
"originalHeight": 3000,
"rotationFromOriginal": 90,
"contentOffset": 500,
"pageNumber": 2
}
]
Képességkészletek definiálása képfeldolgozáshoz
Ez a szakasz kiegészíti a képességekkel kapcsolatos referenciacikkeket azáltal, hogy kontextust biztosít a képességbemenetek, kimenetek és minták kezeléséhez a képfeldolgozáshoz kapcsolódóan.
Készségek hozzáadásához hozzon létre vagy frissítsen egy készségkészletet .
Sablonokat adhat hozzá az OCR-hez és a képelemzéshez a portálról, vagy másolja a definíciókat a szakértelem-referenciadokumentációból . Szúrja be őket a készségkészlet definíciójának készségtömbjébe.
Szükség esetén adjon meg egy többszolgáltatásos kulcsot a képességkészlet Azure AI-szolgáltatások tulajdonságában. Az Azure AI Search meghív egy számlázható Azure AI-szolgáltatási erőforrást az OCR-hez, és képelemzést végez az ingyenes korlátot meghaladó tranzakciókhoz (indexelőnként naponta 20). Az Azure AI-szolgáltatásoknak ugyanabban a régióban kell lenniük, mint a keresési szolgáltatásnak.
Ha az eredeti képek PDF- vagy alkalmazásfájlokba, például PPTX-be vagy DOCX-be vannak ágyazva, akkor hozzá kell adnia egy szövegegyesítési képességet, ha a képkimenetet és a szövegkimenetet együtt szeretné megjeleníteni. A beágyazott rendszerképek használatának további ismertetését ebben a cikkben találjuk.
Miután létrehozta a készségkészlet alapszintű keretrendszerét, és konfigurálta az Azure AI-szolgáltatásokat, az egyes képi képességekre összpontosíthat, meghatározhatja a bemeneteket és a forráskörnyezetet, valamint leképezheti a kimeneteket egy index vagy tudástár mezőire.
Feljegyzés
A képfeldolgozást az alsóbb rétegbeli természetes nyelvi feldolgozással kombináló képességkészletért lásd a REST-oktatóanyagot: A REST és az AI használata kereshető tartalmak azure-blobokból való létrehozásához. Bemutatja, hogyan adagolhatja a készségkép-kimenetet az entitásfelismerésbe és a kulcskifejezések kinyeréséhez.
Bemenetek képfeldolgozáshoz
Mint említettük, a rendszer a dokumentum repedése során kinyeri a képeket, majd az előzetes lépésként normalizálja. A normalizált képek minden képfeldolgozási képesség bemenetei, és mindig egy bővített dokumentumfában jelennek meg két módon:
/document/normalized_images/*
olyan dokumentumokhoz készült, amelyek egészben vannak feldolgozva./document/normalized_images/*/pages
adattömbökben (lapokban) feldolgozott dokumentumokhoz készült.
Függetlenül attól, hogy az OCR-t és a képelemzést azonos módon használja-e, a bemenetek felépítése gyakorlatilag megegyezik:
{
"@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": [ ]
}
Kimenetek leképezése keresési mezőkre
A képességkészletekben a képelemzés és az OCR-képességkimenet mindig szöveg. A kimeneti szöveg csomópontként jelenik meg egy belső bővített dokumentumfában, és minden csomópontot le kell képezni egy keresési index mezőire vagy egy tudástárban lévő előrejelzésekre, hogy a tartalom elérhetővé legyen az alkalmazásban.
A készségkészletben tekintse át az
outputs
egyes képességek szakaszát annak megállapításához, hogy mely csomópontok találhatók a bővített dokumentumban:{ "@odata.type": "#Microsoft.Skills.Vision.OcrSkill", "context": "/document/normalized_images/*", "detectOrientation": true, "inputs": [ ], "outputs": [ { "name": "text", "targetName": "text" }, { "name": "layoutText", "targetName": "layoutText" } ] }
Hozzon létre vagy frissítsen egy keresési indexet , hogy mezőket adjon hozzá a képességkimenetek elfogadásához.
A következő mezőgyűjteményi példában a tartalom blobtartalom. Metadata_storage_name tartalmazza a fájl nevét (igaz értékre van állítva
retrievable
). Metadata_storage_path a blob egyedi elérési útja, és az alapértelmezett dokumentumkulcs. Merged_content a szövegegyesítés kimenete (képek beágyazásakor hasznos).A szöveg és az elrendezésszöveg OCR-képességkimenet, és sztringgyűjteménynek kell lennie ahhoz, hogy a teljes dokumentum teljes OCR által generált kimenetét rögzíthesse.
"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 } ],
Frissítse az indexelőt a képességkészlet kimenetének (bővítési fában lévő csomópontok) indexmezőkre való leképezéséhez.
A bővített dokumentumok belsőek. Ha egy bővített dokumentumfában szeretné külsőleg létrehozni a csomópontokat, állítson be egy kimeneti mezőleképezést, amely meghatározza, hogy melyik indexmező fogadja a csomópont tartalmát. A bővített adatokat az alkalmazás egy indexmezőn keresztül éri el. Az alábbi példa egy szövegcsomópontot (OCR-kimenetet) mutat be egy bővített dokumentumban, amely egy keresési index szövegmezőjére van leképezve.
"outputFieldMappings": [ { "sourceFieldName": "/document/normalized_images/*/text", "targetFieldName": "text" }, { "sourceFieldName": "/document/normalized_images/*/layoutText", "targetFieldName": "layoutText" } ]
Futtassa az indexelőt a forrásdokumentum lekérésének, a képfeldolgozásnak és az indexelésnek a meghívásához.
Eredmények ellenőrzése
A képfeldolgozás eredményeinek ellenőrzéséhez futtasson egy lekérdezést az indexen. Keresési ügyfélként vagy HTTP-kéréseket küldő eszközként használja a Search Explorert . Az alábbi lekérdezés a képfeldolgozás kimenetét tartalmazó mezőket választja ki.
POST /indexes/[index name]/docs/search?api-version=[api-version]
{
"search": "*",
"select": "metadata_storage_name, text, layoutText, imageCaption, imageTags"
}
Az OCR felismeri a képfájlokban lévő szöveget. Ez azt jelenti, hogy az OCR-mezők (szöveg és elrendezésszöveg) üresek, ha a forrásdokumentumok tiszta szöveg vagy tiszta képek. Hasonlóképpen, a képelemzési mezők (imageCaption és imageTags) üresek, ha a forrásdokumentum bemenetei szigorúan szövegesek. Az indexelő végrehajtása figyelmeztetéseket ad ki, ha a képalkotó bemenetek üresek. Ilyen figyelmeztetések várhatók, ha a csomópontok nem lesznek feltöltve a bővített dokumentumban. Ne feledje, hogy a blobindexelés lehetővé teszi a fájltípusok hozzáadását vagy kizárását, ha külön szeretné használni a tartalomtípusokat. Ezekkel a beállításokkal csökkentheti a zajt az indexelő futtatása során.
Az eredmények ellenőrzésére szolgáló másik lekérdezés lehet a tartalom és a merged_content mező. Figyelje meg, hogy ezek a mezők bármilyen blobfájl tartalmát tartalmazzák, még azokat is, ahol nem végeztek képfeldolgozást.
A képességkimenetek ismertetése
A képességkimenetek közé tartozik az text
(OCR), layoutText
(OCR), merged_content
, captions
(képelemzés), tags
(képelemzés):
text
az OCR által létrehozott kimenetet tárolja. Ezt a csomópontot típusmezőreCollection(Edm.String)
kell leképezni. Keresési dokumentumonként egytext
mező található, amely több képet tartalmazó dokumentumok vesszővel tagolt sztringjeiből áll. Az alábbi ábrán három dokumentum OCR-kimenete látható. Az első egy kép nélküli fájlt tartalmazó dokumentum. A második egy dokumentum (képfájl), amely egy szót, a Microsoftot tartalmazza. A harmadik egy dokumentum, amely több képet tartalmaz, némelyik szöveg nélkül ("",
)."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": "Azure AI services and Content Intelligence.pptx", "text": [ "", "Microsoft", "", "", "", "Azure AI Search and Augmentation Combining Microsoft Azure AI services and Azure Search" ] } ]
layoutText
az OCR által generált információkat tárolja a szöveg helyéről az oldalon, a normalizált kép határolókeretei és koordinátái alapján. Ezt a csomópontot típusmezőreCollection(Edm.String)
kell leképezni. A keresési dokumentumban egylayoutText
mező található, amely vesszővel tagolt sztringekből áll.merged_content
Egy Szövegegyesítési képesség kimenetét tárolja, és egy nagy típusúEdm.String
mezőnek kell lennie, amely nyers szöveget tartalmaz a forrásdokumentumból egy kép helyett beágyazvatext
. Ha a fájlok csak szövegesek, akkor az OCR-nek és a képelemzésnek nincs teendője, ésmerged_content
ugyanaz, mintcontent
(a blob tartalmát tartalmazó blobtulajdonság).imageCaption
A kép leírását egyéni címkékként és hosszabb szöveges leírásként rögzíti.imageTags
A képek címkéi kulcsszavak gyűjteményeként vannak tárolva, a forrásdokumentumban lévő összes képhez egy gyűjtemény.
Az alábbi képernyőkép egy szövegeket és beágyazott képeket tartalmazó PDF-ábrát ábrázol. A dokumentum repedése három beágyazott képet észlelt: sirályok nyája, térkép, sas. A példában szereplő többi szöveg (beleértve a címeket, címsorokat és szövegtörzseket) szövegként lett kinyerve, és ki lett zárva a képfeldolgozásból.
A képelemzés kimenetét a következő JSON (keresési eredmény) szemlélteti. A képességdefinícióval megadhatja, hogy mely vizualizációs funkciók érdeklik. Ebben a példában címkék és leírások készültek, de több kimenet közül lehet választani.
imageCaption
a kimenet a leírások tömbje, képenként egy,tags
amely egyetlen szóból és a képet leíró hosszabb kifejezésekből áll. Figyelje meg, hogy a sirályok állományából álló címkék a vízben úsznak, vagy egy madár közelről.imageTags
a kimenet egy önálló címkékből álló tömb, amely a létrehozás sorrendjében szerepel. Figyelje meg, hogy a címkék ismétlődnek. Nincs összesítés vagy csoportosítás.
"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"
. . .
Forgatókönyv: Beágyazott képek PDF-fájlokban
Ha a feldolgozni kívánt képek más fájlokba (például PDF-be vagy DOCX-be) vannak ágyazva, a bővítési folyamat csak a képeket nyeri ki, majd átadja őket az OCR-nek vagy a képelemzésnek feldolgozás céljából. A kép kinyerése a dokumentum repedési fázisában történik, és a képek elválasztása után külön maradnak, kivéve, ha a feldolgozott kimenetet explicit módon egyesíti a forrásszövegben.
A Szövegegyesítés funkcióval a képfeldolgozási kimenet vissza lesz helyezve a dokumentumba. Bár a szövegegyesítés nem nehéz követelmény, a rendszer gyakran meghívja, hogy a képkimenet (OCR-szöveg, OCR-elrendezésszöveg, képcímkék, képfeliratok) újra be lehessen illeszteni a dokumentumba. A képességtől függően a képkimenet egy beágyazott bináris kép helyett egy helyben lévő szöveges megfelelőt ad vissza. A képelemzés kimenete egyesíthető a kép helyén. Az OCR-kimenet mindig az egyes lapok végén jelenik meg.
Az alábbi munkafolyamat ismerteti a kép kinyerésének, elemzésének, egyesítésének folyamatát, valamint azt, hogy a folyamat hogyan terjeszthető ki a képfelbontással feldolgozott kimenet más szövegalapú készségekre, például az entitásfelismerésre vagy a szövegfordításra.
Az adatforráshoz való csatlakozás után az indexelő betölti és feltöri a forrásdokumentumokat, kinyeri a képeket és a szöveget, és sorban áll minden egyes tartalomtípus feldolgozásra. Létrejön egy bővített dokumentum, amely csak gyökércsomópontból (dokumentumból) áll.
A rendszer normalizálja a várólistán lévő képeket, és dokumentum/normalized_images csomópontként továbbítja a bővített dokumentumoknak.
A képdúsítások bemenetként futnak
"/document/normalized_images"
.A rendszer képkimeneteket ad át a bővített dokumentumfának, és mindegyik kimenet külön csomópontként jelenik meg. A kimenetek szakértelem szerint változnak (szöveg és elrendezésSzöveg az OCR-hez; címkék és képaláírások a képelemzéshez).
Nem kötelező, de ajánlott, ha azt szeretné, hogy a keresési dokumentumok a szöveg és a kép forrásszövegét együtt tartalmazzák, a Szövegegyesítés fut, és egyesíti a képek szöveges ábrázolását a fájlból kinyert nyers szöveggel. A szöveges adattömbök egyetlen nagy sztringbe vannak összesítve, ahol a szöveg először a sztringbe, majd az OCR szövegkimenetébe vagy képcímkéibe és felirataiba lesz beszúrva.
A Szövegegyesítés kimenete mostantól a végleges szöveg, amely elemezni tudja a szövegfeldolgozást végző alsóbb rétegbeli képességeket. Ha például a képességkészlet ocR-t és entitásfelismerést is tartalmaz, az entitásfelismerés bemenetének (a Szövegegyesítési képesség kimenetének célneve) kell lennie
"document/merged_text"
.Az összes készség végrehajtása után a bővített dokumentum befejeződött. Az utolsó lépésben az indexelők kimeneti mezőleképezésekre hivatkoznak, hogy gazdagított tartalmat küldjenek a keresési index egyes mezőinek.
Az alábbi példaismereti csoport létrehoz egy merged_text
mezőt, amely a dokumentum eredeti szövegét tartalmazza beágyazott OCRed szöveggel beágyazott képek helyett. Tartalmaz egy entitásfelismerési képességet is, amely bemenetként használ merged_text
.
Kérelem törzsszintaxisa
{
"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"
}
]
}
]
}
Most, hogy rendelkezik egy merged_text
mezővel, leképezheti az indexelő definíciójában kereshető mezőként. A fájlok összes tartalma, beleértve a képek szövegét is, kereshető lesz.
Forgatókönyv: Határolókeretek vizualizációja
Egy másik gyakori forgatókönyv a keresési eredmények elrendezési adatainak megjelenítése. Kiemelheti például, hogy hol található szöveg egy képen a keresési eredmények részeként.
Mivel az OCR-lépés a normalizált képeken történik, az elrendezési koordináták a normalizált képtérben vannak, de ha meg kell jelenítenie az eredeti képet, konvertálja az elrendezés koordinátapontjait az eredeti képkoordináta-rendszerbe.
A következő algoritmus a mintát szemlélteti:
/// <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;
}
Forgatókönyv: Egyéni képismeretek
A képeket egyéni képességekből is átadhatja és visszaadhatja. A base64 képességkészlet az egyéni képességnek átadott képet kódolja. Ha az egyéni képességen belül szeretné használni a képet, állítsa be "/document/normalized_images/*/data"
az egyéni képesség bemeneteként. Az egyéni képességkódon belül a base64 dekódolja a sztringet, mielőtt képpé konvertálja. Ha vissza szeretne adni egy képet a képességkészletnek, a base64-kódolással kódolhatja a képet, mielőtt visszaküldené azt a készségkészletnek.
A rendszer az alábbi tulajdonságokkal rendelkező objektumként adja vissza a képet.
{
"$type": "file",
"data": "base64String"
}
Az Azure Search Python-minták adattára teljes mintával rendelkezik a Pythonban egy olyan egyéni képességből, amely gazdagítja a képeket.
Képek átadása egyéni képességeknek
Azokban az esetekben, amikor egyéni képesség szükséges a képeken való munkához, átadhat képeket az egyéni képességnek, és visszaadhatja a szöveget vagy képeket. A következő képességkészlet egy mintából származik.
Az alábbi képességkészlet a normalizált rendszerképet (a dokumentum repedése során nyert) és a kép szeleteit adja ki.
Mintakészség-halmaz
{
"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élda egyéni képességre
Maga az egyéni képesség kívül esik a képességkészleten. Ebben az esetben a Python-kód az, amely először a kérelemrekordok kötegét az egyéni képességformátumban ciklusozza át, majd a base64 kódolású sztringet képpé alakítja.
# 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
A kép visszaadásához hasonlóan egy base64 kódolású sztringet ad vissza egy JSON-objektumon belül egy $type
fájltulajdonságú tulajdonsággal.
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
}