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 ของระบบคลาวด์ การใช้งาน Codelab นี้จะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินที่นอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud ใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรี$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Cloud Shell ใน Codelab ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
เปิดใช้งาน Cloud Shell
- คลิกเปิดใช้งาน Cloud Shell จาก Cloud Console
หากเริ่มต้นใช้งาน Cloud Shell เป็นครั้งแรก คุณจะเห็นหน้าจอตรงกลางที่อธิบายว่านี่คืออะไร หากระบบแสดงหน้าจอตรงกลาง ให้คลิกต่อไป
การจัดสรรและเชื่อมต่อกับ Cloud Shell ใช้เวลาเพียงไม่กี่นาที
เครื่องเสมือนนี้โหลดด้วยเครื่องมือการพัฒนาทั้งหมดที่จำเป็น โดยมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานส่วนใหญ่ใน Codelab นี้สามารถทำได้โดยใช้เบราว์เซอร์
เมื่อเชื่อมต่อกับ 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 เพื่อแยกทรัพยากร Dependency ต่อไปนี้
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) ของ 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. ดำเนินการตรวจหาจุดสังเกต
การตรวจจับจุดสังเกตจะตรวจหาโครงสร้างตามธรรมชาติและที่มนุษย์สร้างขึ้นยอดนิยมภายในรูปภาพ
ในตัวอย่างนี้ คุณจะดำเนินการตรวจหาจุดสังเกตในรูปภาพ (ได้รับความเอื้อเฟื้อจาก 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) จาก 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 กับ Python และทดสอบฟีเจอร์การตรวจจับรูปภาพแล้ว
ล้างข้อมูล
หากต้องการล้างสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ ให้ดำเนินการดังนี้จาก Cloud Shell
- หากคุณยังอยู่ในเซสชัน IPython ให้กลับไปที่ Shell:
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
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0