Azure Cognitive Services Computer Vision Pythonhoz készült SDK

A Computer Vision szolgáltatás a fejlesztők számára hozzáférést biztosít speciális képfeldolgozó és információt visszaadó algoritmusokhoz. Computer Vision algoritmusok különböző módokon elemzik a képek tartalmát a kívánt vizuális funkcióktól függően.

Az alkalmazásban a Computer Vision a következőket teheti:

  • Képek elemzése eredmények kinyeréséhez
  • Szöveg kinyerése képekből
  • Miniatűrök létrehozása

További dokumentációt keres?

Előfeltételek

Ha Computer Vision API-fiókra van szüksége, létrehozhat egyet ezzel az Azure CLI-paranccsal:

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

Telepítés

Telepítse az Azure Cognitive Services Computer Vision SDK-t pip használatával, opcionálisan egy virtuális környezetben.

Virtuális környezet konfigurálása (nem kötelező)

Bár nem szükséges, az alaprendszert és az Azure SDK-környezeteket elkülönítheti egymástól, ha virtuális környezetet használ. Futtassa a következő parancsokat a venv virtuális környezetének konfigurálásához és megadásához, például cogsrv-vision-env:

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

Az SDK telepítése

Telepítse az Azure Cognitive Services Computer Vision Pythonhoz készült SDK-csomagota pip használatával:

pip install azure-cognitiveservices-vision-computervision

Hitelesítés

A Computer Vision-erőforrás létrehozása után szüksége lesz a régióra és annak egyik fiókkulcsára az ügyfélobjektum példányosításához.

Ezeket az értékeket a ComputerVisionClient ügyfélobjektum példányának létrehozásakor használja.

Hitelesítő adatok lekérése

Az alábbi Azure CLI-kódrészlettel feltölthet két környezeti változót a Computer Vision fiókrégióval és annak egyik kulcsával (ezeket az értékeket a Azure Portal is megtalálja). A kódrészlet a Bash-felülethez van formázva.

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)

Ügyfél létrehozása

Miután kitöltötte a és ACCOUNT_KEY a ACCOUNT_REGION környezeti változókat, létrehozhatja a ComputerVisionClient ügyfélobjektumot.

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
)

Használat

Miután inicializált egy ComputerVisionClient ügyfélobjektumot, a következőket teheti:

  • Kép elemzése: Elemezhet egy képet bizonyos funkciók, például arcok, színek, címkék alapján.
  • Miniatűrök létrehozása: Hozzon létre egy egyéni JPEG-képet, amelyet az eredeti kép miniatűrjeként használhat.
  • Kép leírásának lekérése: A kép leírásának lekérése a tárgytartománya alapján.

A szolgáltatással kapcsolatos további információkért lásd: Mi a Computer Vision?.

Példák

A következő szakaszok számos kódrészletet biztosítanak, amelyek a leggyakoribb Computer Vision feladatokat ismertetik, többek között:

Rendszerkép elemzése

A használatával elemezhet egy képet bizonyos funkciókhoz analyze_image. visual_features A tulajdonság használatával beállíthatja a képen végrehajtandó elemzési típusokat. A gyakori értékek a következők: VisualFeatureTypes.tags és 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)

Tárgytartománylista lekérése

Tekintse át a kép elemzéséhez használt tárgytartományokat a használatával list_models. A rendszer ezeket a tartományneveket használja a képek tartományonkénti elemzésekor. Egy tartományra példa: landmarks.

models = client.list_models()

for x in models.models_property:
    print(x)

Kép elemzése tartomány szerint

A rendszerképeket tárgytartomány szerint elemezheti a következővel: analyze_image_by_domain. A megfelelő tartománynév használatához kérje le a támogatott tárgytartományok listáját .

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

Kép szöveges leírásának lekérése

A kép nyelvalapú szövegleírását a használatával kaphatja describe_imagemeg. Kérjen több leírást a max_description tulajdonsággal, ha szövegelemzést végez a képhez társított kulcsszavakhoz. A következő kép szöveges leírására példák: a train crossing a bridge over a body of water, a large bridge over a body of waterés 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)

Szöveg lekérése képről

A képekről bármilyen kézzel írt vagy nyomtatott szöveget lekérhet. Ehhez két hívásra van szükség az SDK-hoz: read és get_read_result. Az olvasási hívás aszinkron. A get_read_result hívás eredményében ellenőriznie kell, hogy az első hívás befejeződött-e OperationStatusCodes a szöveges adatok kinyerése előtt. Az eredmények közé tartozik a szöveg, valamint a szöveg határolókeretének koordinátái.

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

Miniatűr létrehozása

A kép miniatűrje (JPG) a használatával generate_thumbnailhozható létre. A miniatűrnek nem kell ugyanolyan arányban lennie, mint az eredeti képnek.

Ez a példa a Pillow csomagot használja az új miniatűrkép helyi mentéséhez.

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

Hibaelhárítás

Általános kérdések

Amikor a ComputerVisionClient ügyfélobjektumot a Python SDK használatával használja, a ComputerVisionErrorException osztály a hibák visszaadására szolgál. A szolgáltatás által visszaadott hibák megegyeznek a REST API-kérésekhez visszaadott HTTP-állapotkódokkal.

Ha például érvénytelen kulccsal próbál elemezni egy képet, a 401 rendszer hibát ad vissza. Az alábbi kódrészletben a rendszer a kivétel elfogásával és a hibával kapcsolatos további információk megjelenítésével kezeli a hibát.


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

Átmeneti hibák kezelése újrapróbálkozásokkal

A ComputerVisionClient ügyfél használata során átmeneti hibákat tapasztalhat, amelyeket a szolgáltatás által kikényszerített sebességkorlátozások vagy más átmeneti problémák, például hálózati kimaradások okoznak. Az ilyen típusú hibák kezelésével kapcsolatos információkért lásd: Újrapróbálkozási minta a felhőtervezési minták útmutatójában és a kapcsolódó áramkör-megszakító minta.

Következő lépések

További mintakód

Az SDK GitHub-adattárában számos Computer Vision Python SDK-minta érhető el. Ezek a minták példakódot biztosítanak a Computer Vision használata során gyakran előforduló további forgatókönyvekhez:

További dokumentáció

Az Computer Vision szolgáltatás részletesebb dokumentációját az Azure Computer Vision docs.microsoft.com dokumentációjában találja.