Tutorial: Azure Vision nas Ferramentas Foundry

O Azure Vision no Foundry Tools é uma ferramenta Microsoft Foundry que lhe permite processar imagens e devolver informações com base nas características visuais. Neste tutorial, vais aprender a usar o Vision para analisar imagens no Azure Synapse Analytics.

Este tutorial demonstra o uso da análise de texto com SynapseML para:

  • Extrair recursos visuais do conteúdo da imagem
  • Reconhecer caracteres de imagens (OCR)
  • Analise o conteúdo da imagem e gere miniaturas
  • Detetar e identificar conteúdo específico do domínio em uma imagem
  • Gerar tags relacionadas a uma imagem
  • Gerar uma descrição de uma imagem inteira em linguagem legível por humanos

Analisar imagem

Extrai um rico conjunto de recursos visuais com base no conteúdo da imagem, como objetos, rostos, conteúdo adulto e descrições de texto geradas automaticamente.

Exemplo de entrada

Fotografia de um cão.

# 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"))

Resultados esperados

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

Reconhecimento ótico de carateres (OCR)

Extraia texto impresso, texto manuscrito, dígitos e símbolos de moeda de imagens, como fotos de placas de rua e produtos, bem como de documentos — faturas, contas, relatórios financeiros, artigos e muito mais. É otimizado para extrair texto de imagens com grande quantidade de texto e documentos PDF de múltiplas páginas com línguas mistas. Ele suporta a deteção de texto impresso e manuscrito na mesma imagem ou documento.

Exemplo de entrada

Fotografia de um sinal com texto.

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))

Resultados esperados

Captura de tela dos resultados esperados da análise OCR de exemplo.

Gerar miniaturas

Analise o conteúdo de uma imagem para gerar uma miniatura adequada dessa imagem. O serviço Visão primeiro gera uma miniatura de alta qualidade e, em seguida, analisa os objetos dentro da imagem para determinar a área de interesse. Em seguida, o sistema recorta a imagem para se adequar aos requisitos da área de interesse. A miniatura gerada pode ser apresentada com uma proporção diferente da proporção da imagem original, consoante as suas necessidades.

Exemplo de entrada

Fotografia do rosto de 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 + "'>")

Resultados esperados

Imagem em miniatura de Satya Nadella.

Etiquetar imagem

Gera uma lista de palavras, ou tags, que são relevantes para o conteúdo da imagem fornecida. As tags são retornadas com base em milhares de objetos reconhecíveis, seres vivos, cenários ou ações encontradas em imagens. As tags podem conter dicas para evitar ambiguidade ou fornecer contexto, por exemplo, a tag "ascomicete" pode ser acompanhada pela dica "fungo".

Vamos continuar usando a imagem de Satya como exemplo.

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))

Resultado esperado

Captura de tela da saída esperada das tags geradas a partir da imagem de Satya Nadella.

Descrever imagem

Gere uma descrição de uma imagem inteira numa linguagem legível por humanos, com frases completas. Os algoritmos do serviço Visão geram várias descrições com base nos objetos identificados na imagem. Cada uma das descrições é avaliada e é gerada uma pontuação de confiança. Em seguida, é devolvida uma lista ordenada da pontuação de confiança mais alta para a mais baixa.

Vamos continuar usando a imagem de Satya como exemplo.

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))

Resultado esperado

Screenshot do resultado esperado da descrição da imagem de Satya Nadella.

Reconhecer conteúdo específico do domínio

Utilize modelos de domínio para detetar e identificar conteúdo específico de um domínio numa imagem, como celebridades e marcos de referência. Por exemplo, se uma imagem contiver pessoas, a Visão pode usar um modelo de domínio para celebridades para determinar se as pessoas detetadas na imagem são celebridades conhecidas.

Vamos continuar usando a imagem de Satya como exemplo.


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))

Resultado esperado

Captura de tela da saída esperada da análise de conteúdo de domínio da imagem de Leonardo DiCaprio.

Limpar recursos

Para garantir que a instância do Spark seja desligada, encerre todas as sessões conectadas (blocos de anotações). O pool é desligado quando o tempo de inatividade especificado no pool do Apache Spark é atingido. Também pode selecionar Parar sessão na barra de estado no canto superior direito do bloco de notas.

Captura de ecrã a mostrar o botão Parar sessão na barra de estado.

Próximos passos