1. بررسی اجمالی
Vision API به توسعه دهندگان اجازه می دهد تا به راحتی ویژگی های تشخیص بینایی را در برنامه ها ادغام کنند، از جمله برچسب گذاری تصویر، تشخیص چهره و نقطه عطف، تشخیص نوری کاراکتر (OCR)، و برچسب گذاری محتوای صریح.
در این آموزش، شما بر روی استفاده از Vision API با پایتون تمرکز خواهید کرد.
چیزی که یاد خواهید گرفت
- چگونه محیط خود را تنظیم کنیم
- نحوه انجام تشخیص برچسب
- نحوه انجام تشخیص متن
- نحوه انجام تشخیص نقطه عطف
- نحوه انجام تشخیص چهره
- نحوه انجام تشخیص اشیا
آنچه شما نیاز دارید
نظرسنجی
چگونه از این آموزش استفاده خواهید کرد؟
تجربه خود را با پایتون چگونه ارزیابی می کنید؟
تجربه خود را با خدمات Google Cloud چگونه ارزیابی می کنید؟
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. همیشه می توانید آن را به روز کنید.
- شناسه پروژه در تمام پروژههای Google Cloud منحصربهفرد است و تغییرناپذیر است (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید شناسه پروژه خود را ارجاع دهید (معمولاً با نام
PROJECT_ID
شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، میتوانید خودتان را امتحان کنید، و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند. - برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه ، که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه هزینه زیادی نخواهد داشت. برای خاموش کردن منابع برای جلوگیری از تحمیل صورتحساب فراتر از این آموزش، میتوانید منابعی را که ایجاد کردهاید حذف کنید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Cloud Shell را راه اندازی کنید
در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.
Cloud Shell را فعال کنید
- از Cloud Console، روی Activate Cloud Shell کلیک کنید .
اگر این اولین باری است که Cloud Shell را راه اندازی می کنید، با یک صفحه میانی روبرو می شوید که آن را توصیف می کند. اگر با یک صفحه میانی مواجه شدید، روی Continue کلیک کنید.
تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.
این ماشین مجازی با تمام ابزارهای توسعه مورد نیاز بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی ارائه میکند و در Google Cloud اجرا میشود، که عملکرد و احراز هویت شبکه را بسیار افزایش میدهد. بسیاری از کارهای شما، اگر نه همه، در این کد لبه با مرورگر قابل انجام است.
پس از اتصال به Cloud Shell، باید ببینید که احراز هویت شده اید و پروژه به ID پروژه شما تنظیم شده است.
- برای تایید احراز هویت، دستور زیر را در 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].
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، منطقه ای محبوب در توکیو (با اجازه الکس نایت ) انجام خواهید داد:
کد زیر را در جلسه 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
در اینجا نحوه ارائه نتایج توسط دمو آنلاین آمده است:
خلاصه
در این مرحله، شما قادر به شناسایی برچسب روی یک تصویر و نمایش محتمل ترین برچسب های مرتبط با آن تصویر هستید. درباره تشخیص برچسب بیشتر بخوانید.
5. تشخیص متن را انجام دهید
تشخیص متن، تشخیص کاراکتر نوری (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)
در اینجا نحوه ارائه نتایج توسط دمو آنلاین آمده است:
خلاصه
در این مرحله قادر به تشخیص متن روی یک تصویر و نمایش متن شناسایی شده از تصویر هستید. درباره تشخیص متن بیشتر بخوانید.
6. تشخیص نقطه عطف را انجام دهید
تشخیص نقطه عطف، ساختارهای طبیعی و مصنوعی محبوب را در یک تصویر تشخیص می دهد.
در این مثال، شما تشخیص نقطه عطفی را بر روی تصویری از برج ایفل انجام خواهید داد:
کد زیر را در جلسه 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
در اینجا نحوه ارائه نتایج توسط دمو آنلاین آمده است:
خلاصه
در این مرحله، شما قادر به تشخیص نقطه عطفی بر روی تصویری از برج ایفل هستید. درباره تشخیص نقطه عطف بیشتر بخوانید.
7. تشخیص چهره را انجام دهید
تشخیص ویژگیهای صورت، چندین چهره را در یک تصویر به همراه ویژگیهای کلیدی چهره مانند حالت احساسی یا پوشیدن لباس سر شناسایی میکند.
در این مثال، شما چهرهها را در تصویر زیر تشخیص میدهید (به لطف هیمانشو سینگ گورجار ):
کد زیر را در جلسه 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 --------------------------------------------------------------------------------
در اینجا نحوه ارائه نتایج توسط دمو آنلاین آمده است:
خلاصه
در این مرحله توانستید تشخیص چهره را انجام دهید. درباره تشخیص چهره بیشتر بخوانید.
8. تشخیص شی را انجام دهید
در این مثال، شما تشخیص شی را بر روی همان تصویر قبلی (از نظر الکس نایت ) از 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)
در اینجا نحوه ارائه نتایج توسط دمو آنلاین آمده است:
خلاصه
در این مرحله شما قادر به تشخیص شیء هستید. درباره تشخیص اشیا بیشتر بخوانید.
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. تبریک می گویم!
شما یاد گرفتید که چگونه از 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
- اسناد Vision API: https://cloud.google.com/vision/docs
- پایتون در Google Cloud: https://cloud.google.com/python
- کتابخانه های کلاود کلاینت برای پایتون: https://github.com/googleapis/google-cloud-python
مجوز
این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.