Advertisement
  1. Code
  2. Coding Fundamentals
  3. Machine Learning

Cara Menggunakan API Google Cloud Vision di Aplikasi Android

Scroll to top
Read Time: 8 min

() translation by (you can also view the original English article)

Computer vision dianggap sebagai masalah AI. Dengan kata lain, pemecahannya akan setara dengan menciptakan sebuah program yang secerdas manusia. Tak perlu dikatakan, program semacam itu belum diciptakan.  Namun, jika Anda pernah menggunakan aplikasi seperti Google Goggles atau Google Foto-atau menonton segmen di Google Lens dalam keynote Google I / O 2017-Anda mungkin menyadari bahwa computer vision telah menjadi sangat kuat.

Melalui API berbasis REST yang disebut Cloud Vision API, Google berbagi teknologi revolusioner mereka dengan semua pengembang.  Dengan menggunakan API, Anda dapat menambahkan fitur mengesankan dengan mudah seperti deteksi wajah, deteksi emosi, dan pengenalan karakter optik ke aplikasi Android Anda. Dalam tutorial ini, saya akan menunjukkan caranya.

Prasyarat

Untuk dapat mengikuti tutorial ini, Anda harus memiliki:

Jika beberapa persyaratan di atas terdengar asing bagi Anda, sebaiknya Anda membaca tutorial pengantar berikut tentang platform Google Cloud Machine Learning:

1. Mengaktifkan API Cloud Vision

Anda dapat menggunakan API Cloud Vision di aplikasi Android hanya setelah mengaktifkannya di konsol Google Cloud dan memperoleh kunci API yang valid.  Jadi mulailah dengan masuk ke konsol dan navigasikan ke API Manager> Library> Vision API. Di halaman yang terbuka, cukup tekan tombol Enable.

Enable Cloud Vision APIEnable Cloud Vision APIEnable Cloud Vision API

Jika Anda telah membuat kunci API untuk proyek konsol Cloud Anda, Anda dapat melompat ke langkah berikutnya karena Anda dapat menggunakannya kembali dengan API Cloud Vision. Jika tidak, buka tab Kredensial dan pilih Buat Kredensial> tombol API.

Create API keyCreate API keyCreate API key

Pada dialog yang muncul, Anda akan melihat kunci API Anda.

2. Menambahkan Depedensi

Seperti kebanyakan API lain yang ditawarkan oleh Google, Cloud Vision API dapat diakses menggunakan pustaka Google API Client. Untuk menggunakan perpustakaan di proyek Android Studio Anda, tambahkan dependensi compile berikut di file build.gradle modul app:

1
compile 'com.google.api-client:google-api-client-android:1.22.0'
2
compile 'com.google.apis:google-api-services-vision:v1-rev357-1.22.0'
3
compile 'com.google.code.findbugs:jsr305:2.0.1'

Selanjutnya, untuk menyederhanakan operasi file I / O, saya sarankan Anda juga menambahkan ketergantungan compile untuk perpustakaan Apache Commons IO.

1
compile 'commons-io:commons-io:2.5'

Karena Klien Google API dapat bekerja hanya jika aplikasi Anda memiliki izin INTERNET, pastikan baris berikut ada dalam file manifest proyek Anda:

1
<uses-permission android:name="android.permission.INTERNET"/>

3. Mengkonfigurasi Klien API

Anda harus mengonfigurasi klien Google API sebelum menggunakannya untuk berinteraksi dengan API Cloud Vision. Melakukannya terutama melibatkan menentukan kunci API, transport HTTP, dan JSON factory yang seharusnya digunakan.  Seperti yang Anda duga, transport HTTP akan bertanggung jawab untuk berkomunikasi dengan server Google, dan JSON factory akan, antara lain, bertanggung jawab untuk mengubah hasil berbasis JSON yang dihasilkan API menjadi objek Java. 

Untuk aplikasi Android modern, Google menyarankan agar Anda menggunakan kelas NetHttpTransport sebagai transport HTTP dan kelas AndroidJsonFactory sebagai JSON factory.

Kelas Vision mewakili Klien Google API untuk Cloud Vision. Meskipun dimungkinkan untuk membuat instance dari kelas menggunakan konstruktornya, melakukannya dengan menggunakan kelas Vision.Builder sebagai gantinya lebih mudah dan lebih fleksibel.

Saat menggunakan kelas Vision.Builder, Anda harus ingat untuk memanggil metode setVisionRequestInitializer() untuk menentukan kunci API Anda. Kode berikut menunjukkan caranya:

1
Vision.Builder visionBuilder = new Vision.Builder(
2
                new NetHttpTransport(),
3
                new AndroidJsonFactory(),
4
                null);
5
6
visionBuilder.setVisionRequestInitializer(
7
            new VisionRequestInitializer("YOUR_API_KEY"));

Setelah instance Vision.Builder siap, Anda dapat memanggil metode build() untuk menghasilkan instance Vision baru yang dapat Anda gunakan di seluruh aplikasi Anda.

1
Vision vision = visionBuilder.build();

Pada titik ini, Anda memiliki semua yang Anda butuhkan untuk mulai menggunakan API Cloud Vision.

4. Mendeteksi dan Menganalisis Wajah

Mendeteksi wajah dalam foto adalah persyaratan yang sangat umum dalam aplikasi yang berkaitan dengan visi komputer. Dengan API Cloud Vision, Anda dapat membuat detektor wajah yang sangat akurat yang juga dapat mengidentifikasi emosi, kondisi pencahayaan, dan tengara wajah.

Demi demonstrasi, kita akan melakukan face detection pada foto berikut, yang menampilkan awak Apollo 9:

Sample photo for face detectionSample photo for face detectionSample photo for face detection

Saya sarankan Anda mendownload versi resolusi tinggi dari foto dari Wikimedia Commons dan letakkan di folder res/raw proyek Anda.

Langkah 1: Menyandikan Foto

Cloud Vision API mengharapkan gambar masukannya dikodekan sebagai string Base64 yang ditempatkan di dalam objek image. Sebelum Anda menghasilkan objek seperti itu, Anda harus mengubah foto yang Anda download, yang saat ini menjadi sumber gambar mentah, ke dalam array byte.  Anda dapat dengan cepat melakukannya dengan membuka input streamnya menggunakan metode openRawResource() dari kelas Resources dan menyebarkannya ke metode toByteArray() dari kelas IOUtils.

Karena operasi file I/O tidak boleh dijalankan di thread UI, pastikan Anda membuat thread baru sebelum membuka input stream. Kode berikut menunjukkan caranya:

1
// Create new thread

2
AsyncTask.execute(new Runnable() {
3
    @Override
4
    public void run() {
5
        // Convert photo to byte array

6
        InputStream inputStream = 
7
                    getResources().openRawResource(R.raw.photo);
8
        byte[] photoData = IOUtils.toByteArray(inputStream);
9
        inputStream.close();
10
11
        // More code here

12
    }
13
});

Anda sekarang dapat membuat objek image dengan memanggil konstruktor defaultnya. Untuk menambahkan array byte ke dalamnya sebagai string Base64, yang perlu Anda lakukan adalah melewatkan array ke metode encodeContent() nya.

1
Image inputImage = new Image();
2
inputImage.encodeContent(photoData);

Langkah 2: Membuat Permintaan

Karena Cloud Vision API menawarkan beberapa fitur yang berbeda, Anda harus secara eksplisit menentukan fitur yang Anda minati sambil membuat permintaan untuk itu.  Untuk melakukannya, Anda harus membuat objek Feature dan memanggil metode setType() nya. Kode berikut menunjukkan cara membuat objek feature untuk deteksi wajah saja:

1
Feature desiredFeature = new Feature();
2
desiredFeature.setType("FACE_DETECTION");

Dengan menggunakan Objek image dan Feature, Anda sekarang dapat membuat contoh AnototImageRequest.

1
AnnotateImageRequest request = new AnnotateImageRequest();
2
request.setImage(inputImage);
3
request.setFeatures(Arrays.asList(desiredFeature));

Perhatikan bahwa objek AnototImageRequest harus selalu dimiliki oleh objek BatchAnnotateImagesRequest karena Cloud Vision API dirancang untuk memproses banyak gambar sekaligus. Untuk menginisialisasi contoh BatchAnnotateImagesRequest yang berisi objek AnototImageRequest tunggal, Anda dapat menggunakan metode utilitas Arrays.asList().

1
BatchAnnotateImagesRequest batchRequest = 
2
                        new BatchAnnotateImagesRequest();
3
                        
4
batchRequest.setRequests(Arrays.asList(request));

Untuk benar-benar membuat permintaan pendeteksian wajah, Anda harus memanggil metode execute() dari objek Annotate yang diinisialisasi menggunakan objek BatchAnnotateImagesRequest yang baru saja Anda buat.  Untuk menghasilkan objek seperti itu, Anda harus memanggil metode annotate() yang ditawarkan oleh Klien Google API untuk Cloud Vision. Begini caranya:

1
BatchAnnotateImagesResponse batchResponse =
2
        vision.images().annotate(batchRequest).execute();

Langkah 3: Menggunakan Respon

Setelah permintaan diproses, Anda mendapatkan objek BatchAnnotateImagesResponse yang berisi respons API.  Untuk permintaan deteksi wajah, respons berisi objek FaceAnnotation untuk setiap wajah yang terdeteksi API. Anda bisa mendapatkan daftar objek FaceAnnotation dengan menggunakan metode getFaceAnnotations().

1
List<FaceAnnotation> faces = batchResponse.getResponses()
2
                                .get(0).getFaceAnnotations();

Objek FaceAnnotation berisi banyak informasi berguna tentang wajah, seperti letak, sudut, dan emosinya yang diwahyukan. Pada versi 1, API hanya bisa mendeteksi emosi berikut: sukacita, duka, kemarahan, dan kejutan.

Untuk menjaga agar tutorial singkat ini, sekarang mari kita tampilkan informasi berikut ini di Toast:

  • Jumlah wajah
  • Kemungkinan mereka mengungkapkan kegembiraan

Anda tentu saja bisa menghitung wajah dengan memanggil metode size() dari List yang berisi objek FaceAnnotation. Untuk mendapatkan kemungkinan sebuah wajah yang mengungkapkan kegembiraan, Anda dapat memanggil metode getJoyLikelihood()dari objek FaceAnnotation yang terkait.

Perhatikan bahwa karena Toast sederhana hanya bisa menampilkan satu string saja, Anda harus menggabungkan semua detail di atas.  Selain itu, Toast hanya dapat ditampilkan dari thread UI, jadi pastikan Anda memanggilnya setelah memanggil metode runOnUiThread(). Kode berikut menunjukkan caranya:

1
// Count faces

2
int numberOfFaces = faces.size();
3
4
// Get joy likelihood for each face

5
String likelihoods = "";
6
for(int i=0; i<numberOfFaces; i++) {
7
    likelihoods += "\n It is " +
8
                faces.get(i).getJoyLikelihood() + 
9
                " that face " + i + " is happy";
10
}
11
12
// Concatenate everything

13
final String message =
14
        "This photo has " + numberOfFaces + " faces" + likelihoods;
15
16
// Display toast on UI thread

17
runOnUiThread(new Runnable() {
18
    @Override
19
    public void run() {
20
        Toast.makeText(getApplicationContext(),
21
                message, Toast.LENGTH_LONG).show();
22
    }
23
});

Anda sekarang bisa lanjut dan menjalankan aplikasi untuk melihat hasil berikut:

Face detection resultsFace detection resultsFace detection results

5. Membaca teks

Proses mengekstrak string dari foto teks disebut optical character recognition, atau disingkat OCR. API Cloud Vision memungkinkan Anda untuk dengan mudah membuat pembaca karakter optik yang dapat menangani foto teks cetakan dan tulisan tangan.  Terlebih lagi, pembaca yang Anda buat tidak akan kesulitan membaca teks atau teks miring yang dilapisi pada gambar berwarna-warni.

API menawarkan dua fitur berbeda untuk OCR:

  • TEXT_DETECTION, untuk membaca sejumlah kecil teks, seperti yang ada di papan nama atau sampul buku
  • dan DOCUMENT_TEXT_DETECTION, untuk membaca sejumlah besar teks, seperti yang ada di halaman novel

Langkah-langkah yang perlu Anda ikuti untuk membuat permintaan OCR sama dengan langkah-langkah yang Anda ikuti untuk melakukan permintaan deteksi wajah, kecuali bagaimana Anda menginisialisasi objek Feature Untuk OCR, Anda harus menetapkan jenisnya ke TEXT_DETECTION atau DOCUMENT_TEXT_DETECTION. Untuk saat ini, mari kita coba dengan yang pertama.

1
Feature desiredFeature = new Feature();
2
desiredFeature.setType("TEXT_DETECTION");

Tentu saja Anda juga harus meletakkan foto yang berisi teks di dalam folder res/raw proyek Anda. Jika Anda tidak memiliki foto seperti itu, Anda bisa menggunakan yang ini, yang menunjukkan tanda jalan:

Sample photo for text detectionSample photo for text detectionSample photo for text detection

Anda dapat mendownload versi resolusi tinggi dari foto di atas dari Wikimedia Commons.

Untuk mulai memproses hasil operasi OCR, setelah Anda mendapatkan objek BatchAnnotateImagesResponse, Anda harus memanggil metode getFullTextAnnotation() untuk mendapatkan objek TextAnnotation yang berisi semua teks yang diekstraksi.

1
final TextAnnotation text = batchResponse.getResponses()
2
                        .get(0).getFullTextAnnotation();

Anda kemudian dapat memanggil getText() metode objek TextAnnotation untuk benar-benar mendapatkan referensi ke string yang berisi teks yang diekstraksi.

Kode berikut menunjukkan cara menampilkan teks yang diekstraksi menggunakan Toast:

1
Toast.makeText(getApplicationContext(),
2
                text.getText(), Toast.LENGTH_LONG).show();

Jika Anda menjalankan aplikasi Anda sekarang, Anda akan melihat sesuatu seperti ini:

Text detection resultsText detection resultsText detection results

Kesimpulan

Dalam tutorial ini Anda belajar bagaimana menggunakan Cloud Vision API untuk menambahkan deteksi wajah, deteksi emosi, dan kemampuan pengenalan karakter optik ke aplikasi Android Anda. Saya yakin Anda akan setuju dengan saya ketika saya mengatakan bahwa kemampuan baru ini akan memungkinkan aplikasi Anda menawarkan antarmuka pengguna yang lebih intuitif dan cerdas.

Perlu disebutkan bahwa ada satu fitur penting yang hilang dalam Cloud Vision API: pengenalan wajah. Dalam bentuknya saat ini, API hanya bisa mendeteksi wajah, tidak mengidentifikasinya.

Untuk mempelajari lebih lanjut tentang API anda bisa membaca dokumentasi resminya.

Dan sementara itu, lihat beberapa tutorial kami yang lain tentang menambahkan pembelajaran komputer ke aplikasi Android Anda!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
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.