۱. مرور کلی

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



- نام پروژه، نام نمایشی برای شرکتکنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمیشود. شما همیشه میتوانید آن را بهروزرسانی کنید.
- شناسه پروژه در تمام پروژههای گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید میکند؛ معمولاً برای شما مهم نیست که چه باشد. در اکثر آزمایشگاههای کد، باید شناسه پروژه خود را (که معمولاً با عنوان
PROJECT_IDشناخته میشود) ارجاع دهید. اگر شناسه تولید شده را دوست ندارید، میتوانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، میتوانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی میماند. - برای اطلاع شما، یک مقدار سوم، شماره پروژه ، وجود دارد که برخی از APIها از آن استفاده میکنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
- در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد هزینه زیادی نخواهد داشت، اگر اصلاً هزینهای داشته باشد. برای خاموش کردن منابع به منظور جلوگیری از پرداخت صورتحساب پس از این آموزش، میتوانید منابعی را که ایجاد کردهاید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
شروع پوسته ابری
اگرچه میتوان گوگل کلود را از راه دور و از طریق لپتاپ شما مدیریت کرد، اما در این آزمایشگاه کد از Cloud Shell ، یک محیط خط فرمان که در فضای ابری اجرا میشود، استفاده خواهید کرد.
فعال کردن پوسته ابری
- از کنسول ابری، روی فعال کردن پوسته ابری کلیک کنید
.

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

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

این ماشین مجازی مجهز به تمام ابزارهای توسعه مورد نیاز است. این ماشین یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه میدهد و در فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی افزایش میدهد. بخش عمدهای از کار شما در این آزمایشگاه کد، اگر نگوییم همه، را میتوان با یک مرورگر انجام داد.
پس از اتصال به Cloud Shell، باید ببینید که احراز هویت شدهاید و پروژه روی شناسه پروژه شما تنظیم شده است.
- برای تأیید احراز هویت، دستور زیر را در 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`
- دستور زیر را در Cloud Shell اجرا کنید تا تأیید کنید که دستور gcloud از پروژه شما اطلاع دارد:
gcloud config list project
خروجی دستور
[core] project = <PROJECT_ID>
اگر اینطور نیست، میتوانید با این دستور آن را تنظیم کنید:
gcloud config set project <PROJECT_ID>
خروجی دستور
Updated property [core/project].
۳. تنظیمات محیطی
قبل از اینکه بتوانید از 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]:
آمادهای که اولین درخواستت رو مطرح کنی...
۴. تشخیص برچسب را انجام دهید
یکی از ویژگیهای اصلی Vision API شناسایی اشیاء یا موجودیتها در یک تصویر است که به عنوان حاشیهنویسی برچسب شناخته میشود. تشخیص برچسب، اشیاء عمومی، مکانها، فعالیتها، گونههای جانوری، محصولات و موارد دیگر را شناسایی میکند. Vision API یک تصویر ورودی را دریافت میکند و محتملترین برچسبهایی را که برای آن تصویر اعمال میشود، برمیگرداند. این API برچسبهای منطبق با بالاترین تطابق را به همراه امتیاز اطمینان تطابق با تصویر برمیگرداند.
در این مثال، شما تشخیص برچسب را روی تصویری (با حسن نیت از الکس نایت ) از ستاگایا، منطقهای محبوب در توکیو، انجام خواهید داد:

کد زیر را در جلسه 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
در اینجا نحوه نمایش نتایج توسط نسخه آزمایشی آنلاین آورده شده است:

خلاصه
در این مرحله، شما توانستید تشخیص برچسب را روی یک تصویر انجام دهید و محتملترین برچسبهای مرتبط با آن تصویر را نمایش دهید. درباره تشخیص برچسب بیشتر بخوانید.
۵. تشخیص متن را انجام دهید
تشخیص متن، تشخیص نوری کاراکتر (OCR) را انجام میدهد. این برنامه متن را در یک تصویر با پشتیبانی از طیف وسیعی از زبانها شناسایی و استخراج میکند. همچنین دارای شناسایی خودکار زبان است.
در این مثال، شما تشخیص متن را روی تصویر یک تابلوی راهنمایی و رانندگی انجام خواهید داد:

کد زیر را در جلسه 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)
در اینجا نحوه نمایش نتایج توسط نسخه آزمایشی آنلاین آورده شده است:

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

کد زیر را در جلسه 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
در اینجا نحوه نمایش نتایج توسط نسخه آزمایشی آنلاین آورده شده است:

خلاصه
در این مرحله، شما توانستید تشخیص نقاط برجسته را روی تصویری از برج ایفل انجام دهید. درباره تشخیص نقاط برجسته بیشتر بخوانید.
۷. تشخیص چهره را انجام دهید
تشخیص ویژگیهای چهره، چندین چهره را در یک تصویر به همراه ویژگیهای کلیدی چهره مرتبط مانند حالت عاطفی یا پوشیدن کلاه تشخیص میدهد.
در این مثال، شما چهرهها را در تصویر زیر تشخیص خواهید داد (با احترام از هیمانشو سینگ گورجار ):

کد زیر را در جلسه 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 --------------------------------------------------------------------------------
در اینجا نحوه نمایش نتایج توسط نسخه آزمایشی آنلاین آورده شده است:

خلاصه
در این مرحله، شما توانستید تشخیص چهره را انجام دهید. درباره تشخیص چهره بیشتر بخوانید.
۸. تشخیص اشیا را انجام دهید
در این مثال، شما تشخیص شیء را روی همان تصویر قبلی (با اجازه Alex Knight ) از Setagaya انجام خواهید داد:

کد زیر را در جلسه 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)
در اینجا نحوه نمایش نتایج توسط نسخه آزمایشی آنلاین آورده شده است:

خلاصه
در این مرحله، شما توانستید تشخیص شیء را انجام دهید. درباره تشخیص شیء بیشتر بخوانید.
۹. ویژگیهای چندگانه
شما نحوه استفاده از برخی از ویژگیهای 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)
و امکانات بیشتری نیز وجود دارد، مانند انجام تشخیص روی دستهای از تصاویر، به صورت همزمان یا غیرهمزمان. تمام راهنماهای آموزشی را بررسی کنید.
۱۰. تبریک میگویم!

شما یاد گرفتید که چگونه از 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
اطلاعات بیشتر
- نسخه آزمایشی آنلاین را در مرورگر خود آزمایش کنید: https://cloud.google.com/vision
- مستندات رابط برنامهنویسی کاربردی ویژن: https://cloud.google.com/vision/docs
- پایتون در گوگل کلود: https://cloud.google.com/python
- کتابخانههای کلاینت ابری برای پایتون: https://github.com/googleapis/google-cloud-python
مجوز
این اثر تحت مجوز عمومی Creative Commons Attribution 2.0 منتشر شده است.