Menggunakan Vision API dengan Python

1. Ringkasan

5ab7829fc22b21c4.pngS

Vision API memungkinkan developer mengintegrasikan fitur deteksi visi dalam aplikasi dengan mudah, termasuk pelabelan gambar, deteksi wajah dan struktur, pengenalan karakter optik (OCR), dan pemberian tag konten vulgar.

Dalam tutorial ini, Anda akan berfokus pada penggunaan Vision API dengan Python.

Yang akan Anda pelajari

  • Cara menyiapkan lingkungan Anda
  • Cara melakukan deteksi label
  • Cara melakukan deteksi teks
  • Cara melakukan deteksi tempat terkenal
  • Cara melakukan deteksi wajah
  • Cara melakukan deteksi objek

Yang Anda butuhkan

  • Project Google Cloud
  • Browser, seperti Chrome atau Firefox
  • Pemahaman dalam menggunakan Python

Survei

Bagaimana Anda akan menggunakan tutorial ini?

Hanya membacanya Membacanya dan menyelesaikan latihan

Bagaimana penilaian Anda terhadap pengalaman dengan Python?

Pemula Menengah Mahir

Bagaimana Anda menilai pengalaman Anda dengan layanan Google Cloud?

Pemula Menengah Mahir

2. Penyiapan dan persyaratan

Penyiapan lingkungan mandiri

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
  • Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project.
  • Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Mulai Cloud Shell

Meskipun Google Cloud dapat dioperasikan secara jarak jauh dari laptop Anda, dalam codelab ini Anda akan menggunakan Cloud Shell, yakni lingkungan command line yang berjalan di Cloud.

Mengaktifkan Cloud Shell

  1. Dari Cloud Console, klik Aktifkan Cloud Shell 853e55310c205094.pngS.

55efc1aaa7a4d3ad.png

Jika ini pertama kalinya Anda memulai Cloud Shell, Anda akan melihat layar perantara yang menjelaskan apa itu Cloud Shell. Jika Anda melihat layar perantara, klik Lanjutkan.

9c92662c6a846a5c.pngS

Perlu waktu beberapa saat untuk penyediaan dan terhubung ke Cloud Shell.

9f0e51b578fecce5.pngS

Mesin virtual ini dimuat dengan semua alat pengembangan yang diperlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda dalam codelab ini dapat dilakukan dengan browser.

Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda telah diautentikasi dan project sudah ditetapkan ke project ID Anda.

  1. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list

Output perintah

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

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda:
gcloud config list project

Output perintah

[core]
project = <PROJECT_ID>

Jika tidak, Anda dapat menyetelnya dengan perintah ini:

gcloud config set project <PROJECT_ID>

Output perintah

Updated property [core/project].

3. Penyiapan lingkungan

Sebelum dapat mulai menggunakan Vision API, jalankan perintah berikut di Cloud Shell untuk mengaktifkan API:

gcloud services enable vision.googleapis.com

Anda akan melihat sesuatu seperti ini:

Operation "operations/..." finished successfully.

Sekarang, Anda dapat menggunakan Vision API.

Buka direktori utama Anda:

cd ~

Buat lingkungan virtual Python untuk mengisolasi dependensi:

virtualenv venv-vision

Aktifkan lingkungan virtual:

source venv-vision/bin/activate

Instal IPython dan library klien Vision API:

pip install ipython google-cloud-vision

Anda akan melihat sesuatu seperti ini:

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

Sekarang, Anda siap untuk menggunakan library klien Vision API.

Pada langkah berikutnya, Anda akan menggunakan penafsir Python interaktif yang disebut IPython, yang Anda instal di langkah sebelumnya. Mulai sesi dengan menjalankan ipython di Cloud Shell:

ipython

Anda akan melihat sesuatu seperti ini:

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]:

Anda siap membuat permintaan pertama Anda...

4. Lakukan deteksi label

Salah satu fitur inti Vision API adalah mengidentifikasi objek atau entitas dalam gambar, yang dikenal sebagai anotasi label. Deteksi label mengidentifikasi objek umum, lokasi, aktivitas, spesies hewan, produk, dan lain-lain. Vision API mengambil gambar input dan menampilkan label yang paling mungkin untuk diterapkan pada gambar tersebut. Fitur ini menampilkan label yang paling cocok beserta skor keyakinan kecocokannya dengan gambar.

Dalam contoh ini, Anda akan melakukan deteksi label pada gambar (milik Alex Knight) Setagaya, sebuah distrik populer di Tokyo:

756f97f0b1e46c38.jpeg

Salin kode berikut ke dalam sesi 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=" | ",
        )
        

Luangkan waktu untuk mempelajari kode tersebut dan lihat cara kode tersebut menggunakan metode library klien annotate_image dalam menganalisis gambar untuk sekumpulan fitur tertentu.

Mengirim permintaan dengan fitur 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)

Output Anda akan terlihat seperti berikut:

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

Berikut adalah cara hasil disajikan melalui demo online:

2191b0425c9c148f.pngS

Ringkasan

Pada langkah ini, Anda dapat melakukan deteksi label pada sebuah gambar dan menampilkan label yang paling mungkin terkait dengan gambar tersebut. Baca selengkapnya tentang deteksi label.

5. Lakukan deteksi teks

Deteksi teks melakukan Pengenalan Karakter Optik (OCR). Alat ini mendeteksi dan mengekstrak teks dalam gambar dengan dukungan untuk berbagai bahasa. Chromebook juga dilengkapi identifikasi bahasa otomatis.

Dalam contoh ini, Anda akan melakukan deteksi teks pada gambar rambu lalu lintas:

4dedd3fcfd9ad99b.jpeg

Salin kode berikut ke dalam sesi 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=" | ",
        )
        

Mengirim permintaan dengan fitur 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)

Output Anda akan terlihat seperti berikut:

================================================================================
'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)

Berikut adalah cara hasil disajikan melalui demo online:

9c70fbce871c5fe5.pngS

Ringkasan

Pada langkah ini, Anda dapat melakukan deteksi teks pada gambar dan menampilkan teks yang dikenali dari gambar. Baca selengkapnya tentang deteksi teks.

6. Melakukan deteksi tempat terkenal

Deteksi tempat terkenal mendeteksi struktur alami dan buatan manusia yang populer dalam sebuah gambar.

Dalam contoh ini, Anda akan melakukan deteksi tempat terkenal pada gambar (milik John Towner) Menara Eiffel:

fb7801e36884b875.jpeg

Salin kode berikut ke dalam sesi 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=" | ",
        )
        

Mengirim permintaan dengan fitur 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)

Output Anda akan terlihat seperti berikut:

================================================================================
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

Berikut adalah cara hasil disajikan melalui demo online:

2788697365670985.png

Ringkasan

Pada langkah ini, Anda dapat melakukan deteksi tempat terkenal pada gambar Menara Eiffel. Baca selengkapnya tentang deteksi landmark.

7. Lakukan deteksi wajah

Deteksi fitur wajah mendeteksi beberapa wajah dalam satu gambar beserta atribut wajah utama yang terkait, seperti kondisi emosi atau pemakaian aksesori kepala.

Dalam contoh ini, Anda akan mendeteksi wajah dalam gambar berikut (atas izin Himanshu Singh Gurjar):

58c578ece524cf32.jpeg

Salin kode berikut ke dalam sesi 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)
        

Mengirim permintaan dengan fitur 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)

Output Anda akan terlihat seperti berikut:

================================================================================
# 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
--------------------------------------------------------------------------------

Berikut adalah cara hasil disajikan melalui demo online:

cbb7f59299651b83.png

Ringkasan

Pada langkah ini, Anda dapat melakukan deteksi wajah. Baca selengkapnya tentang deteksi wajah.

8. Melakukan deteksi objek

Dalam contoh ini, Anda akan melakukan deteksi objek pada gambar sebelumnya yang sama (dari Alex Knight) dari Setagaya:

756f97f0b1e46c38.jpeg

Salin kode berikut ke dalam sesi 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=" | ",
        )
        

Mengirim permintaan dengan fitur 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)

Output Anda akan terlihat seperti berikut:

================================================================================
 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)

Berikut adalah cara hasil disajikan melalui demo online:

e1c2ca803d874a6b.png

Ringkasan

Pada langkah ini, Anda dapat melakukan deteksi objek. Baca selengkapnya tentang deteksi objek.

9. Berbagai fitur

Anda telah melihat cara menggunakan beberapa fitur Vision API, tetapi masih banyak lagi dan Anda dapat meminta beberapa fitur dalam satu permintaan.

Berikut jenis permintaan yang dapat Anda buat untuk mendapatkan semua wawasan sekaligus:

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)

Selain itu, ada lebih banyak kemungkinan, seperti melakukan deteksi pada sekumpulan gambar, secara sinkron atau asinkron. Lihat semua panduan cara kerja.

10. Selamat!

5ab7829fc22b21c4.pngS

Anda telah mempelajari cara menggunakan Vision API dengan Python dan menguji beberapa fitur deteksi gambar.

Pembersihan

Untuk membersihkan lingkungan pengembangan Anda, dari Cloud Shell:

  • Jika Anda masih berada dalam sesi IPython, kembali ke shell: exit
  • Berhenti menggunakan lingkungan virtual Python: deactivate
  • Hapus folder lingkungan virtual Anda: cd ~ ; rm -rf ./venv-vision

Untuk menghapus project Google Cloud Anda dari Cloud Shell:

  • Ambil project ID Anda saat ini: PROJECT_ID=$(gcloud config get-value core/project)
  • Pastikan project ini yang ingin Anda hapus: echo $PROJECT_ID
  • Hapus project: gcloud projects delete $PROJECT_ID

Pelajari Lebih Lanjut

Lisensi

Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.