Saya ingin menggunakan pustaka OpenCV di aplikasi saya dengan Android Studio. Saya mengikuti instruksi yang ditemukan di sini tetapi saya mendapatkan kesalahan
Konfigurasi dengan nama 'default' tidak ditemukan
Apa yang salah?
Saya menggunakan Android Studio 1.0 dengan gradle 2.2.1.
android
opencv
android-studio
gradle
Bartosz Bialecki
sumber
sumber
native
direktori di bawahsdk
direktori saya. Apakah saya kehilangan sesuatu?Jawaban:
Langkah-langkah di bawah ini untuk menggunakan Android OpenCV SDK di Android Studio. Ini adalah versi yang disederhanakan dari ( 1 ) jawaban SO ini.
Langkah (6) adalah karena Android studio mengharapkan lib asli di dalam folder yang
app/src/main/jniLibs
lebih lamalibs
. Bagi mereka yang baru mengenal Android OpenCV, jangan lewatkan langkah-langkah di bawah inistatic{ System.loadLibrary("opencv_java"); }
(Catatan: untuk OpenCV versi 3 pada langkah ini Anda harus memuat pustakaopencv_java3
.)OpenCV ditulis dalam C / C ++. Pembungkus Java
sumber
javadocs
direktori? Ini juga meminta saya untuk menginstalandroid sdk 14
meskipun saya menargetkan perangkat yang mendukungandroid sdk 15
sdk
direktori instalasi pada sistem saya sementara Anda berbicara tentang direktori yang datang dengan.Android Open CV SDK
Oke selesaikan langkah 6. Di mana saya termasukstatic{ System.loadLibrary("opencv_java"); }
?android-14
kesalahan setelah mengimpor modul pada langkah 2, Anda perlu mengedit secara manualbuild.gradle
di direktori openCV di proyek Anda seperti yang ditunjukkan pada langkah 3.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):
Aktivitas Kosong bernama MainActivity
Anda harus memiliki direktori cvtest1 tempat proyek ini disimpan. (bilah judul Android studio menunjukkan di mana cvtest1 adalah saat Anda membuka proyek)
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 :
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:
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:
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.
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 :
sumber
OpenCV error: Cannot load info library for OpenCV
2java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/www.deven.com.opencv-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libopencv_java3.so
Apa kesalahan ini tentang saya lakukan langkah demi langkah seperti yang Anda tulis.Untuk semua orang yang merasa ingin melarikan diri dengan semua langkah dan tangkapan layar pada jawaban (hebat!) Di atas, ini berhasil bagi saya dengan
android studio 2.2.1
:Android Studio
, klikFile->New-> Import Module
dan navigasikan ke\path_to_your_unzipped_file\OpenCV-android-sdk\sdk\java
dan tekan Ok, lalu terima semua dialog default.Dalam
gradle
fileapp
modul Anda , tambahkan ini ke blok dependensi:Di mana XYZ adalah versi persis yang Anda unduh, misalnya dalam kasus saya:
sumber
Android Studio 3.4 + OpenCV 4.1
Unduh file zip OpenCV terbaru dari sini (versi terbaru saat ini adalah 4.1.0) dan unzip di ruang kerja Anda atau di folder lain.
Buat proyek Android Studio baru secara normal. Klik
File->New->Import Module
, navigasikan ke/path_to_unzipped_files/OpenCV-android-sdk/sdk/java
, tentukan Nama modul sebagaiopencv
, klikNext
dan hapus centang semua opsi di layar.Memungkinkan
Project
mode tampilan file (mode default adalahAndroid
). Dalamopencv/build.gradle
perubahan berkasapply plugin: 'com.android.application'
untukapply plugin: 'com.android.library'
dan menggantiapplication ID "org.opencv"
dengan(sesuai dengan nilai-nilai dalam
app/build.gradle
). Sinkronkan proyek dengan file Gradle.Tambahkan string ini ke blok dependensi dalam
app/build.gradle
filePilih lagi
Android
mode tampilan file. Klik kanan padaapp
module dan gotoNew->Folder->JNI Folder
. Pilih ubah lokasi folder dan atursrc/main/jniLibs/
.Pilih lagi
Project
mode tampilan file dan salin semua folder dari/path_to_unzipped_files/OpenCV-android-sdk/sdk/native/libs
keapp/src/main/jniLibs
.Sekali lagi dalam
Android
mode tampilan file klik kanan padaapp
modul dan pilihLink C++ Project with Gradle
. Pilih Bangun Sistemndk-build
dan jalur keOpenCV.mk
file/path_to_unzipped_files/OpenCV-android-sdk/sdk/native/jni/OpenCV.mk
.path_to_unzipped_files
tidak boleh mengandung spasi apa pun, atau Anda akan mendapatkan kesalahan!Untuk memeriksa inisialisasi OpenCV tambahkan pesan Toast di MainActivity
onCreate()
metode :Jika inisialisasi berhasil, Anda akan melihat
true
di pesan Toast lain yang akan Anda lihatfalse
.sumber
application ID "org.opencv"
string dengan dua string:minSdkVersion 21
dantargetSdkVersion 28
(sesuai dengan nilai dalam file app / build.gradle)Siapa saja yang menghadapi masalah saat membuat jniLibs cpp ditampilkan .. cukup tambahkan ndk ..
sumber
Ini bekerja untuk saya dan semudah menambahkan ketergantungan gradle:
https://bintray.com/seesaa/maven/opencv#
https://github.com/seesaa/opencv-android
Satu peringatan adalah bahwa saya harus menggunakan perangkat debugging perangkat keras karena emulator lengan berjalan terlalu lambat untuk saya (seperti yang dikatakan oleh Manajer AVD), dan, seperti yang dijelaskan pada README repo, versi ini tidak termasuk dukungan x86 atau x86_64.
Tampaknya untuk membangun dan tes yang disarankan:
memuntahkan sekelompok output yang terlihat benar bagi saya.
sumber
Di build.gradle Anda
Lebih banyak info
sumber