{"id":1102,"date":"2022-11-19T17:30:46","date_gmt":"2022-11-19T17:30:46","guid":{"rendered":"https:\/\/unydevelopernetwork.com\/?p=1102"},"modified":"2022-11-25T17:03:20","modified_gmt":"2022-11-25T17:03:20","slug":"bermain-dengan-opencv-di-android-java-bag-1-rekognisi-lingkaran","status":"publish","type":"post","link":"https:\/\/unydevelopernetwork.com\/index.php\/2022\/11\/19\/bermain-dengan-opencv-di-android-java-bag-1-rekognisi-lingkaran\/","title":{"rendered":"Bermain Dengan OpenCV di Android (Java) (bag. 1): Rekognisi Lingkaran"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 9<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>\n<p>Selamat datang di UNY Developer Network. Pada postingan kali ini, kita akan bermain-main dengan OpenCV di Android. Wow! OpenCV? Apakah itu OpenCV? OpenCV (Open Source Computer Vision Library), adalah sebuah library open source yang dikembangkan oleh intel yang fokus untuk menyederhanakan programing terkait citra digital (<a rel=\"noreferrer noopener\" href=\"https:\/\/binus.ac.id\/malang\/2017\/10\/introduction-to-open-cv\/\" data-type=\"URL\" data-id=\"https:\/\/binus.ac.id\/malang\/2017\/10\/introduction-to-open-cv\/\" target=\"_blank\">Binus<\/a>, 2017). Ya, sederhananya Library ini memudahkan kita untuk bermain-main dengan computer vision tanpa harus memikirkan dalam-dalam metode-metode lain pendukungnya. Nah, kali ini kita akan mencoba sesuatu yang berbeda. Pada umumnya, openCV dijalankan di lingkungan C++ atau Python. Namun, sekarang kita akan menjalankannnya di lingkungan Android alias <strong>Java<\/strong> Hahahaha&#8230;. Bagaimana cara kita melakukannya? Simak postingan ini sampai akhir.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Baik, sebelum kita memulai, ada baiknya kita akan berkenalan dengan lingkungan project kita kali ini. Bisa dibilang cukup rumit ya! Hal ini dikarenakan memang OpenCV itu dibangun untuk secara default dijalankan dilingkungan OpenCV \/ Python. Namun, sekarang kita akan menjalankannya di lingkungan Java secara spesifik di lingkungan Android. Untuk bentuk akhir dari project kita bagaimana sih nantinya? Mari kita tonton video berikut ini:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Playing With OpenCV (Android): Circle Recognition\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/V-XEZJcBnGo?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Cukup sederhana ya? Yap. Anda juga bisa melihat pada video, terdapat satu button untuk capture gambar namun belum berfungsi. Ya, ya, ya&#8230; sabar yaa.. Karena ini baru bagian 1. Bagian capture gambar akan disampaikan di bagian lain. <\/p>\n\n\n\n<p>Baik, bagaimana cara kita membangun aplikasi Android dengan openCV ini? Mari kita ikuti langkah-langkah berikut ini. <\/p>\n\n\n\n<p><strong>1. Unduh SDK OpenCV yang paling terbaru<\/strong><\/p>\n\n\n\n<p>Versi terbaru dari OpenCV saat ini adalah versi 4.6.0 <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"326\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-700x326.png\" alt=\"\" class=\"wp-image-1103\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-700x326.png 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-300x140.png 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-768x358.png 768w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image.png 799w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n<\/div>\n\n\n<p>Untuk itu, klik pada tombol <strong>Android<\/strong> untuk memulai proses pengunduhan. Anda akan dibawa ke laman sourceforge untuk melakukan proses pengunduhan, ikuti saja dan pastikan tidak ada aplikasi pihak ketika yang mengganggu proses unduhan. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"258\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-1-700x258.png\" alt=\"\" class=\"wp-image-1104\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-1-700x258.png 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-1-300x111.png 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-1-768x283.png 768w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-1.png 1432w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n<\/div>\n\n\n<p>Ukuran file SDKnya sekitar 250MB. Jadi Anda harus bersabar ketika proses mengunduh. Setelah proses unduhan selesai, Anda akan mendapatkan sebuah file <strong>.zip<\/strong> seperti tangkapan layar di bawah ini.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"149\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-2-700x149.png\" alt=\"\" class=\"wp-image-1105\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-2-700x149.png 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-2-300x64.png 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-2-768x163.png 768w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-2-1536x326.png 1536w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-2.png 1663w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n<\/div>\n\n\n<p>Lakukan ekstraksi file, dan Anda akan memperoleh beberapa direktori seperti tangkapan layar di bawah ini.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"609\" height=\"124\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-3.png\" alt=\"\" class=\"wp-image-1106\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-3.png 609w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-3-300x61.png 300w\" sizes=\"auto, (max-width: 609px) 100vw, 609px\" \/><\/figure>\n<\/div>\n\n\n<p>Direktori sdk tersebut akan kita <strong>include <\/strong>kan ke dalam project Android kita nantinya.<\/p>\n\n\n\n<p><strong>2. Membuat Project Android Baru<\/strong><\/p>\n\n\n\n<p>Langkah selanjutnya adalah membuat project Android baru. Buatlah sebuah project Android baru dengan: <strong>Bahasa Pemrograman Java dan Layout Empty<\/strong>. Ketika saya menulis artikel ini, Saya memberikan nama project Androidnya: <strong>OpenCV-Project<\/strong>. Untuk minimum APInya 30 dan targetnya 32.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/Screenshot_20221119_210950-700x505.png\" alt=\"\" class=\"wp-image-1107\" width=\"700\" height=\"505\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/Screenshot_20221119_210950-700x505.png 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/Screenshot_20221119_210950-300x217.png 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/Screenshot_20221119_210950-768x554.png 768w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/Screenshot_20221119_210950.png 902w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"505\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/Screenshot_20221119_211015-700x505.png\" alt=\"\" class=\"wp-image-1108\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/Screenshot_20221119_211015-700x505.png 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/Screenshot_20221119_211015-300x217.png 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/Screenshot_20221119_211015-768x554.png 768w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/Screenshot_20221119_211015.png 902w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n<\/div>\n\n\n<p><strong>3. Import Module: OpenCV<\/strong><\/p>\n\n\n\n<p>Setelah project selesai dibuat, langkah ketiga adalah melakukan import module. Untuk itu, Klik <strong>File &gt; New &gt; Import Module<\/strong><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"562\" height=\"202\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-4.png\" alt=\"\" class=\"wp-image-1109\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-4.png 562w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-4-300x108.png 300w\" sizes=\"auto, (max-width: 562px) 100vw, 562px\" \/><\/figure>\n<\/div>\n\n\n<p>Ketika muncul jendela di bawah klik pada icon folder<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"505\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-5-700x505.png\" alt=\"\" class=\"wp-image-1110\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-5-700x505.png 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-5-300x217.png 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-5-768x554.png 768w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-5.png 902w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n<\/div>\n\n\n<p>Cari lokasi hasil ekstraksi SDK OpenCV kita dan pilih folder SDK. Lanjutkan dengan klik OK<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"510\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-6.png\" alt=\"\" class=\"wp-image-1111\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-6.png 624w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-6-300x245.png 300w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/figure>\n<\/div>\n\n\n<p>Pada Module Name, berikan nama sesuai selera, namun saya sarankan dengan menggunakan format <strong>OpenCVLibrary&lt;Versi&gt;<\/strong>. Klik Finish untuk memulai proses import Module<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"419\" height=\"179\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-7.png\" alt=\"\" class=\"wp-image-1112\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-7.png 419w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-7-300x128.png 300w\" sizes=\"auto, (max-width: 419px) 100vw, 419px\" \/><\/figure>\n<\/div>\n\n\n<p>Tunggu sampai proses import selesai. Proses akan memakan waktu kurang lebih tiga sampai dengan lima menit.<\/p>\n\n\n\n<p>Jika Anda menemukan error, maka lakukan hal berikut:<\/p>\n\n\n\n<p>Buka file gradle SDK OpenCV.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"371\" height=\"66\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-8.png\" alt=\"\" class=\"wp-image-1113\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-8.png 371w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-8-300x53.png 300w\" sizes=\"auto, (max-width: 371px) 100vw, 371px\" \/><\/figure>\n<\/div>\n\n\n<p>Berikan comment pada dependency yang membuat proses import error. Contohnya pada project ini adalah, karena kita menggunakan Java, maka dependency Kotlin tidak akan diincludekan. Hal tersebut akan membuat proses import error. Maka untuk memperbaikinya hanya tinggal memberikan tanda comment pada bagian dependency<strong>:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apply plugin: 'kotlin-android'<\/code><\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"370\" height=\"113\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-9.png\" alt=\"\" class=\"wp-image-1114\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-9.png 370w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-9-300x92.png 300w\" sizes=\"auto, (max-width: 370px) 100vw, 370px\" \/><\/figure>\n<\/div>\n\n\n<p>Lakukan sync gradle lagi dan proses import module akan berjalan dengan mulus. <\/p>\n\n\n\n<p>Langkah selanjutnya, adalah mengaktifkan dependency modul OpenCV yang sudah kita import. Untuk melakukannya klik <strong>File &gt; Project Structure<\/strong>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"271\" height=\"232\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-10.png\" alt=\"\" class=\"wp-image-1115\"\/><\/figure>\n<\/div>\n\n\n<p>Anda akan menemukan jendela seperti tangkapan layar di bawah ini. Klik pada tombol <strong>+ <\/strong>pada kotak <strong>Declared Dependency<\/strong> untuk menambahkan modul.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"366\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-11-700x366.png\" alt=\"\" class=\"wp-image-1116\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-11-700x366.png 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-11-300x157.png 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-11-768x401.png 768w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-11.png 1154w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n<\/div>\n\n\n<p>Pilih Module Dependency.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"308\" height=\"216\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-12.png\" alt=\"\" class=\"wp-image-1117\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-12.png 308w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-12-300x210.png 300w\" sizes=\"auto, (max-width: 308px) 100vw, 308px\" \/><\/figure>\n<\/div>\n\n\n<p>Pilih Modul OpenCV yang sudah kita import tadi dan klik <strong>OK<\/strong>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"566\" height=\"769\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-13.png\" alt=\"\" class=\"wp-image-1118\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-13.png 566w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-13-221x300.png 221w\" sizes=\"auto, (max-width: 566px) 100vw, 566px\" \/><\/figure>\n<\/div>\n\n\n<p>Proses menambahkan dan mengaktifkan module OpenCV di Project Android telah selesai. Mari kita lanjutkan ke langkah selanjutnya.<\/p>\n\n\n\n<p><strong>4. Salin Library Native OpenCV ke Project Android<\/strong><\/p>\n\n\n\n<p>Pada Project Android Studio, klik <strong>File &gt; New &gt; Folder &gt; JNI Folder<\/strong>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"651\" height=\"657\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-15.png\" alt=\"\" class=\"wp-image-1120\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-15.png 651w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-15-297x300.png 297w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-15-150x150.png 150w\" sizes=\"auto, (max-width: 651px) 100vw, 651px\" \/><\/figure>\n<\/div>\n\n\n<p>Check pada <strong>Change Folder Location<\/strong> dan rename folder menjadi <strong>jniLibs<\/strong>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"336\" height=\"241\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-16.png\" alt=\"\" class=\"wp-image-1121\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-16.png 336w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-16-300x215.png 300w\" sizes=\"auto, (max-width: 336px) 100vw, 336px\" \/><\/figure>\n<\/div>\n\n\n<p>Buka SDK OpenCV hasil ekstrasi, dan navigasikan ke: <strong>sdk\/native\/libs. <\/strong>Salin seluruh isi yang ada di dalam direktori <strong>libs <\/strong>ke dalam direktori <strong>jniLibs<\/strong> yang sudah kita buat kita sebelumnya<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"282\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-17-700x282.png\" alt=\"\" class=\"wp-image-1122\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-17-700x282.png 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-17-300x121.png 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-17-768x309.png 768w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-17.png 1039w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n<\/div>\n\n\n<p>Kembali ke Android Studio, klik <strong>Build &gt; Clean Project<\/strong> dan setelah selesai lanjutkan dengan <strong>Build &gt; Rebuild Project<\/strong><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"324\" height=\"370\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-18.png\" alt=\"\" class=\"wp-image-1123\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-18.png 324w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-18-263x300.png 263w\" sizes=\"auto, (max-width: 324px) 100vw, 324px\" \/><\/figure>\n<\/div>\n\n\n<p>Library dan module OpenCV sudah siap digunakan untuk project Android kita.<\/p>\n\n\n\n<p><strong>5. Membuat Resource (Icon Drawable)<\/strong><\/p>\n\n\n\n<p>Buatlah satu icon drawable dengan nama <strong>ic_action_capture<\/strong> yang akan kita gunakan sebagai tombol capture gambar. Saya anggap di sini Anda sudah mampu semua membuat icon drawable di Android Studio ya!<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"466\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-19-700x466.png\" alt=\"\" class=\"wp-image-1124\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-19-700x466.png 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-19-300x200.png 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-19-768x512.png 768w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-19.png 1022w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n<\/div>\n\n\n<p><strong>6. Menambahkan Strings<\/strong><\/p>\n\n\n\n<p>Kita juga akan menambahkan resource <strong>strings<\/strong> untuk mendukung project kita terutama pada menu title dan caption pada button.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;resources&gt;<br>    &lt;string name=\"app_name\"&gt;OpenCV-Project&lt;\/string&gt;<br>    &lt;string name=\"app_menu\"&gt;Choose Mode:&lt;\/string&gt;<br>    &lt;string name=\"btn_circle_camera\"&gt;Circle Recognition&lt;\/string&gt;<br>&lt;\/resources&gt;<\/pre>\n\n\n\n<p><strong>7. Mengonfigurasi Manifest<\/strong><\/p>\n\n\n\n<p>Kita akan mengonfigurasi manifest kita sehingga siap untuk mendapatkan permission untuk kamera dan storage (karena nantinya kita akan mengcapture hasil kamera dan menyimpannya ke dalam galeri). Tambahkan tiga permission berikut ini:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    &lt;uses-permission android:name=\"android.permission.CAMERA\" \/&gt;\n    &lt;uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" \/&gt;\n    &lt;uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" \/&gt;<\/code><\/pre>\n\n\n\n<p><strong>8. Buat Activity Baru: CircleDetection.java (activity_circle_detection.xml)<\/strong><\/p>\n\n\n\n<p>Buatlah activity baru dengan nama <strong>CircleDetection.java<\/strong> dan dengan empty layout yang bernama <strong>activity_circle_detection.xml<\/strong> yang berfungsi untuk main feature dari project kita yakni rekognisi lingkaran. Berikut adalah layout dari activity <strong>CircleDetection.java<\/strong> (activity_circle_detection.xml)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\n&lt;RelativeLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    tools:context=\".CircleDetection\"&gt;\n\n    &lt;LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"horizontal\"\n        android:weightSum=\"10\"&gt;\n\n\n        &lt;org.opencv.android.JavaCameraView\n            android:id=\"@+id\/opencv_camera\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:layout_weight=\"1\" \/&gt;\n\n        &lt;LinearLayout\n            android:id=\"@+id\/capture_button\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:layout_weight=\"9\"\n            android:orientation=\"horizontal\"&gt;\n\n            &lt;ImageView\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:background=\"@color\/teal_700\"\n                android:padding=\"20dp\"\n                android:src=\"@drawable\/ic_action_capture\"\/&gt;\n\n        &lt;\/LinearLayout&gt;\n\n    &lt;\/LinearLayout&gt;\n&lt;\/RelativeLayout&gt;<\/code><\/pre>\n\n\n\n<p>Dan berikut ini adalah logika pemrograman dari <strong>CircleDetection.java<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.unydevelopernetwork.opencv_project;\n\nimport androidx.appcompat.app.AppCompatActivity;\nimport androidx.core.app.ActivityCompat;\nimport androidx.core.content.ContextCompat;\n\nimport android.Manifest;\nimport android.content.pm.PackageManager;\nimport android.os.Bundle;\nimport android.util.Log;\nimport android.widget.LinearLayout;\n\nimport org.opencv.android.BaseLoaderCallback;\nimport org.opencv.android.CameraBridgeViewBase;\nimport org.opencv.android.JavaCameraView;\nimport org.opencv.android.LoaderCallbackInterface;\nimport org.opencv.android.OpenCVLoader;\nimport org.opencv.core.Mat;\nimport org.opencv.core.Point;\nimport org.opencv.core.Scalar;\nimport org.opencv.core.Size;\nimport org.opencv.imgproc.Imgproc;\n\npublic class CircleDetection extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2{\n\n    private static final int CAMERA_PERMISSION_CODE = 100;\n    private static final int STORAGE_PERMISSION_CODE = 101;\n    private JavaCameraView cameraView;\n    private LinearLayout captureButton;\n\n    public static final String TAG = \"src\";\n\n    static {\n        if (!OpenCVLoader.initDebug()) {\n            Log.wtf(TAG, \"OpenCV Library failed to load!\");\n        }\n    }\n\n\n    private final BaseLoaderCallback loaderCallback = new BaseLoaderCallback(this) {\n        @Override\n        public void onManagerConnected(int status) {\n            if (status == SUCCESS) {\n                Log.i(TAG, \"OpenCV Library loaded successfully\");\n                cameraView.enableView();\n            } else {\n                super.onManagerConnected(status);\n            }\n        }\n    };\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_circle_detection);\n        initLevel0();\n        initLevel1();\n        initLevel2();\n    }\n\n    private void initLevel0(){\n        cameraView = findViewById(R.id.opencv_camera);\n        captureButton = findViewById(R.id.capture_button);\n    }\n\n    private void initLevel1(){\n        getCameraPermission();\n        getStoragePermission();\n    }\n\n    private void initLevel2(){\n        cameraView.setCameraPermissionGranted();\n        cameraView.setCvCameraViewListener(this);\n    }\n\n    private void getCameraPermission(){\n        if(ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED){\n            ActivityCompat.requestPermissions(this, new String&#91;] {Manifest.permission.CAMERA}, CAMERA_PERMISSION_CODE);\n        }\n    }\n\n    private void getStoragePermission(){\n        if(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED){\n            ActivityCompat.requestPermissions(this, new String&#91;] {Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION_CODE);\n        }\n    }\n\n    @Override\n    protected void onResume() {\n        super.onResume();\n        if (!OpenCVLoader.initDebug()) {\n            Log.d(TAG, \"Internal OpenCV library not found. Using OpenCV Manager for initialization\");\n            OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, loaderCallback);\n        } else {\n            Log.d(TAG, \"OpenCV library found inside package. Using it!\");\n            loaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);\n        }\n    }\n\n    @Override\n    protected void onPause() {\n        super.onPause();\n        if (cameraView != null)\n            cameraView.disableView();\n    }\n\n    @Override\n    public void onCameraViewStarted(int width, int height) {\n\n    }\n\n    @Override\n    public void onCameraViewStopped() {\n\n    }\n\n    @Override\n    public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {\n        Mat input = inputFrame.gray();\n        Mat circles = new Mat();\n        Imgproc.blur(input, input, new Size(7, 7), new Point(2, 2));\n        Imgproc.HoughCircles(input, circles, Imgproc.CV_HOUGH_GRADIENT, 2, 100, 100, 90, 0, 1000);\n\n        Log.i(TAG, \"size: \" + circles.cols() + \", \" + circles.rows());\n\n        if (circles.cols() &gt; 0) {\n            for (int x=0; x &lt; Math.min(circles.cols(), 1); x++ ) {\n                double&#91;] circleVec = circles.get(0, x);\n\n                if (circleVec == null) {\n                    break;\n                }\n\n                Point center = new Point((int) circleVec&#91;0], (int) circleVec&#91;1]);\n                int radius = (int) circleVec&#91;2];\n\n                Imgproc.circle(input, center, 3, new Scalar(0, 255, 0), 10);\n                Imgproc.circle(input, center, radius, new Scalar(0, 255, 0), 5);\n            }\n        }\n\n        circles.release();\n        input.release();\n        return inputFrame.rgba();\n    }\n\n    @Override\n    public void onBackPressed() {\n        finish();\n    }\n\n}<\/code><\/pre>\n\n\n\n<p><strong>9.<\/strong> <strong>MainActivity.java dan Layout activity_main.xml<\/strong><\/p>\n\n\n\n<p>Selanjutnya kita buat layout untuk <strong>MainActivity <\/strong>(activity_main.xml).<strong> <\/strong>Berikut adalah file xml nya.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\n&lt;RelativeLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:layout_margin=\"20dp\"\n    tools:context=\".MainActivity\"&gt;\n\n    &lt;TextView\n        android:id=\"@+id\/app_menu\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string\/app_menu\"\n        android:textStyle=\"bold\"\n        android:textSize=\"20sp\"\/&gt;\n\n    &lt;Button\n        android:id=\"@+id\/btn_circle_camera\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"10dp\"\n        android:text=\"@string\/btn_circle_camera\"\n        android:layout_below=\"@+id\/app_menu\"\/&gt;\n&lt;\/RelativeLayout&gt;<\/code><\/pre>\n\n\n\n<p>Dan berikut ini adalah logika pemrogramannya (MainActivity.java)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.unydevelopernetwork.opencv_project;\n\nimport androidx.appcompat.app.AppCompatActivity;\n\nimport android.annotation.SuppressLint;\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.widget.Button;\n\npublic class MainActivity extends AppCompatActivity {\n\n    private Button circleDetection;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_main);\n        initLevel0();\n        initLevel1();\n    }\n\n    private void initLevel0(){\n        circleDetection = findViewById(R.id.btn_circle_camera);\n    }\n\n    @SuppressLint(\"ClickableViewAccessibility\")\n    private void initLevel1(){\n        circleDetection.setOnTouchListener((view, motionEvent) -&gt; {\n            goToCircleCamera();\n            return false;\n        });\n    }\n\n    private void goToCircleCamera(){\n        Intent goCircleCamera = new Intent(MainActivity.this, CircleDetection.class);\n        goCircleCamera.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);\n        startActivity(goCircleCamera);\n    }\n\n}<\/code><\/pre>\n\n\n\n<p><strong>10. Konfigurasi Manifest<\/strong><\/p>\n\n\n\n<p>Terakhir kita akan mengonfigurasikan kembali file manifest kita untuk menghandle behavior dari masing-masing activity yang sudah kita buat.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;application\n        android:allowBackup=\"true\"\n        android:dataExtractionRules=\"@xml\/data_extraction_rules\"\n        android:fullBackupContent=\"@xml\/backup_rules\"\n        android:icon=\"@mipmap\/ic_launcher\"\n        android:label=\"@string\/app_name\"\n        android:roundIcon=\"@mipmap\/ic_launcher_round\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style\/Theme.OpenCVProject\"\n        tools:targetApi=\"31\"&gt;\n        &lt;activity\n            android:name=\".CircleDetection\"\n            android:screenOrientation=\"landscape\"\n            android:parentActivityName=\".MainActivity\"\n            android:exported=\"false\"&gt;\n            &lt;meta-data\n                android:name=\"android.app.lib_name\"\n                android:value=\"\" \/&gt;\n        &lt;\/activity&gt;\n        &lt;activity\n            android:name=\".MainActivity\"\n            android:screenOrientation=\"portrait\"\n            android:exported=\"true\"&gt;\n            &lt;intent-filter&gt;\n                &lt;action android:name=\"android.intent.action.MAIN\" \/&gt;\n\n                &lt;category android:name=\"android.intent.category.LAUNCHER\" \/&gt;\n            &lt;\/intent-filter&gt;\n\n            &lt;meta-data\n                android:name=\"android.app.lib_name\"\n                android:value=\"\" \/&gt;\n        &lt;\/activity&gt;\n    &lt;\/application&gt;<\/code><\/pre>\n\n\n\n<p>Sehingga versi final dari <strong>AndroidManifest.xml<\/strong> adalah sebagai berikut.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\n&lt;manifest xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"&gt;\n\n    &lt;uses-permission android:name=\"android.permission.CAMERA\" \/&gt;\n    &lt;uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" \/&gt;\n    &lt;uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" \/&gt;\n\n    &lt;application\n        android:allowBackup=\"true\"\n        android:dataExtractionRules=\"@xml\/data_extraction_rules\"\n        android:fullBackupContent=\"@xml\/backup_rules\"\n        android:icon=\"@mipmap\/ic_launcher\"\n        android:label=\"@string\/app_name\"\n        android:roundIcon=\"@mipmap\/ic_launcher_round\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style\/Theme.OpenCVProject\"\n        tools:targetApi=\"31\"&gt;\n        &lt;activity\n            android:name=\".CircleDetection\"\n            android:screenOrientation=\"landscape\"\n            android:parentActivityName=\".MainActivity\"\n            android:exported=\"false\"&gt;\n            &lt;meta-data\n                android:name=\"android.app.lib_name\"\n                android:value=\"\" \/&gt;\n        &lt;\/activity&gt;\n        &lt;activity\n            android:name=\".MainActivity\"\n            android:screenOrientation=\"portrait\"\n            android:exported=\"true\"&gt;\n            &lt;intent-filter&gt;\n                &lt;action android:name=\"android.intent.action.MAIN\" \/&gt;\n\n                &lt;category android:name=\"android.intent.category.LAUNCHER\" \/&gt;\n            &lt;\/intent-filter&gt;\n\n            &lt;meta-data\n                android:name=\"android.app.lib_name\"\n                android:value=\"\" \/&gt;\n        &lt;\/activity&gt;\n    &lt;\/application&gt;\n\n&lt;\/manifest&gt;<\/code><\/pre>\n\n\n\n<p><strong>11.<\/strong> <strong>Lakukan Analyze APK<\/strong><\/p>\n\n\n\n<p>Sebelum kita melakukan testing pada project yang sudah dibuat, ada baiknya kita melakukan analyze APK. <strong>Klik pada Build &gt; Analyze APK<\/strong><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"276\" height=\"210\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-20.png\" alt=\"\" class=\"wp-image-1125\"\/><\/figure>\n<\/div>\n\n\n<p>Selanjutnya, Anda akan melihat jendela seperti tangkapan layar di bawah ini. Pilih <strong>app-debug.apk<\/strong><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"510\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-21.png\" alt=\"\" class=\"wp-image-1126\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-21.png 624w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-21-300x245.png 300w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/figure>\n<\/div>\n\n\n<p>Anda kemudian akan melihat jendela seperti tangkapan layar di bawah ini. Navigasi ke: <strong>lib &gt; &lt;jenis sytem&gt;<\/strong>. Jika Anda melakukan proses import modul dan library OpenCV dengan benar, maka Anda akan menemukan dua buah file: <strong>libopencv_java&lt;version&gt;.so <\/strong> dan <strong>libc++_shared.so<\/strong>. Jika kedua file ini sudah ada di dalam hasil analyze APK ini, Anda siap untuk melakukan test aplikasi.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"284\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-22-700x284.png\" alt=\"\" class=\"wp-image-1127\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-22-700x284.png 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-22-300x122.png 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-22-768x312.png 768w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/image-22.png 1320w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n<\/div>\n\n\n<p><strong>12. Test Project!<\/strong><\/p>\n\n\n\n<p>Langkah terakhir adalah melakukan test project. Pada test kali ini saya menggunakan device langsung yakni <strong>Xiaomi Redmi Note 11 Pro (2201117TY) <\/strong>Varian 4\/128. Berikut adalah hasil ujinya.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.48-700x1556.jpg\" alt=\"\" class=\"wp-image-1128\" width=\"213\" height=\"474\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.48-700x1556.jpg 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.48-135x300.jpg 135w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.48-691x1536.jpg 691w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.48.jpg 720w\" sizes=\"auto, (max-width: 213px) 100vw, 213px\" \/><figcaption class=\"wp-element-caption\">Tampilan Menu Utama<\/figcaption><\/figure>\n<\/div>\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"315\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.49-700x315.jpg\" alt=\"\" class=\"wp-image-1129\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.49-700x315.jpg 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.49-300x135.jpg 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.49-768x346.jpg 768w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.49-1536x691.jpg 1536w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.49.jpg 1600w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\">Aplikasi mendeteksi adanya lingkaran dengan memberikan border hitam pada object lingkaran yang tertangkap.<\/figcaption><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"315\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.49-1-700x315.jpg\" alt=\"\" class=\"wp-image-1130\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.49-1-700x315.jpg 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.49-1-300x135.jpg 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.49-1-768x346.jpg 768w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.49-1-1536x691.jpg 1536w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.49-1.jpg 1600w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\">Aplikasi mendeteksi adanya lingkaran dengan memberikan border hitam pada object lingkaran yang tertangkap<\/figcaption><\/figure>\n<\/div><\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Bagaimana? cukup mengasyikkan bukan? Saya tidak akan bilang project ini mudah. Asyik iya, namun mudah tidak. Terutama saat melakukan import modul dan library OpenCV ke dalam project Android. Karena metode yang tersedia dari OpenCV itu sendiri bisa dibilang cukup tua dan tidak update dengan perkembangan IDE serta metode development aplikasi di Android. Jadi ya, saya bilang project ini tidak cukup mudah untuk pemula. Namun, tenang saja! Jika Anda tetap ingin mencoba project ini, dan ternyata menemukan kendala dalam prosesnya, silakan tinggalkan pertanyaan di kolom komentar. Saya akan menjawab pertanyaan Anda.<\/p>\n\n\n\n<p>Baiklah, apakah project ini berhenti sampai di sini? hmmm.. tidak ya! Kita masih ada beberapa bentuk lain yang perlu kita rekognisi dengan menggunakan OpenCV &amp; Android. Ingat, tombol capture kita juga belum aktif, jadi tentu saja masih ada kelanjutan dari postingan kali ini. Untuk Project ini dapat Anda unduh melalui tautan berikut ini: <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/milstrike\/OpenCV-Project\" target=\"_blank\"><strong>https:\/\/github.com\/milstrike\/OpenCV-Project<\/strong><\/a><\/p>\n\n\n\n<p>Namun, ada baiknya untuk kali ini kita akhiri dulu ya. Demikianlah postingan saya tentang <strong>Bermain Dengan OpenCV di Android (Java) (bag. 1): Rekognisi Lingkaran<\/strong>. Semoga bermanfaat bagi Anda para pembaca. Apabila ada pertanyaan mengenai postingan ini, Anda dapat meninggalkannya di kolom komentar. Dan, Apabila Anda menemukan artikel ini berguna, Anda dapat membagikannya. Anda juga dapat mencuplik beberapa bagian dari artikel ini, namun jangan lupa untuk sertakan URL nya. Terima kasih.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">^_^<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>ARTIKEL TERKAIT<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/unydevelopernetwork.com\/index.php\/2022\/11\/25\/bermain-dengan-opencv-di-android-java-bag-2-rekognisi-segi-empat-rectangle\/\" target=\"_blank\" rel=\"noreferrer noopener\">Bermain Dengan OpenCV di Android (Java) (bag. 2): Rekognisi Segi Empat (Rectangle)<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 9<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>Selamat datang di UNY Developer Network. Pada postingan kali ini, kita akan bermain-main dengan OpenCV di Android. Wow! OpenCV? Apakah itu OpenCV? OpenCV (Open Source Computer Vision Library), adalah sebuah library open&#8230;<\/p>\n","protected":false},"author":1,"featured_media":1130,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[3,27,2,69],"tags":[327,5,295,72,332,331,4],"class_list":["post-1102","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","category-software-development","category-tutorial","category-umum-software-development","tag-android","tag-java","tag-opencv","tag-pemrograman","tag-recognition","tag-shape-recognition","tag-tutorial"],"featured_image_src":"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.49-1.jpg","author_info":{"display_name":"Muhammad Irfan Luthfi","author_link":"https:\/\/unydevelopernetwork.com\/index.php\/author\/admin\/"},"jetpack_featured_media_url":"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2022\/11\/WhatsApp-Image-2022-11-20-at-01.17.49-1.jpg","jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/posts\/1102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/comments?post=1102"}],"version-history":[{"count":2,"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/posts\/1102\/revisions"}],"predecessor-version":[{"id":1146,"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/posts\/1102\/revisions\/1146"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/media\/1130"}],"wp:attachment":[{"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/media?parent=1102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/categories?post=1102"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/tags?post=1102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}