Azure Cognitive Services Computer Vision SDK untuk Python

Layanan Computer Vision memberi pengembang akses ke algoritma tingkat lanjut untuk memproses gambar dan mengembalikan informasi. Algoritma Computer Vision menganalisis konten gambar dengan cara yang berbeda, tergantung pada fitur visual yang Anda minati.

Anda dapat menggunakan Computer Vision di aplikasi Anda untuk:

  • Menganalisis gambar untuk wawasan
  • Mengekstrak teks dari gambar
  • Hasilkan gambar mini

Mencari dokumentasi lainnya?

Prasyarat

Jika Anda memerlukan akun Computer Vision API, Anda dapat membuatnya dengan perintah Azure CLI ini:

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

Penginstalan

Instal Azure Cognitive Services Computer Vision SDK dengan pip, secara opsional dalam lingkungan virtual.

Mengonfigurasi lingkungan virtual (opsional)

Meskipun tidak diperlukan, Anda dapat menjaga sistem dasar dan lingkungan Azure SDK Anda terisolasi satu sama lain jika Anda menggunakan lingkungan virtual. Jalankan perintah berikut untuk mengonfigurasi lalu masukkan lingkungan virtual dengan venv, seperti cogsrv-vision-env:

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

Pemasangan SDK

Instal Azure Cognitive Services Computer Vision SDK untuk paket Python dengan pip:

pip install azure-cognitiveservices-vision-computervision

Autentikasi

Setelah Anda membuat sumber daya Computer Vision, Anda memerlukan wilayahnya, dan salah satu kunci akunnya untuk membuat instans objek klien.

Gunakan nilai-nilai ini saat Anda membuat instans objek klien ComputerVisionClient .

Mendapatkan kredensial

Gunakan cuplikan Azure CLI di bawah ini untuk mengisi dua variabel lingkungan dengan wilayah akun Computer Vision dan salah satu kuncinya (Anda juga dapat menemukan nilai-nilai ini di portal Azure). Cuplikan diformat untuk shell 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)

Membuat klien

Setelah mengisi ACCOUNT_REGION variabel lingkungan dan ACCOUNT_KEY , Anda dapat membuat objek klien 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
)

Penggunaan

Setelah menginisialisasi objek klien ComputerVisionClient , Anda dapat:

  • Menganalisis gambar: Anda dapat menganalisis gambar untuk fitur tertentu seperti wajah, warna, tag.
  • Hasilkan gambar mini: Buat gambar JPEG kustom untuk digunakan sebagai gambar mini gambar asli.
  • Mendapatkan deskripsi gambar: Dapatkan deskripsi gambar berdasarkan domain subjeknya.

Untuk informasi selengkapnya tentang layanan ini, lihat Apa itu Computer Vision?.

Contoh

Bagian berikut ini menyediakan beberapa cuplikan kode yang mencakup beberapa tugas Computer Vision yang paling umum, termasuk:

Menganalisis gambar

Anda dapat menganalisis gambar untuk fitur tertentu dengan analyze_image. visual_features Gunakan properti untuk mengatur jenis analisis yang akan dilakukan pada gambar. Nilai umum adalah VisualFeatureTypes.tags dan 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)

Mendapatkan daftar domain subjek

Tinjau domain subjek yang digunakan untuk menganalisis gambar Anda dengan list_models. Nama domain ini digunakan saat menganalisis gambar menurut domain. Contoh domain adalah landmarks.

models = client.list_models()

for x in models.models_property:
    print(x)

Menganalisis gambar menurut domain

Anda dapat menganalisis gambar menurut domain subjek dengan analyze_image_by_domain. Dapatkan daftar domain subjek yang didukung untuk menggunakan nama domain yang benar.

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

Mendapatkan deskripsi teks gambar

Anda bisa mendapatkan deskripsi teks berbasis bahasa gambar dengan describe_image. Minta beberapa deskripsi dengan max_description properti jika Anda melakukan analisis teks untuk kata kunci yang terkait dengan gambar. Contoh deskripsi teks untuk gambar berikut termasuk a train crossing a bridge over a body of water, , a large bridge over a body of waterdan 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)

Mendapatkan teks dari gambar

Anda bisa mendapatkan teks tulisan tangan atau cetak dari gambar. Ini memerlukan dua panggilan ke SDK: read dan get_read_result. Panggilan untuk membaca bersifat asinkron. Dalam hasil panggilan get_read_result, Anda perlu memeriksa apakah panggilan pertama selesai OperationStatusCodes sebelum mengekstrak data teks. Hasilnya mencakup teks serta koordinat kotak pembatas untuk teks.

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

Hasilkan gambar mini

Anda dapat menghasilkan gambar mini (JPG) gambar dengan generate_thumbnail. Gambar mini tidak perlu berada dalam proporsi yang sama dengan gambar asli.

Contoh ini menggunakan paket Bantal untuk menyimpan gambar mini baru secara lokal.

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

Pemecahan Masalah

Umum

Saat Anda berinteraksi dengan objek klien ComputerVisionClient menggunakan Python SDK, ComputerVisionErrorException kelas digunakan untuk mengembalikan kesalahan. Kesalahan yang dikembalikan oleh layanan sesuai dengan kode status HTTP yang sama yang dikembalikan untuk permintaan REST API.

Misalnya, jika Anda mencoba menganalisis gambar dengan kunci yang tidak valid, kesalahan 401 akan ditampilkan. Dalam cuplikan berikut, kesalahan ditangani dengan baik dengan menangkap pengecualian dan menampilkan informasi tambahan tentang kesalahan.


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

Menangani kesalahan sementara dengan percobaan kembali

Saat bekerja dengan klien ComputerVisionClient , Anda mungkin mengalami kegagalan sementara yang disebabkan oleh batas tarif yang diberlakukan oleh layanan, atau masalah sementara lainnya seperti pemadaman jaringan. Untuk informasi tentang penanganan jenis kegagalan ini, lihat Coba lagi pola di panduan Pola Desain Cloud, dan pola Pemutus Sirkuit terkait.

Langkah berikutnya

Lebih banyak kode sampel

Beberapa sampel Computer Vision Python SDK tersedia untuk Anda di repositori GitHub SDK. Sampel ini menyediakan kode contoh untuk skenario tambahan yang biasa ditemui saat bekerja dengan Computer Vision:

Dokumentasi tambahan

Untuk dokumentasi yang lebih luas tentang layanan Computer Vision, lihat dokumentasi Azure Computer Vision di docs.microsoft.com.