Mengintegrasikan OpenCV v3.1.0 ke dalam Android Studio v1.4.1 , instruksi dengan detail tambahan dan screenshot jenis ini-adalah-apa-yang-harus-Anda-dapatkan.
Sebagian besar kredit diberikan kepada Kiran, Kool, 1 ", dan SteveLiles di opencv.org untuk penjelasan mereka. Saya menambahkan jawaban ini karena saya percaya bahwa antarmuka Android Studio sekarang cukup stabil untuk bekerja dengan jenis integrasi seperti ini. Juga saya harus menulis instruksi ini untuk proyek kami.
Pengembang AS yang berpengalaman akan menemukan beberapa hal yang luar biasa ini. Jawaban ini ditujukan untuk orang-orang dengan pengalaman terbatas di Android Studio.
Buat proyek Android Studio baru menggunakan pemandu proyek (Menu: / File / Proyek Baru):
Pastikan aplikasi Anda berjalan dengan benar. Coba ubah sesuatu seperti teks "Hello World" untuk mengonfirmasi bahwa siklus pembuatan / pengujian OK untuk Anda. (Saya sedang menguji dengan emulator perangkat API 19).
Unduh paket OpenCV untuk Android v3.1.0 dan unzip di beberapa direktori sementara di suatu tempat. (Pastikan itu adalah paket khusus untuk Android dan bukan hanya paket OpenCV untuk Java.) Saya akan memanggil direktori ini " unzip-dir " Di bawah unzip-dir Anda harus memiliki direktori sdk / native / libs dengan subdirektori yang dimulai dengan hal-hal seperti lengan ..., mips ... dan x86 ... (satu untuk setiap jenis "arsitektur" yang dijalankan Android)
Dari Android Studio, impor OpenCV ke proyek Anda sebagai modul: Menu: / File / New / Import_Module :
- Direktori sumber: {unzip-dir} / sdk / java
- Nama modul: Android studio secara otomatis mengisi bidang ini dengan openCVLibrary310 (nama persisnya mungkin tidak masalah tetapi kita akan lanjutkan dengan ini).
Klik selanjutnya . Anda mendapatkan layar dengan tiga kotak centang dan pertanyaan tentang stoples, pustaka, dan opsi impor. Ketiganya harus diperiksa. Klik pada Selesai.
Android Studio mulai mengimpor modul dan Anda akan diperlihatkan file import-summary.txt yang memiliki daftar apa yang tidak diimpor (kebanyakan file javadoc) dan informasi lainnya.
Tapi Anda juga mendapatkan pesan kesalahan pepatah gagal menemukan target dengan hash string 'android-14' ... . Ini terjadi karena file build.gradle dalam file zip OpenCV yang Anda unduh mengatakan untuk kompilasi menggunakan Android API versi 14, yang secara default Anda tidak miliki dengan Android Studio v1.4.1.
Buka dialog struktur proyek ( Menu: / File / Project_Structure ). Pilih modul "aplikasi", klik pada tab Dependensi dan tambahkan : openCVLibrary310 sebagai Ketergantungan Modul. Ketika Anda memilih Tambah / Module_Dependensi itu akan muncul dalam daftar modul yang dapat Anda tambahkan. Sekarang akan muncul sebagai dependensi tetapi Anda akan mendapatkan beberapa kesalahan tidak dapat-menemukan-android-14 di log peristiwa.
Lihat di file build.gradle untuk modul aplikasi Anda. Ada beberapa file build.gradle di proyek Android. Yang Anda inginkan ada di direktori cvtest1 / app dan dari tampilan proyek sepertinya build.gradle (Module: app) . Perhatikan nilai dari empat bidang ini:
- compileSDKVersion (milikku mengatakan 23)
- buildToolsVersion (milik saya mengatakan 23.0.2)
- minSdkVersion (milikku mengatakan 19)
- targetSdkVersion (milikku mengatakan 23)
Proyek Anda sekarang memiliki direktori cvtest1 / OpenCVLibrary310 tetapi tidak terlihat dari tampilan proyek:
Gunakan beberapa alat lain, seperti pengelola file apa pun, dan buka direktori ini. Anda juga dapat mengalihkan tampilan proyek dari Android ke File Proyek dan Anda dapat menemukan direktori ini seperti yang ditunjukkan dalam tangkapan layar ini:
Di dalamnya ada file build.gradle lain (disorot pada tangkapan layar di atas). Perbarui file ini dengan empat nilai dari langkah 6.
Sinkronisasi ulang proyek Anda lalu bersihkan / bangun kembali. (Menu: / Build / Clean_Project ) Ini harus membersihkan dan membangun tanpa kesalahan dan Anda akan melihat banyak referensi ke : openCVLibrary310 di layar 0: Pesan .
Pada titik ini modul akan muncul dalam hirarki proyek sebagai openCVLibrary310 , sama seperti aplikasi . (Perhatikan bahwa dalam menu drop-down kecil itu saya beralih dari Project View ke Android View ). Anda juga harus melihat file build.gradle tambahan di bawah "Gradle Scripts" tetapi saya menemukan antarmuka Android Studio sedikit glitchy dan kadang-kadang tidak langsung melakukannya. Jadi cobalah menyinkronkan ulang, membersihkan, bahkan memulai ulang Android Studio.
Anda akan melihat modul openCVLibrary310 dengan semua fungsi OpenCV di bawah java seperti di screenshot ini:
Salin {unzip-dir} / sdk / / asli libs direktori (dan segala sesuatu di bawah itu) untuk proyek Android Anda, untuk cvtest1 / OpenCVLibrary310 / src / main / , dan kemudian mengubah nama salinan dari libs ke jniLibs . Anda sekarang harus memiliki cvtest1 / OpenCVLibrary310 / src / main / jniLibs . Sinkronisasi ulang proyek Anda dan direktori ini sekarang akan muncul dalam tampilan proyek di bawah openCVLibrary310 .
Buka metode onCreate dari MainActivity.java dan tambahkan kode ini:
if (!OpenCVLoader.initDebug()) {
Log.e(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), not working.");
} else {
Log.d(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), working.");
}
Kemudian jalankan aplikasi Anda. Anda akan melihat baris seperti ini di Monitor Android:
(Saya tidak tahu mengapa ada baris dengan pesan kesalahan)
Sekarang cobalah untuk benar-benar menggunakan beberapa kode openCV. Pada contoh di bawah ini saya menyalin file .jpg ke direktori cache aplikasi cvtest1 pada emulator android. Kode di bawah ini memuat gambar ini, menjalankan algoritme deteksi tepi cerdik dan kemudian menulis hasilnya kembali ke file .png di direktori yang sama.
Letakkan kode ini tepat di bawah kode dari langkah sebelumnya dan ubahlah agar sesuai dengan file / direktori Anda sendiri.
String inputFileName="simm_01";
String inputExtension = "jpg";
String inputDir = getCacheDir().getAbsolutePath(); // use the cache directory for i/o
String outputDir = getCacheDir().getAbsolutePath();
String outputExtension = "png";
String inputFilePath = inputDir + File.separator + inputFileName + "." + inputExtension;
Log.d (this.getClass().getSimpleName(), "loading " + inputFilePath + "...");
Mat image = Imgcodecs.imread(inputFilePath);
Log.d (this.getClass().getSimpleName(), "width of " + inputFileName + ": " + image.width());
// if width is 0 then it did not read your image.
// for the canny edge detection algorithm, play with these to see different results
int threshold1 = 70;
int threshold2 = 100;
Mat im_canny = new Mat(); // you have to initialize output image before giving it to the Canny method
Imgproc.Canny(image, im_canny, threshold1, threshold2);
String cannyFilename = outputDir + File.separator + inputFileName + "_canny-" + threshold1 + "-" + threshold2 + "." + outputExtension;
Log.d (this.getClass().getSimpleName(), "Writing " + cannyFilename);
Imgcodecs.imwrite(cannyFilename, im_canny);
Jalankan aplikasi Anda. Emulator Anda harus membuat gambar "tepi" hitam dan putih. Anda dapat menggunakan Monitor Perangkat Android untuk mengambil output atau menulis aktivitas untuk menunjukkannya.
The Gotcha :
- Jika Anda menurunkan platform target Anda di bawah KitKat, beberapa pustaka OpenCV tidak akan berfungsi lagi, khususnya kelas yang terkait org.opencv.android.Camera2Renderer dan kelas terkait lainnya. Anda mungkin dapat menyiasatinya dengan hanya menghapus file .java OpenCV apprpriate.
- Jika Anda menaikkan platform target Anda ke Lollipop atau di atas, contoh saya memuat file mungkin tidak berfungsi karena penggunaan path file absolut disukai. Jadi, Anda mungkin harus mengubah contoh untuk memuat file dari galeri atau di tempat lain. Ada banyak contoh yang beredar.