Azure Cognitive Services Computer Vision SDK ل Python

توفر خدمة Computer Vision للمطورين إمكانية الوصول إلى الخوارزميات المتقدمة لمعالجة الصور وإرجاع المعلومات. تحلل خوارزميات Computer Vision محتوى الصورة بطرق مختلفة، اعتمادا على الميزات المرئية التي تهتم بها.

يمكنك استخدام Computer Vision في التطبيق الخاص بك من أجل:

  • تحليل الصور للنتائج المعرفية
  • استخراج النص من الصور
  • إنشاء صور مصغرة

هل تبحث عن المزيد من الوثائق؟

المتطلبات الأساسية

إذا كنت بحاجة إلى حساب Computer Vision API، يمكنك إنشاء حساب باستخدام أمر 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

التثبيت

قم بتثبيت Azure Cognitive Services Computer Vision SDK مع pip، اختياريا داخل بيئة ظاهرية.

تكوين بيئة ظاهرية (اختياري)

على الرغم من أنه ليس مطلوبا، يمكنك الاحتفاظ بالنظام الأساسي وبيئات Azure SDK معزولة عن بعضها البعض إذا كنت تستخدم بيئة ظاهرية. نفذ الأوامر التالية لتكوين ثم أدخل بيئة ظاهرية باستخدام venv، مثل cogsrv-vision-env:

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

تثبيت SDK

قم بتثبيت Azure Cognitive Services Computer Vision SDK لحزمة Python باستخدام pip:

pip install azure-cognitiveservices-vision-computervision

المصادقة

بمجرد إنشاء مورد Computer Vision الخاص بك، تحتاج إلى منطقته، وأحد مفاتيح الحساب الخاصة به لإنشاء مثيل لكائن العميل.

استخدم هذه القيم عند إنشاء مثيل كائن عميل ComputerVisionClient .

الحصول على بيانات الاعتماد

استخدم مقتطف Azure CLI أدناه لملء متغيرين للبيئة بمنطقة حساب Computer Vision وأحد مفاتيحه (يمكنك أيضا العثور على هذه القيم في مدخل Microsoft Azure). يُنسق المقتطف لـBash shell.

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)

إنشاء عميل

بمجرد ملء ACCOUNT_REGION متغيرات البيئة و ACCOUNT_KEY ، يمكنك إنشاء كائن عميل 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
)

الاستخدام

بمجرد تهيئة كائن عميل ComputerVisionClient ، يمكنك:

  • تحليل صورة: يمكنك تحليل صورة لميزات معينة مثل الوجوه والألوان والعلامات.
  • إنشاء صور مصغرة: إنشاء صورة JPEG مخصصة لاستخدامها كصورة مصغرة للصورة الأصلية.
  • الحصول على وصف للصورة: احصل على وصف للصورة استنادا إلى مجال موضوعها.

لمزيد من المعلومات حول هذه الخدمة، راجع ما هي Computer Vision؟.

أمثلة

توفر الأقسام التالية العديد من القصاصات البرمجية التي تغطي بعض مهام Computer Vision الأكثر شيوعا، بما في ذلك:

حلل صورة

يمكنك تحليل صورة لميزات معينة باستخدام analyze_image. استخدم الخاصية visual_features لتعيين أنواع التحليل التي يجب إجراؤها على الصورة. القيم الشائعة هي VisualFeatureTypes.tags و 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)

الحصول على قائمة مجالات الموضوع

راجع مجالات الموضوع المستخدمة لتحليل صورتك باستخدام list_models. يتم استخدام أسماء المجالات هذه عند تحليل صورة حسب المجال. مثال على المجال هو landmarks.

models = client.list_models()

for x in models.models_property:
    print(x)

تحليل صورة حسب المجال

يمكنك تحليل صورة حسب مجال الموضوع باستخدام analyze_image_by_domain. احصل على قائمة مجالات الموضوع المدعومة لاستخدام اسم المجال الصحيح.

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

الحصول على وصف نصي لصورة

يمكنك الحصول على وصف نصي مستند إلى اللغة لصورة باستخدام describe_image. اطلب عدة أوصاف باستخدام الخاصية max_description إذا كنت تقوم بتحليل النص للكلمات الأساسية المقترنة بالصورة. تتضمن a train crossing a bridge over a body of waterأمثلة الوصف النصي للصورة التالية و a large bridge over a body of waterو.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)

الحصول على نص من الصورة

يمكنك الحصول على أي نص مكتوب بخط اليد أو مطبوع من صورة. يتطلب هذا استدعاءين إلى SDK: read و get_read_result. استدعاء القراءة غير متزامن. في نتائج المكالمة get_read_result، تحتاج إلى التحقق مما إذا كان الاستدعاء الأول قد اكتمل OperationStatusCodes قبل استخراج البيانات النصية. تتضمن النتائج النص بالإضافة إلى إحداثيات المربع المحيط للنص.

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

إنشاء صورة مصغرة

يمكنك إنشاء صورة مصغرة (JPG) لصورة باستخدام generate_thumbnail. لا يلزم أن تكون الصورة المصغرة بنفس نسب الصورة الأصلية.

يستخدم هذا المثال حزمة الوسادة لحفظ صورة الصورة المصغرة الجديدة محليا.

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

استكشاف الأخطاء وإصلاحها

عام

عند التفاعل مع كائن عميل ComputerVisionClient باستخدام Python SDK، ComputerVisionErrorException يتم استخدام الفئة لإرجاع الأخطاء. تتوافق الأخطاء التي تم إرجاعها بواسطة الخدمة مع نفس رموز حالة HTTP التي تم إرجاعها لطلبات واجهة برمجة تطبيقات REST.

على سبيل المثال، إذا حاولت تحليل صورة بمفتاح غير صالح، 401 فسيتم إرجاع خطأ. في القصاصة البرمجية التالية، تتم معالجة الخطأ بأمان عن طريق التقاط الاستثناء وعرض معلومات إضافية حول الخطأ.


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

التعامل مع الأخطاء العابرة مع عمليات إعادة المحاولة

أثناء العمل مع عميل ComputerVisionClient ، قد تواجه حالات فشل عابرة بسبب حدود المعدل التي تفرضها الخدمة، أو مشاكل عابرة أخرى مثل انقطاع الشبكة. للحصول على معلومات حول معالجة هذه الأنواع من الأعطال، راجع نمط إعادة المحاولة في دليل أنماط تصميم السحابة، ونمط قاطع الدائرة ذي الصلة.

الخطوات التالية

المزيد من نماذج التعليمات البرمجية

تتوفر لك العديد من عينات Computer Vision Python SDK في مستودع GitHub الخاص ب SDK. توفر هذه العينات مثالا للتعليمات البرمجية للسيناريوهات الإضافية التي تتم مواجهتها عادة أثناء العمل مع Computer Vision:

وثائق إضافية

للحصول على وثائق أكثر شمولا حول خدمة Computer Vision، راجع وثائق Azure Computer Vision على docs.microsoft.com.