استفاده از Vision API با پایتون

1. بررسی اجمالی

5ab7829fc22b21c4.png

Vision API به توسعه دهندگان اجازه می دهد تا به راحتی ویژگی های تشخیص بینایی را در برنامه ها ادغام کنند، از جمله برچسب گذاری تصویر، تشخیص چهره و نقطه عطف، تشخیص نوری کاراکتر (OCR)، و برچسب گذاری محتوای صریح.

در این آموزش، شما بر روی استفاده از Vision API با پایتون تمرکز خواهید کرد.

چیزی که یاد خواهید گرفت

  • چگونه محیط خود را تنظیم کنیم
  • نحوه انجام تشخیص برچسب
  • نحوه انجام تشخیص متن
  • نحوه انجام تشخیص نقطه عطف
  • نحوه انجام تشخیص چهره
  • نحوه انجام تشخیص اشیا

آنچه شما نیاز دارید

  • یک پروژه Google Cloud
  • مرورگری مانند کروم یا فایرفاکس
  • آشنایی با استفاده از پایتون

نظرسنجی

چگونه از این آموزش استفاده خواهید کرد؟

فقط از طریق آن را بخوانید آن را بخوانید و تمرینات را کامل کنید

تجربه خود را با پایتون چگونه ارزیابی می کنید؟

تازه کار متوسط مسلط

تجربه خود را با خدمات Google Cloud چگونه ارزیابی می کنید؟

تازه کار متوسط مسلط

2. راه اندازی و الزامات

تنظیم محیط خود به خود

  1. به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. همیشه می توانید آن را به روز کنید.
  • شناسه پروژه در تمام پروژه‌های Google Cloud منحصربه‌فرد است و تغییرناپذیر است (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید شناسه پروژه خود را ارجاع دهید (معمولاً با نام PROJECT_ID شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، می‌توانید خودتان را امتحان کنید، و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند.
  • برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه ، که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه هزینه زیادی نخواهد داشت. برای خاموش کردن منابع برای جلوگیری از تحمیل صورت‌حساب فراتر از این آموزش، می‌توانید منابعی را که ایجاد کرده‌اید حذف کنید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

Cloud Shell را راه اندازی کنید

در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.

Cloud Shell را فعال کنید

  1. از Cloud Console، روی Activate Cloud Shell کلیک کنید 853e55310c205094.png .

55efc1aaa7a4d3ad.png

اگر این اولین باری است که Cloud Shell را راه اندازی می کنید، با یک صفحه میانی روبرو می شوید که آن را توصیف می کند. اگر با یک صفحه میانی مواجه شدید، روی Continue کلیک کنید.

9c92662c6a846a5c.png

تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.

9f0e51b578fecce5.png

این ماشین مجازی با تمام ابزارهای توسعه مورد نیاز بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی ارائه می‌کند و در Google Cloud اجرا می‌شود، که عملکرد و احراز هویت شبکه را بسیار افزایش می‌دهد. بسیاری از کارهای شما، اگر نه همه، در این کد لبه با مرورگر قابل انجام است.

پس از اتصال به Cloud Shell، باید ببینید که احراز هویت شده اید و پروژه به ID پروژه شما تنظیم شده است.

  1. برای تایید احراز هویت، دستور زیر را در Cloud Shell اجرا کنید:
gcloud auth list

خروجی فرمان

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. دستور زیر را در Cloud Shell اجرا کنید تا تأیید کنید که دستور gcloud از پروژه شما اطلاع دارد:
gcloud config list project

خروجی فرمان

[core]
project = <PROJECT_ID>

اگر اینطور نیست، می توانید آن را با این دستور تنظیم کنید:

gcloud config set project <PROJECT_ID>

خروجی فرمان

Updated property [core/project].

3. راه اندازی محیط

قبل از اینکه بتوانید از Vision API استفاده کنید، دستور زیر را در Cloud Shell اجرا کنید تا API فعال شود:

gcloud services enable vision.googleapis.com

شما باید چیزی شبیه به این را ببینید:

Operation "operations/..." finished successfully.

اکنون، می توانید از Vision API استفاده کنید!

به فهرست اصلی خود بروید:

cd ~

یک محیط مجازی پایتون برای جداسازی وابستگی ها ایجاد کنید:

virtualenv venv-vision

فعال کردن محیط مجازی:

source venv-vision/bin/activate

IPython و کتابخانه مشتری Vision API را نصب کنید:

pip install ipython google-cloud-vision

شما باید چیزی شبیه به این را ببینید:

...
Installing collected packages: ..., ipython, google-cloud-vision
Successfully installed ... google-cloud-vision-3.4.0 ...

اکنون، شما آماده استفاده از کتابخانه مشتری Vision API هستید!

در مراحل بعدی، از یک مفسر تعاملی پایتون به نام IPython استفاده خواهید کرد که در مرحله قبل آن را نصب کردید. یک جلسه را با اجرای ipython در Cloud Shell شروع کنید:

ipython

شما باید چیزی شبیه به این را ببینید:

Python 3.9.2 (default, Feb 28 2021, 17:03:44)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.12.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

شما آماده اید تا اولین درخواست خود را مطرح کنید...

4. تشخیص برچسب را انجام دهید

یکی از ویژگی های اصلی Vision API شناسایی اشیا یا موجودیت ها در یک تصویر است که به عنوان حاشیه نویسی برچسب شناخته می شود. تشخیص برچسب اشیاء عمومی، مکان‌ها، فعالیت‌ها، گونه‌های جانوری، محصولات و موارد دیگر را شناسایی می‌کند. Vision API یک تصویر ورودی می گیرد و محتمل ترین برچسب هایی را که روی آن تصویر اعمال می شود، برمی گرداند. برچسب های تطبیق برتر را همراه با امتیاز اطمینان از یک مسابقه به تصویر برمی گرداند.

در این مثال، شما تشخیص برچسب را بر روی تصویری از Setagaya، منطقه ای محبوب در توکیو (با اجازه الکس نایت ) انجام خواهید داد:

756f97f0b1e46c38.jpeg

کد زیر را در جلسه IPython خود کپی کنید:

from typing import Sequence

from google.cloud import vision


def analyze_image_from_uri(
    image_uri: str,
    feature_types: Sequence,
) -> vision.AnnotateImageResponse:
    client = vision.ImageAnnotatorClient()

    image = vision.Image()
    image.source.image_uri = image_uri
    features = [vision.Feature(type_=feature_type) for feature_type in feature_types]
    request = vision.AnnotateImageRequest(image=image, features=features)

    response = client.annotate_image(request=request)

    return response


def print_labels(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for label in response.label_annotations:
        print(
            f"{label.score:4.0%}",
            f"{label.description:5}",
            sep=" | ",
        )
        

کمی وقت بگذارید و کد را مطالعه کنید و ببینید که چگونه از روش کتابخانه مشتری annotate_image برای تجزیه و تحلیل یک تصویر برای مجموعه ای از ویژگی های داده شده استفاده می کند.

با ویژگی LABEL_DETECTION درخواست ارسال کنید:

image_uri = "gs://cloud-samples-data/vision/label/setagaya.jpeg"
features = [vision.Feature.Type.LABEL_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_labels(response)

شما باید خروجی زیر را دریافت کنید:

================================================================================
 97% | Bicycle
 96% | Tire
 94% | Wheel
 91% | Automotive lighting
 89% | Infrastructure
 87% | Bicycle wheel
 86% | Mode of transport
 85% | Building
 83% | Electricity
 82% | Neighbourhood

در اینجا نحوه ارائه نتایج توسط دمو آنلاین آمده است:

2191b0425c9c148f.png

خلاصه

در این مرحله، شما قادر به شناسایی برچسب روی یک تصویر و نمایش محتمل ترین برچسب های مرتبط با آن تصویر هستید. درباره تشخیص برچسب بیشتر بخوانید.

5. تشخیص متن را انجام دهید

تشخیص متن، تشخیص کاراکتر نوری (OCR) را انجام می دهد. با پشتیبانی از طیف گسترده ای از زبان ها، متن را در یک تصویر شناسایی و استخراج می کند. همچنین دارای شناسایی خودکار زبان است.

در این مثال، شما تشخیص متن را روی یک تصویر علائم راهنمایی و رانندگی انجام خواهید داد:

4dedd3fcfd9ad99b.jpeg

کد زیر را در جلسه IPython خود کپی کنید:

def print_text(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for annotation in response.text_annotations:
        vertices = [f"({v.x},{v.y})" for v in annotation.bounding_poly.vertices]
        print(
            f"{repr(annotation.description):42}",
            ",".join(vertices),
            sep=" | ",
        )
        

با ویژگی TEXT_DETECTION درخواست ارسال کنید:

image_uri = "gs://cloud-samples-data/vision/ocr/sign.jpg"
features = [vision.Feature.Type.TEXT_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_text(response)

شما باید خروجی زیر را دریافت کنید:

================================================================================
'WAITING?\nPLEASE\nTURN OFF\nYOUR\nENGINE' | (310,821),(2225,821),(2225,1965),(310,1965)
'WAITING'                                  | (344,821),(2025,879),(2016,1127),(335,1069)
'?'                                        | (2057,881),(2225,887),(2216,1134),(2048,1128)
'PLEASE'                                   | (1208,1230),(1895,1253),(1891,1374),(1204,1351)
'TURN'                                     | (1217,1414),(1718,1434),(1713,1558),(1212,1538)
'OFF'                                      | (1787,1437),(2133,1451),(2128,1575),(1782,1561)
'YOUR'                                     | (1211,1609),(1741,1626),(1737,1747),(1207,1731)
'ENGINE'                                   | (1213,1805),(1923,1819),(1920,1949),(1210,1935)

در اینجا نحوه ارائه نتایج توسط دمو آنلاین آمده است:

9c70fbce871c5fe5.png

خلاصه

در این مرحله قادر به تشخیص متن روی یک تصویر و نمایش متن شناسایی شده از تصویر هستید. درباره تشخیص متن بیشتر بخوانید.

6. تشخیص نقطه عطف را انجام دهید

تشخیص نقطه عطف، ساختارهای طبیعی و مصنوعی محبوب را در یک تصویر تشخیص می دهد.

در این مثال، شما تشخیص نقطه عطفی را بر روی تصویری از برج ایفل انجام خواهید داد:

fb7801e36884b875.jpeg

کد زیر را در جلسه IPython خود کپی کنید:

def print_landmarks(response: vision.AnnotateImageResponse, min_score: float = 0.5):
    print("=" * 80)
    for landmark in response.landmark_annotations:
        if landmark.score < min_score:
            continue
        vertices = [f"({v.x},{v.y})" for v in landmark.bounding_poly.vertices]
        lat_lng = landmark.locations[0].lat_lng
        print(
            f"{landmark.description:18}",
            ",".join(vertices),
            f"{lat_lng.latitude:.5f}",
            f"{lat_lng.longitude:.5f}",
            sep=" | ",
        )
        

با ویژگی LANDMARK_DETECTION درخواست ارسال کنید:

image_uri = "gs://cloud-samples-data/vision/landmark/eiffel_tower.jpg"
features = [vision.Feature.Type.LANDMARK_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_landmarks(response)

شما باید خروجی زیر را دریافت کنید:

================================================================================
Trocadéro Gardens  | (303,36),(520,36),(520,371),(303,371) | 48.86160 | 2.28928
Eiffel Tower       | (458,76),(512,76),(512,263),(458,263) | 48.85846 | 2.29435

در اینجا نحوه ارائه نتایج توسط دمو آنلاین آمده است:

2788697365670985.png

خلاصه

در این مرحله، شما قادر به تشخیص نقطه عطفی بر روی تصویری از برج ایفل هستید. درباره تشخیص نقطه عطف بیشتر بخوانید.

7. تشخیص چهره را انجام دهید

تشخیص ویژگی‌های صورت، چندین چهره را در یک تصویر به همراه ویژگی‌های کلیدی چهره مانند حالت احساسی یا پوشیدن لباس سر شناسایی می‌کند.

در این مثال، شما چهره‌ها را در تصویر زیر تشخیص می‌دهید (به لطف هیمانشو سینگ گورجار ):

58c578ece524cf32.jpeg

کد زیر را در جلسه IPython خود کپی کنید:

def print_faces(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for face_number, face in enumerate(response.face_annotations, 1):
        vertices = ",".join(f"({v.x},{v.y})" for v in face.bounding_poly.vertices)
        print(f"# Face {face_number} @ {vertices}")
        print(f"Joy:     {face.joy_likelihood.name}")
        print(f"Exposed: {face.under_exposed_likelihood.name}")
        print(f"Blurred: {face.blurred_likelihood.name}")
        print("-" * 80)
        

با ویژگی FACE_DETECTION درخواست ارسال کنید:

image_uri = "gs://cloud-samples-data/vision/face/faces.jpeg"
features = [vision.Feature.Type.FACE_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_faces(response)

شما باید خروجی زیر را دریافت کنید:

================================================================================
# Face 1 @ (1077,157),(2146,157),(2146,1399),(1077,1399)
Joy:     VERY_LIKELY
Exposed: VERY_UNLIKELY
Blurred: VERY_UNLIKELY
--------------------------------------------------------------------------------
# Face 2 @ (144,1273),(793,1273),(793,1844),(144,1844)
Joy:     VERY_UNLIKELY
Exposed: VERY_UNLIKELY
Blurred: UNLIKELY
--------------------------------------------------------------------------------
# Face 3 @ (785,167),(1100,167),(1100,534),(785,534)
Joy:     VERY_UNLIKELY
Exposed: LIKELY
Blurred: VERY_LIKELY
--------------------------------------------------------------------------------

در اینجا نحوه ارائه نتایج توسط دمو آنلاین آمده است:

cbb7f59299651b83.png

خلاصه

در این مرحله توانستید تشخیص چهره را انجام دهید. درباره تشخیص چهره بیشتر بخوانید.

8. تشخیص شی را انجام دهید

در این مثال، شما تشخیص شی را بر روی همان تصویر قبلی (از نظر الکس نایت ) از Setagaya انجام خواهید داد:

756f97f0b1e46c38.jpeg

کد زیر را در جلسه IPython خود کپی کنید:

def print_objects(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for obj in response.localized_object_annotations:
        nvertices = obj.bounding_poly.normalized_vertices
        print(
            f"{obj.score:4.0%}",
            f"{obj.name:15}",
            f"{obj.mid:10}",
            ",".join(f"({v.x:.1f},{v.y:.1f})" for v in nvertices),
            sep=" | ",
        )
        

با ویژگی OBJECT_LOCALIZATION درخواست ارسال کنید:

image_uri = "gs://cloud-samples-data/vision/label/setagaya.jpeg"
features = [vision.Feature.Type.OBJECT_LOCALIZATION]

response = analyze_image_from_uri(image_uri, features)
print_objects(response)

شما باید خروجی زیر را دریافت کنید:

================================================================================
 93% | Bicycle         | /m/0199g   | (0.6,0.6),(0.8,0.6),(0.8,0.9),(0.6,0.9)
 92% | Bicycle wheel   | /m/01bqk0  | (0.6,0.7),(0.7,0.7),(0.7,0.9),(0.6,0.9)
 91% | Tire            | /m/0h9mv   | (0.7,0.7),(0.8,0.7),(0.8,1.0),(0.7,1.0)
 75% | Bicycle         | /m/0199g   | (0.3,0.6),(0.4,0.6),(0.4,0.7),(0.3,0.7)
 51% | Tire            | /m/0h9mv   | (0.3,0.6),(0.4,0.6),(0.4,0.7),(0.3,0.7)

در اینجا نحوه ارائه نتایج توسط دمو آنلاین آمده است:

e1c2ca803d874a6b.png

خلاصه

در این مرحله شما قادر به تشخیص شیء هستید. درباره تشخیص اشیا بیشتر بخوانید.

9. ویژگی های متعدد

نحوه استفاده از برخی از ویژگی‌های Vision API را دیده‌اید، اما موارد بسیار بیشتری وجود دارد و می‌توانید چندین ویژگی را در یک درخواست درخواست کنید.

در اینجا نوع درخواستی که می‌توانید برای دریافت همه اطلاعات آماری به‌صورت هم‌زمان ارائه کنید، در اینجا آمده است:

image_uri = "gs://..."
features = [
    vision.Feature.Type.OBJECT_LOCALIZATION,
    vision.Feature.Type.FACE_DETECTION,
    vision.Feature.Type.LANDMARK_DETECTION,
    vision.Feature.Type.LOGO_DETECTION,
    vision.Feature.Type.LABEL_DETECTION,
    vision.Feature.Type.TEXT_DETECTION,
    vision.Feature.Type.DOCUMENT_TEXT_DETECTION,
    vision.Feature.Type.SAFE_SEARCH_DETECTION,
    vision.Feature.Type.IMAGE_PROPERTIES,
    vision.Feature.Type.CROP_HINTS,
    vision.Feature.Type.WEB_DETECTION,
    vision.Feature.Type.PRODUCT_SEARCH,
    vision.Feature.Type.OBJECT_LOCALIZATION,
]

# response = analyze_image_from_uri(image_uri, features)

و امکانات بیشتری مانند انجام تشخیص روی دسته ای از تصاویر، به صورت همزمان یا ناهمزمان وجود دارد. تمام راهنماهای نحوه کار را بررسی کنید.

10. تبریک می گویم!

5ab7829fc22b21c4.png

شما یاد گرفتید که چگونه از Vision API با پایتون استفاده کنید و چند ویژگی تشخیص تصویر را آزمایش کردید!

پاک کن

برای پاکسازی محیط توسعه خود، از Cloud Shell:

  • اگر هنوز در جلسه IPython خود هستید، به پوسته برگردید: exit
  • استفاده از محیط مجازی پایتون را متوقف کنید: deactivate
  • پوشه محیط مجازی خود را حذف کنید: cd ~ ; rm -rf ./venv-vision

برای حذف پروژه Google Cloud خود از Cloud Shell:

  • شناسه پروژه فعلی خود را بازیابی کنید: PROJECT_ID=$(gcloud config get-value core/project)
  • مطمئن شوید که این پروژه ای است که می خواهید حذف کنید: echo $PROJECT_ID
  • پروژه را حذف کنید: gcloud projects delete $PROJECT_ID

بیشتر بدانید

مجوز

این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.