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

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

  • 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 10-02-2016 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 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" Tangkapan Layar 08-06-2015 pukul 17.30.32.pngdi 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