Advertisement
  1. Code
  2. Android SDK

Menggunakan Machine Learning untuk Mengenali Gambar Dengan IBM Watson

by
Read Time:9 minsLanguages:
This post is part of a series called IBM Watson Machine Learning.
Create Intelligent Chatbots on Android With IBM Watson
How to Code Natural Language Processing on Android With IBM Watson

Indonesian (Bahasa Indonesia) translation by Yanti Baddolo (you can also view the original English article)

Bukankah akan sangat baik jika aplikasi Android bisa melihat dan mengerti lingkungan sekitar?  Bisa kah Anda bayangkan bagaimana bagusnya tampilan pengguna aplikasi melihat penggunanya dan langsung bisa mengetahui umur, jenis kelamin dan emosi mereka? Aplikasi seperti mungkin terdengar futuristic, tapi itu bisa dilakukan saat ini.

Dengan layanan IBM Watson Visual Recognition, membuat aplikasi mobile yang dapat mendeteksi dan menganalisis objek dengan akurat pada gambar lebih mudah dari sebelumnya. Dalam tutorial ini, saya akan menunjukkan cara menggunakannya untuk membuat aplikasi Android cerdas yang bisa menebak umur dan jenis kelamin seseorang dan mengidentifikasi objek yang menonjol dalam sebuah foto.

Prasyarat

Untuk dapat mengikuti tutorial ini, Anda harus memiliki:

Mengaktifkan Layanan Visual Recognition

Seperti semua layanan Watson, layanan Visual Recognition juga harus diaktifkan secara manual sebelum dapat digunakan di aplikasi.  Jadi, masuklah ke konsol IBM Bluemix dan navigasikan ke Services > Watson. Di halaman yang terbuka, tekan tombol Create Watson service.

Watson home screenWatson home screenWatson home screen

Dari daftar layanan yang tersedia ditunjukkan di samping, pilih Visual Recognition.

Watson services catalogWatson services catalogWatson services catalog

Sekarang Anda bisa memberikan nama yang mudah dimengerti untuk layanan ini dan tekan tombol Create.

Visual Recognition service configurationVisual Recognition service configurationVisual Recognition service configuration

Setelah layanan siap, sebuah kunci API akan dihasilkan. Anda dapat melihatnya dengan membuka tab Service credentials dan menekan tombol View Credentials.

Credentials as a JSON documentCredentials as a JSON documentCredentials as a JSON document

Setup Proyek

Dalam tutorial ini, kita akan menggunakan SDK Watson Java dan Android saat berinteraksi dengan layanan Visual Recognition.  Kita juga akan menggunakan library Picasso untuk mengambil dan menampilkan gambar dari Internet. Oleh karena itu, tambahkan dependensi implementation  berikut ke file build.gradle modul app Anda:

Agar dapat berinteraksi dengan server Watson, aplikasi Anda memerlukan izin untuk akses ke INTERNET , jadi tambahkanlah untuk itu dalam file AndroidManifest.xml proyek Anda.

Selain itu, aplikasi yang akan kita buat hari ini memerlukan akses ke kamera perangkat dan media penyimpan eksternal, jadi Anda juga harus meminta izin akses ke CAMERA dan WRITE_EXTERNAL_STORAGE.

Terakhir, tambahkan kunci API layanan Visual Recognition Anda ke file strings.xml.

Menginisialisasi Klien Visual Recognition

SDK Watson Java memaparkan semua fitur layanan Visual Recognition yang ditawarkan melalui kelas VisualRecognition. Oleh karena itu, Anda sekarang seharusnya bisa menginisialisasi sebuah instance dengan menggunakan konstruktornya, yang mengharapkan tanggal versi dan kunci API sebagai argumennya.

Saat menggunakan layanan Visual Recognition, Anda biasanya ingin mengambil gambar dengan kamera perangkat. SDK Android Watson memiliki kelas CameraHelper untuk membantu Anda melakukannya.  Meskipun Anda tidak perlu melakukannya, saya sarankan Anda juga menginisialisasi sebuah instance di dalamnya dalam metode onCreate() activity Anda.

Pada titik ini, Anda memiliki semua yang Anda butuhkan untuk mulai menganalisis gambar dengan layanan ini.

4. Mendeteksi Objek

Layanan Visual Recognition dapat mendeteksi berbagai macam objek fisik. Sebagai masukan, kamera ini mengharapkan gambar yang cukup terang yang resolusinya setidaknya 224 x 224 piksel. Untuk saat ini, mari kita gunakan kamera perangkat untuk mengambil gambar seperti itu.

Langkah 1: Tentukan layout

Pengguna harus bisa menekan tombol untuk mengambil gambar, jadi file XML layout activity Anda harus memiliki widget Button. Ini juga harus memiliki widget TextView untuk mendaftarkan objek yang terdeteksi.

Opsional, Anda bisa menambahkan widget ImageView untuk menampilkan gambar.

Pada kode di atas kita telah menambahkan pengendali event on-click ke widget Button. Anda bisa mengenerate potongan kode untuk widget ini dalam kode dengan mengklik ikon bola lampu yang ditampilkan disampingnya.

Langkah 2: Mengambil Gambar

Anda dapat mengambil gambar hanya dengan memanggil metode dari objek CameraHelper, dispatchTakePictureIntent() jadi tambahkan kode berikut di dalam event handler:

Metode di atas menggunakan aplikasi default kamera perangkat untuk mengambil gambar.  Itu berarti mendapatkan akses ke gambar yang diambil, Anda harus mengganti metode activity onActivityResult() dan mencari hasil yang kode permintaannya adalah REQUEST_IMAGE_CAPTURE. Inilah cara melakukannya:

Setelah Anda menemukan hasil yang benar, Anda dapat mengekstrak gambar dari gambar dalam bentuk objek Bitmap  menggunakan metode getBitmap() dari kelas CameraHelper.  Anda juga bisa mendapatkan path absolut gambar menggunakan metode getFile(). Kita membutuhkan bitmap dan path absolut, jadi tambahkan kode berikut berikut ini:

Jika Anda memilih untuk menambahkan widget ImageView ke layout Anda, Anda dapat menampilkan gambar sekarang dengan langsung mengirimkan bitmap ke metode setImageBitmap() nya.

Langkah 3: Klasifikasikan Gambar

Untuk mendeteksi item dalam gambar, Anda harus mengirimkan gambar sebagai masukan ke metode classify() pada objek VisualRecognition. Sebelum melakukannya, Anda harus meletakannya di dalam objek ClassifyImagesOptions, yang dapat dibuat menggunakan kelas ClassifyImagesOptions.Builder .

Nilai return dari metode classify() adalah objek bernama ServiceCall, yang mendukung permintaan jaringan secara sinkronus dan asinkron.  Untuk saat ini, mari kita panggil metode execute() untuk melakukan permintaan secara sinkronus. Tentu saja, karena operasi jaringan tidak diperbolehkan di thread UI, Anda harus ingat untuk melakukannya dari thread baru.

Metode classify() dibangun untuk menangani banyak gambar sekaligus. Oleh karena itu, permintaannya adalah daftar rincian klasifikasi.  Karena saat ini kita bekerja hanya dengan satu gambar, kita hanya memerlukan item pertama dari daftar. Inilah cara Anda bisa mendapatkannya:

Layanan Visual Recognition memperlakukan setiap item yang dideteksi sebagai kelas terpisah dari tipe VisualClassifier.VisualClass. Dengan memanggil metode getClasses(), Anda bisa mendapatkan daftar semua kelas.

Setiap kelas memiliki, antara lain rincian, nama dan skor confidence yang terkait dengannya. Kode berikut menunjukkan cara melakukan perulangan pada daftar kelas dan menampilkan nama hanya mereka yang nilainya lebih besar dari 70% di widget TextView.

Perhatikan bahwa kode di atas menggunakan metode runOnUiThread() karena konten widget TextView hanya dapat diperbarui dari thread UI.

Jika Anda menjalankan aplikasi sekarang dan mengambil gambar, Anda akan dapat melihat klasifikasi gambar Watson bekerja.

Image classification resultImage classification resultImage classification result

Menganalisis Wajah

Layanan Visual Recognition memiliki metode khusus untuk memproses wajah manusia. Ini bisa menentukan umur dan jenis kelamin seseorang dalam foto apapun. Jika orang itu terkenal, bisa juga langsung menebaknya.

Langkah 1: Tentukan Layout

Menganalisis wajah dengan layanan Visual Recognition tidak terlalu berbeda dengan mengklasifikasi objek. Jadi Anda bebas untuk menggunakan kembali layout yang Anda buat tadi.  Namun, untuk mengenalkan Anda pada beberapa fitur yang ditawarkan layanan ini, saya akan membuat tata letak baru, yang satu ini memiliki fungsi yang sedikit berbeda.

Kali ini, alih-alih memotret menggunakan kamera dan mengirimkannya ke layanan, mari kita langsung mengirimkan sebuah URL gambar kedalamnya.  Agar pengguna mengetik URL dan memulai analisis, layout kita memerlukan widget EditText dan widget Button. Ini juga memerlukan widget TextView untuk menampilkan hasil analisis.

Saya sarankan Anda juga menambahkan widget ImageView ke layout sehingga pengguna dapat melihat gambar yang ditunjukkan URL.

Langkah 2: Menampilkan Gambar

Di dalam handler on-click widget Button, Anda dapat memanggil metode getText() dari widget EditText untuk menentukan URL gambar yang diketik pengguna. Setelah Anda mengetahui URLnya, Anda bisa langsung mengirimkannya ke metode load() dan into() Picasso untuk mendownload dan menampilkan gambar di widget ImageView.

Langkah 3: Jalankan Analisis Wajah

Untuk menjalankan analisis wajah pada URL, Anda harus menggunakan metode detectFaces() dari klien VisualRecognition. Sama seperti metode classify(), metode ini juga membutuhkan objek VisualRecognitionOptions sebagai inputnya.

Karena Anda sudah tahu cara menggunakan metode execute() untuk melakukan permintaan secara sinkronus, mari kita sekarang memanggil metode enqueue(), yang berjalan asinkronus dan membutuhkan sebuah callback. Kode berikut menunjukkan caranya:

Seperti yang dapat Anda lihat pada kode di atas, di dalam metode onResponse() dari objek callback, Anda memiliki akses ke objek DetectedFaces, yang berisi daftar hasil analisis wajah.  Karena kita menggunakan satu gambar sebagai masukan kita, kita hanya memerlukan item pertama dari daftar. Dengan memanggil metode getFaces() nya, Anda mendapatkan daftar semua objek face yang terdeteksi.

Setiap objek Face memiliki rentang jenis kelamin dan usia yang terkait dengannya, yang dapat diakses dengan memanggil metode getGender() dan getAge().

Metode getGender() sebenarnya mengembalikan objek Gender. Anda harus memanggil metode getGender() sendiri untuk mendapatkan jenis kelamin sebagai string, yang akan berupa "PRIA" atau "WANITA".  Demikian pula, method getAge() mengembalikan sebuah objek Age. Dengan memanggil metode getMin() dan getMax(), Anda dapat menentukan perkiraan usia wajah dalam tahun.

Kode berikut menunjukkan cara melakukan pengulangan pada daftar objek face, menghasilkan string yang mengandung jenis kelamin dan usia semua wajah, dan menampilkannya di widget TextView:

Berikut adalah contoh analisis wajah hasil:

Face analysis resultFace analysis resultFace analysis result

Kesimpulan

Layanan Pengenalan Visual Watson membuatnya sangat mudah bagi Anda untuk membuat aplikasi yang cerdas dan sadar akan lingkungan sekitar mereka. Dalam tutorial ini, Anda belajar bagaimana menggunakannya dengan SDK Watson Java dan Android untuk mendeteksi dan menganalisis objek generik dan wajah.

Untuk mempelajari lebih lanjut tentang layanan ini, Anda dapat merujuk ke dokumentasi resmi.

Dan pastikan untuk memeriksa beberapa posting kami yang lain tentang machine learning di Envato Tuts +!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.