Mendeteksi label, wajah, dan bangunan terkenal dalam gambar dengan Cloud Vision API

Cloud Vision API memungkinkan Anda memahami konten gambar dengan mengenkapsulasi model machine learning yang canggih dalam REST API sederhana.

Di lab ini, kita akan mengirim gambar ke Vision API dan melihat objek, wajah, dan tempat terkenal dideteksi.

Yang akan Anda pelajari

  • Membuat permintaan Vision API dan memanggil API menggunakan curl
  • Menggunakan metode deteksi label, web, wajah, dan tempat terkenal dari Vision API

Yang akan Anda butuhkan

  • Project Google Cloud Platform
  • Browser, seperti Chrome atau Firefox

Bagaimana Anda akan menggunakan tutorial ini?

Hanya membacanya Membacanya dan menyelesaikan latihan

Bagaimana penilaian Anda terhadap pengalaman dengan Google Cloud Platform?

Pemula Menengah Mahir

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:

Screenshot dari 2016-02-10 12:45:26.png

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 Konsol Cloud 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 APIs & services dari drop-down, lalu klik Dashboard

Klik Enable APIs and services.

Kemudian, telusuri "vision" di kotak penelusuran. Klik Google Cloud Vision API:

Klik Enable untuk mengaktifkan Cloud Vision API:

Tunggu beberapa detik hingga tombol diaktifkan. Anda akan melihat ini setelah diaktifkan:

Google Cloud Shell adalah lingkungan command line yang berjalan di Cloud. Mesin virtual berbasis Debian ini dilengkapi dengan semua alat pengembangan yang akan Anda perlukan (gcloud, bq, git, dan lainnya) serta menawarkan direktori beranda persisten sebesar 5 GB. Kita akan menggunakan Cloud Shell untuk membuat permintaan ke Speech API.

Untuk mulai menggunakan Cloud Shell, klik ikon "Activate Google Cloud Shell" Screen Shot 2015-06-08 at 5.30.32 PM.pngdi pojok kanan atas header bar

Sesi Cloud Shell akan terbuka di dalam frame baru di bagian bawah konsol dan menampilkan perintah command-line. Tunggu hingga perintah 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 di APIs & services di Konsol Cloud Anda:

Pada menu drop-down, pilih Kunci API:

Selanjutnya, salin kunci yang baru saja Anda buat.

Setelah memiliki kunci API, simpan kunci tersebut ke variabel lingkungan agar Anda tidak perlu memasukkan nilai kunci API Anda 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 mengirim 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. Kita akan menggunakan URL Cloud Storage. Kita akan membuat bucket Google Cloud Storage untuk menyimpan gambar.

Buka browser Storage di konsol Cloud untuk project Anda:

Kemudian, klik Buat bucket. Beri nama unik untuk bucket Anda (seperti Project ID Anda), lalu klik Create.

Mengupload gambar ke bucket Anda

Klik kanan gambar donat berikut, lalu klik Simpan gambar sebagai dan simpan ke folder Download Anda sebagai donuts.png.

Buka bucket yang baru saja Anda buat di browser penyimpanan, lalu klik Upload file. Kemudian, pilih donuts.png.

Anda akan melihat file di bucket Anda:

Selanjutnya, edit izin gambar.

Klik Tambahkan Item.

Tambahkan Entity baru Group, dan Name allUsers:

Klik Simpan.

Setelah memiliki file di bucket, Anda siap membuat permintaan Vision API, dengan meneruskan URL gambar donat ini.

Di lingkungan Cloud Shell, buat file request.json dengan kode di bawah, pastikan untuk mengganti my-bucket-name 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) tentang apa yang ada dalam gambar Anda.

Sekarang kita siap 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 ini (beignet), keren! Untuk setiap label yang ditemukan Vision API, API ini akan menampilkan description dengan nama item. Respons ini juga menampilkan score, angka dari 0 - 100 yang menunjukkan seberapa yakinnya bahwa deskripsi cocok dengan isi gambar. Nilai mid dipetakan ke mid item di Grafik Pengetahuan Google. Anda dapat menggunakan mid saat memanggil Knowledge Graph API untuk mendapatkan informasi selengkapnya tentang item.

Selain mendapatkan label tentang isi gambar, Vision API juga dapat menelusuri Internet untuk mendapatkan detail tambahan tentang gambar kita. Melalui metode webDetection API, kita mendapatkan banyak data menarik:

  • Daftar entitas yang ditemukan dalam gambar kami, berdasarkan konten dari halaman dengan gambar serupa
  • URL gambar yang cocok persis dan sebagian yang ditemukan di seluruh web, beserta URL halaman tersebut
  • URL gambar serupa, seperti melakukan penelusuran balik gambar

Untuk mencoba deteksi web, kita akan menggunakan gambar beignet yang sama dari atas, jadi yang perlu kita ubah hanyalah satu baris dalam file request.json (Anda juga dapat mencoba hal yang tidak diketahui dan menggunakan gambar yang sama sekali berbeda). Di bagian 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 tombol 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 responsnya, dimulai dengan webEntities. Berikut beberapa entity yang ditampilkan 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 dalam banyak presentasi tentang Cloud ML API kami, itulah sebabnya API menemukan entitas "Machine learning", "Google Cloud Platform", dan "Cloud computing".

Jika kita memeriksa URL di bagian fullMatchingImages, partialMatchingImages, dan pagesWithMatchingImages, kita akan melihat bahwa banyak URL mengarah ke situs codelab ini (sangat meta!).

Misalnya, kita ingin menemukan gambar beignet lainnya, tetapi bukan gambar yang sama persis. Di sinilah bagian visuallySimilarImages dari respons API akan 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 serupa:

Keren! Sekarang Anda mungkin benar-benar ingin beignet (maaf). Hal ini serupa dengan menelusuri berdasarkan 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.

Selanjutnya, kita akan mempelajari metode deteksi wajah dan tempat terkenal Vision API. Metode deteksi wajah menampilkan data tentang wajah yang ditemukan dalam gambar, termasuk emosi wajah dan lokasinya dalam gambar. Deteksi tempat terkenal dapat mengidentifikasi tempat terkenal umum (dan tidak jelas) - API ini menampilkan nama tempat terkenal, koordinat lintang bujurnya, dan lokasi tempat terkenal tersebut diidentifikasi dalam gambar.

Mengupload gambar baru

Untuk menggunakan dua metode baru ini, mari kita upload gambar baru dengan wajah dan penanda ke bucket Cloud Storage kita. Klik kanan gambar berikut, lalu klik Simpan gambar sebagai dan simpan ke folder Download Anda sebagai selfie.png.

Kemudian, upload ke bucket Cloud Storage dengan cara yang sama seperti yang Anda lakukan di langkah sebelumnya, pastikan untuk mencentang kotak "Bagikan secara publik".

Memperbarui permintaan kami

Selanjutnya, kita akan memperbarui file request.json untuk menyertakan URL gambar baru, dan menggunakan deteksi wajah dan penanda, bukan deteksi label. Pastikan untuk mengganti my-bucket-name dengan nama bucket Cloud Storage kita:

request.json

{
  "requests": [
      {
        "image": {
          "source": {
              "gcsImageUri": "gs://my-bucket-name/selfie.png"
          } 
        },
        "features": [
          {
            "type": "FACE_DETECTION"
          },
          {
            "type": "LANDMARK_DETECTION"
          }
        ]
      }
  ]
}

Memanggil Vision API dan mengurai respons

Sekarang Anda siap memanggil Vision API menggunakan perintah curl yang sama seperti 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 bahwa API menampilkan objek untuk setiap wajah yang ditemukan dalam gambar - dalam hal ini, tiga. Berikut adalah versi singkat dari respons kami:

{
      "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 memberi kita koordinat x,y di sekitar wajah dalam gambar. fdBoundingPoly adalah kotak yang lebih kecil daripada boundingPoly, yang mencakup bagian kulit wajah. landmarks adalah array objek untuk setiap fitur wajah (beberapa di antaranya mungkin belum Anda ketahui). Hal ini memberi tahu kita jenis penanda, beserta posisi 3D fitur tersebut (koordinat x,y,z) dengan koordinat z adalah kedalaman. Nilai yang tersisa memberi kita lebih banyak detail tentang wajah, termasuk kemungkinan ekspresi gembira, sedih, marah, dan terkejut. Objek di atas adalah untuk orang yang paling jauh di dalam gambar - Anda dapat melihat bahwa dia membuat ekspresi wajah yang agak konyol yang menjelaskan joyLikelihood dari POSSIBLE.

Selanjutnya, mari kita 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 foto ini diambil di Petra. Hal 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 tempat terkenal, namanya (description), beserta score keyakinan. boundingPoly menunjukkan region dalam gambar tempat tempat terkenal diidentifikasi. Kunci locations memberi tahu kita koordinat garis lintang dan bujur landmark ini.

Kita telah melihat metode deteksi label, wajah, dan bangunan terkenal Vision API, tetapi ada tiga metode lain yang belum kita pelajari. Pelajari dokumentasi 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 memiliki konten buatan pengguna. Anda dapat memfilter gambar berdasarkan empat faktor: konten dewasa, medis, kekerasan, dan spoof.
  • 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. Sebagai alternatif, Anda dapat meneruskan string berenkode base64 dari gambar Anda.

Yang telah kita bahas

  • Memanggil Vision API dengan curl dengan meneruskan URL gambar di bucket Cloud Storage
  • Menggunakan metode deteksi label, web, wajah, dan tempat terkenal Vision API

Langkah Berikutnya