Tutoriál: Azure Vision ve Foundry Tools

Azure Vision in Foundry Tools je nástroj Microsoft Foundry , který umožňuje zpracovávat obrázky a vracet informace na základě vizuálních funkcí. V tomto kurzu se naučíte používat Vision k analýze obrázků ve službě Azure Synapse Analytics.

Tento kurz ukazuje použití analýzy textu se službou SynapseML k:

  • Extrahování vizuálních funkcí z obsahu obrázku
  • Rozpoznávání znaků z obrázků (OCR)
  • Analýza obsahu obrázku a vygenerování miniatury
  • Detekce a identifikace obsahu specifického pro doménu na obrázku
  • Generování značek souvisejících s obrázkem
  • Vygenerování popisu celého obrázku v jazyce čitelným pro člověka

Analyzovat obrázek

Extrahuje bohatou sadu vizuálních funkcí na základě obsahu obrázku, jako jsou objekty, tváře, obsah pro dospělé a automaticky generované popisy textu.

Příklad vstupu

Fotografie psa.

# Create a dataframe with the image URLs
df = spark.createDataFrame([
        ("<replace with your file path>/dog.jpg", )
    ], ["image", ])

# Run the Vision service. Analyze Image extracts information from/about the images.
analysis = (AnalyzeImage()
    .setLinkedService(ai_service_name)
    .setVisualFeatures(["Categories","Color","Description","Faces","Objects","Tags"])
    .setOutputCol("analysis_results")
    .setImageUrlCol("image")
    .setErrorCol("error"))

# Show the results of what you wanted to pull out of the images.
display(analysis.transform(df).select("image", "analysis_results.description.tags"))

Očekávané výsledky

["dog","outdoor","fence","wooden","small","brown","building","sitting","front","bench","standing","table","walking","board","beach","holding","bridge"]

Optické rozpoznávání znaků (OCR)

Extrahujte tištěný text, rukou psaný text, číslice a symboly měny z fotografií, například pouličních cedulí a produktů, a také z dokumentů, jako jsou faktury, účty, finanční zprávy, články a další. Je optimalizovaná pro extrakci textu z textově náročných obrázků a dokumentů PDF s více stránkami se smíšenými jazyky. Podporuje rozpoznávání tištěného i rukou psaného textu ve stejném obrázku nebo dokumentu.

Příklad vstupu

Fotografie znaménka s textem na něm

df = spark.createDataFrame([
        ("<replace with your file path>/ocr.jpg", )
    ], ["url", ])

ri = (ReadImage()
    .setLinkedService(ai_service_name)
    .setImageUrlCol("url")
    .setOutputCol("ocr"))

display(ri.transform(df))

Očekávané výsledky

Snímek obrazovky s očekávanými výsledky z ukázkové analýzy OCR

Generovat miniatury

Analyzuje obsah obrázku a vytvoří pro obrázek odpovídající miniaturu. Služba Vision nejprve vygeneruje vysoce kvalitní miniaturu a pak analyzuje objekty v obrázku, aby určila oblast zájmu. Vision pak ořezá obrázek tak, aby odpovídal požadavkům oblasti zájmu. Vytvořená miniatura může mít podle vašich potřeb jiný poměr stran než původní obrázek.

Příklad vstupu

Fotografie tváře Satya Nadella.

df = spark.createDataFrame([
        ("<replace with your file path>/satya.jpeg", )
    ], ["url", ])

gt =  (GenerateThumbnails()
    .setLinkedService(ai_service_name)
    .setHeight(50)
    .setWidth(50)
    .setSmartCropping(True)
    .setImageUrlCol("url")
    .setOutputCol("thumbnails"))

thumbnails = gt.transform(df).select("thumbnails").toJSON().first()

import json
img = json.loads(thumbnails)["thumbnails"]

displayHTML("<img src='data:image/jpeg;base64," + img + "'>")

Očekávané výsledky

Miniaturní obrázek Satyi Nadelly.

Tagovat obrázek

Vygeneruje seznam slov nebo značek, které jsou relevantní pro obsah zadaného obrázku. Značky jsou vráceny na základě tisíců rozpoznatelných objektů, živých bytostí, scenérií nebo akcí nalezených na obrázcích. Značky mohou obsahovat rady, aby se zabránilo nejednoznačnosti nebo poskytnout kontext, například značka "ascomycete" může být doprovázena nápovědou "houba".

Jako příklad můžeme pokračovat v používání obrázku Satya.

df = spark.createDataFrame([
        ("<replace with your file path>/satya.jpeg", )
    ], ["url", ])

ti = (TagImage()
    .setLinkedService(ai_service_name)
    .setImageUrlCol("url")
    .setOutputCol("tags"))

display(ti.transform(df))

Očekávaný výsledek

Snímek obrazovky s očekávaným výstupem značek vygenerovaných z obrázku Satya Nadella

Popsat obrázek

Vygeneruje popis celého obrázku v celých větách v čitelném jazyce. Algoritmy služby Vision generují různé popisy na základě objektů identifikovaných na obrázku. Jednotlivé popisy se vyhodnotí a vygeneruje se pro ně skóre spolehlivosti. Pak se vrátí seznam seřazený od nejvyššího skóre spolehlivosti po nejnižší.

Jako příklad můžeme pokračovat v používání obrázku Satya.

df = spark.createDataFrame([
        ("<replace with your file path>/satya.jpeg", )
    ], ["url", ])

di = (DescribeImage()
    .setLinkedService(ai_service_name)
    .setMaxCandidates(3)
    .setImageUrlCol("url")
    .setOutputCol("descriptions"))

display(di.transform(df))

Očekávaný výsledek

Snímek obrazovky očekávaného výstupu popisu obrázku Satyi Nadelly

Rozpoznávání obsahu specifického pro doménu

S využitím doménových modelů rozpoznává a identifikuje obsah obrázku specifický pro doménu, například celebrity a památky. Pokud například obrázek obsahuje lidi, může Vision použít doménový model pro celebrity k určení, jestli jsou lidé rozpoznaní na obrázku známé celebrity.

Jako příklad můžeme pokračovat v používání obrázku Satya.


df = spark.createDataFrame([
        ("<replace with your file path>/satya.jpeg", )
    ], ["url", ])

celeb =  (RecognizeDomainSpecificContent()
    .setLinkedService(ai_service_name)
    .setModel("celebrities")
    .setImageUrlCol("url")
    .setOutputCol("celebs"))

display(celeb.transform(df))

Očekávaný výsledek

Snímek obrazovky s očekávaným výstupem z analýzy obsahu domény obrázku Leonarda DiCapria

Vyčištění prostředků

Pokud chcete zajistit, aby se instance Sparku vypnula, ukončete všechny připojené relace (poznámkové bloky). Pool se vypne, když je dosažena zadaná doba nečinnosti ve fondu Apache Spark. Také můžete vybrat zastavit relaci ze stavového řádku v pravém horním rohu poznámkového bloku.

Snímek obrazovky s tlačítkem Zastavit relaci na stavovém řádku

Další kroky