Membuat Aplikasi Sederhana dengan Core ML

Cara membuat Image Recognition Application dengan Machine Learning menggunakan Core ML pada iOS

Auriga Aristo
Dipantry
6 min readOct 20, 2020

--

Photo by Markus Winkler on Unsplash

Mari kita berandai-andai tentang masa depan, apa bidang IT yang pertama kali muncul di benakmu? Artificial Intelligence, Machine Learning, Augmented Reality, Virtual Reality, Computer Vision, Cloud Computing dan masih banyak lagi. Di sini saya kan membahas salah satu bidang informatika yang sedang booming, yaitu Machine Learning.

Berbicara tentang Machine Learning, kamu mungkin akan berpikir bagaimana cara menggunakannya di aplikasi iOS? Bagaimana cara melakukan training dan testing data? Apakah saya perlu mempelajari Python untuk mengembangkan hal ini? Namun, saya tidak akan membahas sistem machine learning yang menggunakan kodingan Python. Kita akan lebih banyak membahas tentang Core ML dan menggunakan model yang sudah tersedia.

Pada tutorial ini kita akan membuat aplikasi dengan image recognition yang mampu menebak nama objek berdasarkan foto yang diambil dari kamera. Berikut adalah cuplikan aplikasi yang akan dibuat.

Demo Aplikasi

Apa itu Core ML?

Core ML merupakan library milik Apple yang memungkinkan sebuah aplikasi untuk menggunakan model Machine Learning dengan konsumsi daya yang lebih sedikir, kecepatan pemrosesan yang lebih efisien, dan penggunaan memori yang rendah. Core ML mendukung berbagai macam model termasuk neural network, linear model, support vector machine, dan lain-lain. Untuk menggunakannya, semua model harus dikonversi menjadi file yang mudah dikenali oleh iOS, yaitu file dengan extension .mlmodel.

Machine Learning Workflow untuk Aplikasi iOS

Pada awalnya, setiap model hasil training dan test data yang sudah dilakukan oleh machine learning berbentuk model. Model ini berbeda-beda tergantung pada framework yang digunakan, contohnya Caffe dengan file extension .caffemodel. File model ini harus diubah menjadi .mlmodel — entah menggunakan python atau tidak — agar bisa dibaca oleh Xcode untuk pengimplementasiannya ke dalam aplikasi.

Namun, pada aplikasi ini kita tidak akan membahas bagaimana cara konversi data menjadi .mlmodel. Kita akan menggunakan ML Model yang telah disediakan, yaitu Vision V3 Pre-Trained Machine Learning Model untuk membantu kita membuat aplikasi image recognition.

Klik di sini untuk mendownload.

Setup Project

Pertama, buat project baru (Single View App). Saya menamakan project ini dengan nama “Detect Object”. Matikan centang core data dan test karena kita tidak membutuhkan 2 hal itu di project ini.

Screenshot by Author

Setelah membuat project, masukkan Inceptionv3.mlmodel yang sudah di download ke dalam project kalian sehingga membentuk sesuai tampilan di bawah.

Screenshot by Author

Karena nantinya kita akan menggunakan kamera untuk mengambil foto, ada baiknya kita sekalian mengatur camera permission pada info.plist. Carilah key yang bernama “Privacy — Camera Usage Description” dan aturlah deskripsinya.

Screenshot by Author

Design Application

Selanjutnya, buka Main.storyboard. Kita akan memasang navigation controller pada tampilan yang sudah ada. Caranya adalah pilih tampilan > Editor > Embed In > Navigation Controller.

Screenshot by Author

Lalu, masukkan bar button item di bagian atas kanan dengan icon camera pada viewcontroller.

Screenshot by Author

Dan juga masukkan Image View dengan constraint 0 ke seluruh arah. (Jangan lupa atur constraint terhadap safe area margin).

Screenshot by Author

Terakhir, sambungkan storyboard dengan ViewController.swift khususnya untuk mengatur kerja bar button item dan image view.

Screenshot by Author

Coding Time!

Pertama, kita perlu melakukan import library yang kita butuhkan yaitu Core ML dan Vision. Vision di sini digunakan untuk mengubah data hasil gambar yang telah diambil dari kamera menjadi gambar yang mampu dibaca oleh Core ML.

import CoreML
import Vision

Lalu, kita masukkan protocol yang dibutuhkan dalam project ini, yaitu UIImagePickerControllerDelegate dan UINavigationControllerDelegate. UIImagePickerController akan mengatur sistem pengambilan gambar menggunakan kamera maupun file manager. UINavigationControllerDelegate akan mengatur sistem navigasi dalam aplikasi. Dalam hal ini, navigasi digunakan untuk membuka dan menutup tampilan kamera.

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
...
}

Selanjutnya, kita masukkan sistem pengambilan gambarnya.

Mungkin ada banyak hal yang mungkin belum pernah kamu lihat sebelumnya, akan saya jelaskan satu per satu.

Pada baris 5, kita panggil controller bawaan Apple yang akan mengatur sistem foto dan masukkan dalam variabel. Controller tersebut bisa diatur berdasarkan kebutuhan (baris 11 dan 12). Di baris 11, saya atur bahwa gambar akan diambil melalui camera. Apabila ingin mengambil gambar dari file manager, maka ubahlah sourceType menjadi .photoLibrary. Di baris 12, saya atur bahwa pengguna saya kunci supaya tidak bisa mengedit gambar. Apabila kamu ingin memperbolehkan pengguna untuk mengedit gambar berupa resize dan crop, silahkan mengubahnya menjadi true.

Pada baris 24, ketika tombol kamera dipencet, aplikasi akan menavigasikan ke tampilan pengambilan gambar. Dalam tampilan pengambilan foto, selama pengguna tidak memilih tombol “Use Photo” (lihat gambar di samping), maka fungsi pada baris 15 tidak akan dijalankan. Apabila pengguna telah memilih tombol itu, aplikasi akan mengambil data gambar dari ImagePickerController, setelah itu tampilan akan dinavigasikan kembali ke tampilan awal dan mengatur imageView pada tampilan utama berisikan gambar hasil dari kamera.

Selanjutnya, kita akan membuat sistem membaca gambar dan mengubahnya menjadi data text berdasarkan model yang telah disiapkan. Kalau kita melihat kodingan yang sudah dikerjakan, gambar yang ditampilkan memiliki tipe data UIImage, namun gambar yang bisa dibaca oleh Core ML adalah CIImage atau Core Image, sehingga kita harus mengubahnya terlebih dahulu sebelum diproses. Sistem pengubahan tipe data ini saya lakukan dalam fungsi pada baris 15, sehingga tampilan lengkap fungsi tersebut menjadi kodingan di bawah ini:

Lalu, kita akan membuat sistem membaca gambar pada Core ML.

Pada baris 2, aplikasi akan mencoba memuat data model yang dimiliki dengan pengembalian error apabila tidak ditemukan. Pada baris 6, aplikasi akan meminta model untuk melakukan klasifikasi gambar apabila gagal, maka akan mengembalikan error. Pada baris 14 ke bawah, Core ML akan menangani gambar yang dimasukkan.

Apabila aplikasi kita jalankan, maka akan muncul tampilan seperti di bawah:

Screenshot by Author

Pada baris 11 di kodingan di atas, kita melakukan print variabel result, maka aplikasi akan melakukan print seperti gambar di atas. Kalau kamu melakukan scroll pada terminal, akan terlihat banyak sekali. Namun kita hanya perlu melihat data dengan tingkat kepercayaan (confidence) tertinggi. Jika diperhatikan dengan seksama, semua data array diurutkan berdasarkan tingkat confidence tertinggi ke terendah. Tingkat confidence di sini merupakan tingkat kepercayaan machine learning dengan nilai antara 0 dan 1. Semakin besar angkanya, semakin besar kemungkinan benar dari sebuah gambar.

Berdasarkan gambar di atas, nilai confidence tertinggi dicapai oleh value “banana” dengan nilai 0.999985. Maka dapat disimpulkan bahwa kita hanya perlu mengambil data pertama pada array. Lalu, kita masukkan ke dalam navigation title, sehingga tampilan lengkap kodingan detect menjadi seperti gambar di bawah ini.

Selesai… Kamu akan memiliki aplikasi seperti video di atas. Cukup mudah bukan? Hanya perlu melakukan koding di satu file yang sama dengan 70 baris.

Kesimpulan

Membuat aplikasi mobile dengan Machine Learning tidak selalu menjadi pekerjaan yang sulit. Sudah banyak .mlmodel di internet yang bisa langsung dipakai sehingga kita tidak perlu lagi membuatnya sendiri. Pengimplementasiannya juga tidak sesulit yang dikirkan, kalian bisa memodifikasi kodingan di atas sesuai kebutuhan kalian.

Apabila kalian ada pertanyaan, silahkan taruh di comment dan jangan lupa untuk berikan clap supaya saya semakin semangat menulis artikel.

Selamat mencoba…

--

--

Dipantry
Dipantry

Published in Dipantry

Tempat berbagi pengetahuan seputar pengembangan produk & industri digital.

Auriga Aristo
Auriga Aristo

Written by Auriga Aristo

4+ years in Backend Developer | PHP, Java/Kotlin, MySQL, Golang | New story every week