Partilhar via


Azure Cognitive Services Imagem Digitalizada SDK para Python

O serviço Imagem Digitalizada fornece aos programadores acesso a algoritmos avançados para processamento de imagens e devolução de informações. Imagem Digitalizada algoritmos analisam o conteúdo de uma imagem de diferentes maneiras, dependendo das funcionalidades visuais que lhe interessam.

Pode utilizar Imagem Digitalizada na sua aplicação para:

  • Analisar imagens para obter informações
  • Extrair texto de imagens
  • Gerar miniaturas

À procura de mais documentação?

Pré-requisitos

Se precisar de uma conta API Imagem Digitalizada, pode criar uma com este comando Azure CLI:

RES_REGION=westeurope
RES_GROUP=<resourcegroup-name>
ACCT_NAME=<computervision-account-name>

az cognitiveservices account create \
    --resource-group $RES_GROUP \
    --name $ACCT_NAME \
    --location $RES_REGION \
    --kind ComputerVision \
    --sku S1 \
    --yes

Instalação

Instale os Serviços Cognitivos Azure Imagem Digitalizada SDK com pip, opcionalmente dentro de um ambiente virtual.

Configure um ambiente virtual (opcional)

Embora não seja necessário, pode manter o seu sistema base e ambientes Azure SDK isolados uns dos outros se utilizar um ambiente virtual. Execute os seguintes comandos para configurar e, em seguida, entrar num ambiente virtual com venv, tais como cogsrv-vision-env:

python3 -m venv cogsrv-vision-env
source cogsrv-vision-env/bin/activate

Instalar o SDK

Instale o pacote Azure Cognitive Services Imagem Digitalizada SDK para Python compip:

pip install azure-cognitiveservices-vision-computervision

Autenticação

Uma vez criado o seu recurso Imagem Digitalizada, precisa da sua região, e uma das chaves da sua conta para instantaneaizar o objeto do cliente.

Utilize estes valores quando criar a instância do objeto cliente ComputerVisionClient .

Obtenha credenciais

Utilize o corte Azure CLI abaixo para povoar duas variáveis ambientais com a região da conta Imagem Digitalizada e uma das suas chaves (também pode encontrar estes valores no portal do Azure). O corte é formatado para a concha bash.

RES_GROUP=<resourcegroup-name>
ACCT_NAME=<computervision-account-name>

export ACCOUNT_REGION=$(az cognitiveservices account show \
    --resource-group $RES_GROUP \
    --name $ACCT_NAME \
    --query location \
    --output tsv)

export ACCOUNT_KEY=$(az cognitiveservices account keys list \
    --resource-group $RES_GROUP \
    --name $ACCT_NAME \
    --query key1 \
    --output tsv)

Criar cliente

Uma vez povoada as variáveis e ACCOUNT_KEY ambientaisACCOUNT_REGION, pode criar o objeto cliente ComputerVisionClient.

from azure.cognitiveservices.vision.computervision import ComputerVisionClient
from azure.cognitiveservices.vision.computervision.models import VisualFeatureTypes
from msrest.authentication import CognitiveServicesCredentials

import os
region = os.environ['ACCOUNT_REGION']
key = os.environ['ACCOUNT_KEY']

credentials = CognitiveServicesCredentials(key)
client = ComputerVisionClient(
    endpoint="https://" + region + ".api.cognitive.microsoft.com/",
    credentials=credentials
)

Utilização

Uma vez inicializado um objeto cliente ComputerVisionClient , pode:

  • Analise uma imagem: Pode analisar uma imagem para certas funcionalidades, tais como rostos, cores, tags.
  • Gerenas de miniatura: Crie uma imagem JPEG personalizada para usar como miniatura da imagem original.
  • Obtenha a descrição de uma imagem: Obtenha uma descrição da imagem com base no seu domínio de assunto.

Para mais informações sobre este serviço, consulte o que é Imagem Digitalizada?.

Exemplos

As seguintes secções fornecem vários fragmentos de código que cobrem algumas das tarefas de Imagem Digitalizada mais comuns, incluindo:

Analisar uma imagem

Pode analisar uma imagem para certas funcionalidades com analyze_image. Utilize a visual_features propriedade para definir os tipos de análise para realizar na imagem. Os valores comuns são VisualFeatureTypes.tags e VisualFeatureTypes.description.

url = "https://upload.wikimedia.org/wikipedia/commons/thumb/1/12/Broadway_and_Times_Square_by_night.jpg/450px-Broadway_and_Times_Square_by_night.jpg"

image_analysis = client.analyze_image(url,visual_features=[VisualFeatureTypes.tags])

for tag in image_analysis.tags:
    print(tag)

Obtenha a lista de domínios de assunto

Reveja os domínios do assunto utilizados para analisar a sua imagem com list_models. Estes nomes de domínio são usados quando analisam uma imagem por domínio. Um exemplo de um domínio é landmarks.

models = client.list_models()

for x in models.models_property:
    print(x)

Analisar uma imagem por domínio

Pode analisar uma imagem por domínio sujeito com analyze_image_by_domain. Obtenha a lista de domínios de assunto suportados para utilizar o nome de domínio correto.

domain = "landmarks"
url = "https://images.pexels.com/photos/338515/pexels-photo-338515.jpeg"
language = "en"

analysis = client.analyze_image_by_domain(domain, url, language)

for landmark in analysis.result["landmarks"]:
    print(landmark["name"])
    print(landmark["confidence"])

Obtenha a descrição de texto de uma imagem

Pode obter uma descrição de texto baseada em linguagem de uma imagem com describe_image. Solicite várias descrições com o max_description imóvel se estiver a fazer análise de texto para palavras-chave associadas à imagem. Exemplos de uma descrição de texto para a seguinte imagem incluem a train crossing a bridge over a body of water, a large bridge over a body of watere a train crossing a bridge over a large body of water.

domain = "landmarks"
url = "http://www.public-domain-photos.com/free-stock-photos-4/travel/san-francisco/golden-gate-bridge-in-san-francisco.jpg"
language = "en"
max_descriptions = 3

analysis = client.describe_image(url, max_descriptions, language)

for caption in analysis.captions:
    print(caption.text)
    print(caption.confidence)

Obter texto da imagem

Pode obter qualquer texto manuscrito ou impresso a partir de uma imagem. Isto requer duas chamadas para o SDK: read e get_read_result. A chamada para ler é assíncronea. Nos resultados da chamada get_read_result, é necessário verificar se a primeira chamada foi concluída OperationStatusCodes antes de extrair os dados de texto. Os resultados incluem o texto, bem como as coordenadas da caixa de limitação do texto.

# import models
from azure.cognitiveservices.vision.computervision.models import OperationStatusCodes

url = "https://github.com/Azure-Samples/cognitive-services-python-sdk-samples/raw/master/samples/vision/images/make_things_happen.jpg"
raw = True
numberOfCharsInOperationId = 36

# SDK call
rawHttpResponse = client.read(url, language="en", raw=True)

# Get ID from returned headers
operationLocation = rawHttpResponse.headers["Operation-Location"]
idLocation = len(operationLocation) - numberOfCharsInOperationId
operationId = operationLocation[idLocation:]

# SDK call
result = client.get_read_result(operationId)

# Get data
if result.status == OperationStatusCodes.succeeded:

    for line in result.analyze_result.read_results[0].lines:
        print(line.text)
        print(line.bounding_box)

Gerar miniatura

Pode gerar uma miniatura (JPG) de uma imagem com generate_thumbnail. A miniatura não precisa de estar nas mesmas proporções que a imagem original.

Este exemplo utiliza o pacote Travesseiro para guardar a nova imagem da miniatura localmente.

from PIL import Image
import io

width = 50
height = 50
url = "http://www.public-domain-photos.com/free-stock-photos-4/travel/san-francisco/golden-gate-bridge-in-san-francisco.jpg"

thumbnail = client.generate_thumbnail(width, height, url)

for x in thumbnail:
    image = Image.open(io.BytesIO(x))

image.save('thumbnail.jpg')

Resolução de problemas

Geral

Quando interage com o objeto cliente ComputerVisionClient utilizando o Python SDK, a ComputerVisionErrorException classe é usada para retornar erros. Os erros devolvidos pelo serviço correspondem aos mesmos códigos de estado HTTP devolvidos para pedidos de API REST.

Por exemplo, se tentar analisar uma imagem com uma chave inválida, um 401 erro é devolvido. No seguinte corte, o erro é manuseado graciosamente, capturando a exceção e exibindo informações adicionais sobre o erro.


domain = "landmarks"
url = "http://www.public-domain-photos.com/free-stock-photos-4/travel/san-francisco/golden-gate-bridge-in-san-francisco.jpg"
language = "en"
max_descriptions = 3

try:
    analysis = client.describe_image(url, max_descriptions, language)

    for caption in analysis.captions:
        print(caption.text)
        print(caption.confidence)
except HTTPFailure as e:
    if e.status_code == 401:
        print("Error unauthorized. Make sure your key and region are correct.")
    else:
        raise

Lidar com erros transitórios com recauchutagens

Ao trabalhar com o cliente ComputerVisionClient , poderá encontrar falhas transitórias causadas por limites de tarifas impostos pelo serviço, ou outros problemas transitórios, como falhas de rede. Para obter informações sobre o manuseamento deste tipo de falhas, consulte o padrão de Retry no guia Cloud Design Patterns e o padrão de disjuntor de circuitos relacionado.

Passos seguintes

Mais código de amostra

Várias amostras Imagem Digitalizada Python SDK estão disponíveis para você no repositório GitHub da SDK. Estas amostras fornecem código de exemplo para cenários adicionais comumente encontrados ao trabalhar com Imagem Digitalizada:

Documentação adicional

Para documentação mais extensa sobre o serviço Imagem Digitalizada, consulte a documentação do Azure Imagem Digitalizada sobre docs.microsoft.com.