1. ภาพรวม

Vision API ช่วยให้นักพัฒนาแอปสามารถผสานรวมฟีเจอร์การตรวจจับการมองเห็นไว้ภายในแอปพลิเคชันได้ง่ายๆ ซึ่งรวมถึงการติดป้ายกำกับรูปภาพ การตรวจจับใบหน้าและจุดสังเกต การรู้จำอักขระด้วยภาพ (OCR) และการติดแท็กเนื้อหาที่อาจไม่เหมาะสม
ในบทแนะนำนี้ คุณจะมุ่งเน้นที่การใช้ Vision API กับ Python
สิ่งที่คุณจะได้เรียนรู้
- วิธีตั้งค่าสภาพแวดล้อม
- วิธีตรวจหาป้ายกำกับ
- วิธีตรวจหาข้อความ
- วิธีตรวจหาจุดสังเกต
- วิธีตรวจจับใบหน้า
- วิธีตรวจหาวัตถุ
สิ่งที่คุณต้องมี
แบบสำรวจ
คุณจะใช้บทแนะนำนี้อย่างไร
คุณจะให้คะแนนประสบการณ์การใช้งาน Python เท่าใด
คุณจะให้คะแนนประสบการณ์การใช้งานบริการของ Google Cloud เท่าไร
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยทั่วไปจะระบุเป็น
PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณอาจลองใช้ชื่อของคุณเองและดูว่ามีชื่อนั้นหรือไม่ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้จะไม่มีค่าใช้จ่ายมากนัก หรืออาจไม่มีค่าใช้จ่ายเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะใช้งาน Google Cloud จากแล็ปท็อประยะไกลได้ แต่ใน Codelab นี้คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
เปิดใช้งาน Cloud Shell
- จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell


หากคุณเริ่มใช้ Cloud Shell เป็นครั้งแรก คุณจะเห็นหน้าจอระดับกลางที่อธิบายว่า Cloud Shell คืออะไร หากเห็นหน้าจอระดับกลาง ให้คลิกต่อไป

การจัดสรรและเชื่อมต่อกับ Cloud Shell จะใช้เวลาไม่นาน

เครื่องเสมือนนี้โหลดเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่จำเป็นไว้แล้ว โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานส่วนใหญ่หรือทั้งหมดในโค้ดแล็บนี้ได้ด้วยเบราว์เซอร์
เมื่อเชื่อมต่อกับ 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].
3. การตั้งค่าสภาพแวดล้อม
ก่อนที่จะเริ่มใช้ Vision API ได้ ให้เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อเปิดใช้ API
gcloud services enable vision.googleapis.com
คุณควรเห็นข้อความคล้ายกับข้อความต่อไปนี้
Operation "operations/..." finished successfully.
ตอนนี้คุณใช้ Vision API ได้แล้ว
ไปที่ไดเรกทอรีหลักโดยใช้คำสั่งต่อไปนี้
cd ~
สร้างสภาพแวดล้อมเสมือนของ Python เพื่อแยกการอ้างอิง
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 แล้ว
ในขั้นตอนถัดไป คุณจะใช้ตัวแปล Python แบบอินเทอร์แอกทีฟที่ชื่อ 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 รับรูปภาพอินพุตและแสดงป้ายกำกับที่มีแนวโน้มมากที่สุดซึ่งใช้กับรูปภาพนั้น โดยจะแสดงป้ายกำกับที่ตรงกันมากที่สุดพร้อมกับคะแนนความน่าเชื่อถือของการจับคู่กับรูปภาพ
ในตัวอย่างนี้ คุณจะทำการตรวจหาป้ายกำกับในรูปภาพ (ขอขอบคุณ Alex Knight) ของเซตากายะ ซึ่งเป็นย่านยอดนิยมในโตเกียว

คัดลอกโค้ดต่อไปนี้ลงในเซสชัน 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. ทำการตรวจหาจุดสังเกต
การตรวจหาจุดสังเกตจะตรวจหาสิ่งก่อสร้างทางธรรมชาติและที่มนุษย์สร้างขึ้นที่ได้รับความนิยมภายในรูปภาพ
ในตัวอย่างนี้ คุณจะทำการตรวจจับจุดสังเกตในรูปภาพหอไอเฟล (ขอขอบคุณ John Towner)

คัดลอกโค้ดต่อไปนี้ลงในเซสชัน 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. ทำการตรวจจับใบหน้า
การตรวจจับลักษณะใบหน้าจะตรวจจับใบหน้าหลายใบหน้าภายในรูปภาพพร้อมกับคุณลักษณะสำคัญที่เกี่ยวข้องของใบหน้า เช่น สภาวะทางอารมณ์หรือการสวมเครื่องประดับศีรษะ
ในตัวอย่างนี้ คุณจะตรวจจับใบหน้าในรูปภาพต่อไปนี้ (ขอขอบคุณ Himanshu Singh Gurjar)

คัดลอกโค้ดต่อไปนี้ลงในเซสชัน 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. ทำการตรวจจับออบเจ็กต์
ในตัวอย่างนี้ คุณจะทำการตรวจจับออบเจ็กต์ในรูปภาพก่อนหน้าเดียวกัน (ขอขอบคุณ Alex Knight) ของเซตากายะ

คัดลอกโค้ดต่อไปนี้ลงในเซสชัน 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 ด้วย Python และทดสอบฟีเจอร์การตรวจจับรูปภาพ 2-3 รายการแล้ว
ล้างข้อมูล
หากต้องการล้างข้อมูลสภาพแวดล้อมในการพัฒนา ให้ทำดังนี้จาก Cloud Shell
- หากยังอยู่ในเซสชัน IPython ให้กลับไปที่เชลล์โดยทำดังนี้
exit - หยุดใช้สภาพแวดล้อมเสมือนของ Python:
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
- Python ใน Google Cloud: https://cloud.google.com/python
- ไลบรารีของไคลเอ็นต์ Cloud สำหรับ Python: https://github.com/googleapis/google-cloud-python
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป