Dengan Cloud Vision API, Anda dapat memahami konten gambar dengan merangkum model machine learning yang andal dalam REST API sederhana.
Di lab ini, kita akan mengirimkan gambar ke Vision API dan melihatnya mendeteksi objek, wajah, serta bangunan terkenal.
Yang akan Anda pelajari
- Membuat permintaan Vision API dan memanggil API dengan curl
- Menggunakan metode deteksi label, web, wajah, dan bangunan terkenal dari Vision API
Semua membutuhkan Anda
Bagaimana Anda akan menggunakan tutorial ini?
Bagaimana penilaian Anda terhadap pengalaman dengan Google Cloud Platform?
Penyiapan lingkungan mandiri
Jika belum memiliki Akun Google (Gmail atau Google Apps), Anda harus membuatnya. Login ke Google Cloud Platform console (console.cloud.google.com) dan buat project baru:
Ingat project ID, nama unik di semua project Google Cloud (maaf, nama di atas telah digunakan dan tidak akan berfungsi untuk Anda!) Project ID tersebut selanjutnya akan dirujuk di codelab ini sebagai PROJECT_ID
.
Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan resource Google Cloud.
Menjalankan melalui codelab ini tidak akan menghabiskan biaya lebih dari beberapa dolar, tetapi bisa lebih jika Anda memutuskan untuk menggunakan lebih banyak resource atau jika Anda membiarkannya berjalan (lihat bagian "pembersihan" di akhir dokumen ini).
Pengguna baru Google Cloud Platform memenuhi syarat untuk mendapatkan uji coba gratis senilai$300.
Klik ikon menu di kiri atas layar.
Pilih API & services dari drop-down, lalu klik Dashboard
Klik Aktifkan API dan layanan.
Kemudian, telusuri "vision" di kotak penelusuran. Klik Google Cloud Vision API:
Klik Enable untuk mengaktifkan Cloud Vision API:
Tunggu beberapa detik hingga perangkat diaktifkan. Anda akan melihat ini setelah diaktifkan:
Google Cloud Shell adalah lingkungan command line yang berjalan di Cloud. Mesin virtual berbasis Debian ini memuat semua alat pengembangan yang akan Anda perlukan (gcloud
, bq
, git
, dan lainnya) dan menawarkan direktori home persisten sebesar 5 GB. Kami akan menggunakan Cloud Shell untuk membuat permintaan ke Speech API.
Untuk memulai Cloud Shell, Klik ikon "Aktifkan Google Cloud Shell" di pojok kanan atas kolom header
Sesi Cloud Shell akan terbuka di dalam frame baru di bagian bawah konsol dan menampilkan perintah command-line. Tunggu hingga permintaan user@project:~$ muncul
Karena kita akan menggunakan curl untuk mengirim permintaan ke Vision API, kita perlu membuat kunci API untuk meneruskan URL permintaan kita. Untuk membuat kunci API, buka bagian Kredensial dalam API &layanan di Cloud Console Anda:
Pada menu drop-down, pilih Kunci API:
Selanjutnya, salin kunci yang baru saja Anda buat.
Setelah Anda memiliki kunci API, simpan kunci tersebut ke variabel lingkungan agar Anda tidak perlu memasukkan nilai kunci API dalam setiap permintaan. Anda dapat melakukannya di Cloud Shell. Pastikan untuk mengganti <your_api_key>
dengan kunci yang baru saja Anda salin.
export API_KEY=<YOUR_API_KEY>
Membuat bucket Cloud Storage
Ada dua cara untuk mengirimkan gambar ke Vision API untuk deteksi gambar: dengan mengirimkan string gambar berenkode base64 ke API, atau meneruskan URL file yang disimpan di Google Cloud Storage kepadanya. Kita akan menggunakan URL Cloud Storage. Kita akan membuat bucket Google Cloud Storage untuk menyimpan gambar.
Buka browser Storage di Cloud Console untuk project Anda:
Selanjutnya, klik Buat bucket. Beri nama yang unik pada bucket Anda (seperti ID Project), lalu klik Buat.
Mengupload gambar ke bucket
Klik kanan gambar donat berikut, lalu klik Save image as dan simpan ke folder Downloads sebagai donuts.png.
Buka bucket yang baru saja Anda buat di browser penyimpanan, lalu klik Upload file. Lalu, pilih donat.png.
Anda akan melihat file tersebut di bucket:
Selanjutnya, edit izin gambar.
Klik Add Item.
Tambahkan Entitas baru Group
, dan Nama allUsers
:
Klik Simpan.
Setelah Anda memiliki file di bucket, Anda siap membuat permintaan Vision API, meneruskan URL gambar donat ini.
Di lingkungan Cloud Shell Anda, buat file request.json
dengan kode di bawah, pastikan untuk mengganti nama-bucket-saya dengan nama bucket Cloud Storage yang Anda buat. Anda dapat membuat file menggunakan salah satu editor command line pilihan Anda (nano, vim, emacs) atau menggunakan editor Orion bawaan di Cloud Shell:
request.json
{
"requests": [
{
"image": {
"source": {
"gcsImageUri": "gs://my-bucket-name/donuts.png"
}
},
"features": [
{
"type": "LABEL_DETECTION",
"maxResults": 10
}
]
}
]
}
Fitur Cloud Vision API pertama yang akan kita pelajari adalah deteksi label. Metode ini akan menampilkan daftar label (kata) dari yang ada dalam gambar Anda.
Sekarang kita siap untuk memanggil Vision API dengan curl:
curl -s -X POST -H "Content-Type: application/json" --data-binary @request.json https://vision.googleapis.com/v1/images:annotate?key=${API_KEY}
Respons Anda akan terlihat seperti berikut:
{
"responses": [
{
"labelAnnotations": [
{
"mid": "/m/01dk8s",
"description": "powdered sugar",
"score": 0.9436922
},
{
"mid": "/m/01wydv",
"description": "beignet",
"score": 0.7160288
},
{
"mid": "/m/06_dn",
"description": "snow",
"score": 0.71219236
},
{
"mid": "/m/02wvn_6",
"mid": "/m/0bp3f6m",
"description": "fried food",
"score": 0.7075312
},
{
"mid": "/m/02wvn_6",
"description": "ricciarelli",
"score": 0.5625
},
{
"mid": "/m/052lwg6",
"description": "baked goods",
"score": 0.53270763
}
]
}
]
}
API dapat mengidentifikasi jenis donat tertentu (beignet), keren! Untuk setiap label yang ditemukan Vision API, atribut ini menampilkan description
dengan nama item. Ini juga menampilkan score
, angka dari 0 - 100 yang menunjukkan seberapa yakin deskripsi cocok dengan konten yang ada dalam gambar. Nilai mid
dipetakan ke bagian tengah item di Grafik Pengetahuan Google. Anda dapat menggunakan mid
saat memanggil Knowledge Graph API untuk mendapatkan informasi selengkapnya tentang item.
Selain mendapatkan label pada gambar yang ada dalam gambar kami, Vision API juga dapat menelusuri internet untuk detail tambahan tentang gambar. Melalui metode webDetection
API, kami mendapatkan kembali banyak data menarik:
- Daftar entitas yang ditemukan di gambar kami, berdasarkan konten dari halaman dengan gambar yang serupa
- URL dari gambar yang sama persis dan sebagian yang ditemukan di seluruh web, bersama dengan URL halaman tersebut
- URL gambar yang serupa, seperti melakukan penelusuran gambar terbalik
Untuk mencoba deteksi web, kita akan menggunakan gambar beignet yang sama dari atas sehingga yang perlu kita ubah hanyalah satu baris di file request.json
(Anda juga dapat menjelajah ke hal yang tidak dikenal dan menggunakan gambar yang benar-benar berbeda). Di bawah daftar fitur, cukup ubah jenis dari LABEL_DETECTION
menjadi WEB_DETECTION
. request.json
sekarang akan terlihat seperti ini:
request.json
{
"requests": [
{
"image": {
"source": {
"gcsImageUri": "gs://my-bucket-name/donuts.png"
}
},
"features": [
{
"type": "WEB_DETECTION",
"maxResults": 10
}
]
}
]
}
Untuk mengirimkannya ke Vision API, Anda dapat menggunakan perintah curl yang sama seperti sebelumnya (cukup tekan panah atas di Cloud Shell):
curl -s -X POST -H "Content-Type: application/json" --data-binary @request.json https://vision.googleapis.com/v1/images:annotate?key=${API_KEY}
Mari kita bahas jawabannya, dimulai dengan webEntities
. Berikut beberapa entitas yang ditampilkan oleh gambar ini:
"webEntities": [
{
"entityId": "/m/01hyh_",
"score": 0.7155,
"description": "Machine learning"
},
{
"entityId": "/m/01wydv",
"score": 0.48758492,
"description": "Beignet"
},
{
"entityId": "/m/0105pbj4",
"score": 0.3976,
"description": "Google Cloud Platform"
},
{
"entityId": "/m/02y_9m3",
"score": 0.3782,
"description": "Cloud computing"
},
...
]
Gambar ini telah digunakan kembali di banyak presentasi pada Cloud ML API kami. Itulah sebabnya API menemukan entity "Machine learning," "Google Cloud Platform," dan "Cloud computing".
Jika kita melibatkan URL ke dalam fullMatchingImages
, partialMatchingImages
, dan pagesWithMatchingImages
, kita akan melihat bahwa banyak dari URL tersebut mengarah ke situs codelab ini (meta super!).
Misalnya, kita ingin menemukan gambar beignet lainnya, tetapi bukan gambar yang sama persis. Di situlah bagian visuallySimilarImages
dari respons API sangat berguna. Berikut beberapa gambar yang mirip secara visual yang ditemukan:
"visuallySimilarImages": [
{
"url": "https://igx.4sqi.net/img/general/558x200/21646809_fe8K-bZGnLLqWQeWruymGEhDGfyl-6HSouI2BFPGh8o.jpg"
},
{
"url": "https://spoilednyc.com//2016/02/16/beignetszzzzzz-852.jpg"
},
{
"url": "https://img-global.cpcdn.com/001_recipes/a66a9a6fc2696648/1200x630cq70/photo.jpg"
},
...
]
Kita dapat membuka URL tersebut untuk melihat gambar yang serupa:
Keren! Dan sekarang Anda mungkin benar-benar menginginkan beignet (maaf). Proses ini mirip dengan penelusuran gambar di Google Gambar:
Namun dengan Cloud Vision, kita dapat mengakses fungsi ini dengan REST API yang mudah digunakan dan mengintegrasikannya ke dalam aplikasi kita.
Berikutnya, kita akan mempelajari metode deteksi wajah dan tempat terkenal pada Vision API. Metode deteksi wajah menampilkan data pada wajah yang ditemukan di gambar, termasuk emosi wajah dan lokasinya dalam gambar. Deteksi tempat terkenal dapat mengidentifikasi tempat terkenal (dan tidak jelas) - tempat tersebut menampilkan nama tempat terkenal tersebut, koordinat bujur lintangnya, dan lokasi tempat tersebut dikenali dalam gambar.
Upload gambar baru
Untuk menggunakan kedua metode baru ini, upload gambar baru yang berisi wajah dan bangunan terkenal ke bucket Cloud Storage. Klik kanan gambar berikut, lalu klik Simpan gambar sebagai dan simpan ke folder Download sebagai selfie.png.
Kemudian, upload file tersebut ke bucket Cloud Storage dengan cara yang sama seperti yang Anda lakukan di langkah sebelumnya. Pastikan Anda mencentang kotak centang "Bagikan ke publik".
Memperbarui permintaan kami
Selanjutnya, kita akan memperbarui file request.json
untuk menyertakan URL gambar baru, dan menggunakan deteksi wajah dan tempat terkenal, bukan deteksi label. Pastikan untuk mengganti nama-bucket-saya dengan nama bucket Cloud Storage kami:
request.json
{
"requests": [
{
"image": {
"source": {
"gcsImageUri": "gs://my-bucket-name/selfie.png"
}
},
"features": [
{
"type": "FACE_DETECTION"
},
{
"type": "LANDMARK_DETECTION"
}
]
}
]
}
Memanggil Vision API dan menguraikan respons
Sekarang Anda siap untuk memanggil Vision API menggunakan perintah curl yang sama dengan yang Anda gunakan di atas:
curl -s -X POST -H "Content-Type: application/json" --data-binary @request.json https://vision.googleapis.com/v1/images:annotate?key=${API_KEY}
Mari kita lihat objek faceAnnotations
dalam respons kita terlebih dahulu. Anda akan melihat API menampilkan objek untuk setiap wajah yang ditemukan dalam gambar - dalam hal ini, tiga. Berikut ini versi jawaban yang terpotong:
{
"faceAnnotations": [
{
"boundingPoly": {
"vertices": [
{
"x": 669,
"y": 324
},
...
]
},
"fdBoundingPoly": {
...
},
"landmarks": [
{
"type": "LEFT_EYE",
"position": {
"x": 692.05646,
"y": 372.95868,
"z": -0.00025268539
}
},
...
],
"rollAngle": 0.21619819,
"panAngle": -23.027969,
"tiltAngle": -1.5531756,
"detectionConfidence": 0.72354823,
"landmarkingConfidence": 0.20047489,
"joyLikelihood": "POSSIBLE",
"sorrowLikelihood": "VERY_UNLIKELY",
"angerLikelihood": "VERY_UNLIKELY",
"surpriseLikelihood": "VERY_UNLIKELY",
"underExposedLikelihood": "VERY_UNLIKELY",
"blurredLikelihood": "VERY_UNLIKELY",
"headwearLikelihood": "VERY_LIKELY"
}
...
}
}
boundingPoly
memberikan koordinat x,y di sekitar wajah dalam gambar. fdBoundingPoly
adalah kotak yang lebih kecil dari boundingPoly
, yang menutupi bagian kulit wajah. landmarks
adalah array objek untuk setiap fitur wajah (beberapa di antaranya mungkin tidak Anda ketahui). Ini akan memberi tahu kita jenis tempat terkenal, beserta posisi 3D fitur tersebut (koordinat x,y,z) dengan koordinat z adalah kedalaman. Nilai yang tersisa memberi kita detail selengkapnya tentang wajah, termasuk kemungkinan kebahagiaan, kesedihan, kemarahan, dan kejutan. Objek di atas adalah untuk orang yang terjauh di dalam gambar - Anda dapat melihat dia membuat wajah konyol yang menjelaskan joyLikelihood
dari POSSIBLE
.
Berikutnya, mari lihat bagian landmarkAnnotations
dari respons kita:
"landmarkAnnotations": [
{
"mid": "/m/0c7zy",
"description": "Petra",
"score": 0.5403372,
"boundingPoly": {
"vertices": [
{
"x": 153,
"y": 64
},
...
]
},
"locations": [
{
"latLng": {
"latitude": 30.323975,
"longitude": 35.449361
}
}
]
Di sini, Vision API dapat mengetahui bahwa gambar ini diambil di Petra - ini cukup mengesankan mengingat petunjuk visual dalam gambar ini sangat minim. Nilai dalam respons ini akan terlihat mirip dengan respons labelAnnotations
di atas.
Kita mendapatkan mid
bangunan terkenal, namanya (description
), bersama dengan score
yang meyakinkan. boundingPoly
menunjukkan wilayah pada gambar tempat bangunan terkenal diidentifikasi. Kunci locations
memberi tahu kita koordinat bujur lintang bangun terkenal ini.
Kami telah melihat metode deteksi label, wajah, dan tempat terkenal Vision API, tetapi ada tiga hal lain yang belum kami jelajahi. Dalami dokumen untuk mempelajari tiga lainnya:
- Deteksi logo: mengidentifikasi logo umum dan lokasinya dalam gambar.
- Deteksi penelusuran aman: menentukan apakah gambar berisi konten vulgar atau tidak. Hal ini berguna untuk aplikasi apa pun yang berisi konten buatan pengguna. Anda dapat memfilter gambar berdasarkan empat faktor: konten dewasa, medis, kekerasan, dan spoofing.
- Deteksi teks: jalankan OCR untuk mengekstrak teks dari gambar. Metode ini bahkan dapat mengidentifikasi bahasa teks yang ada dalam gambar.
Anda telah mempelajari cara menganalisis gambar dengan Vision API. Dalam contoh ini, Anda meneruskan URL Google Cloud Storage gambar Anda ke API. Atau, Anda dapat meneruskan string yang dienkode base64 gambar Anda.
Yang telah kita bahas
- Memanggil Vision API dengan curl dengan meneruskan URL gambar dalam bucket Cloud Storage
- Menggunakan metode deteksi visual, web, wajah, dan tempat terkenal Vision API
Langkah Berikutnya
- Lihat tutorial Vision API di dokumentasi
- Temukan sampel Vision API dalam bahasa favorit Anda
- Cobalah codelab Speech API dan Natural Language API!