JavaCV + Android Studio + gradle- posible?
Estoy intentando usar JavaCV con Android Studio y Gradle. Escribí este fragmento de código:
repositories { mavenCentral() maven { url "http://maven2.javacv.googlecode.com/git/" } } dependencies { compile files('libs/android-support-v4.jar') compile group: 'com.googlecode.javacpp', name: 'javacpp', version: '0.5' compile group: 'com.googlecode.javacv', name: 'javacv', version: '0.5' }
y veo bibliotecas importadas en dir Bibliotecas externas. Así que traté de ejecutar esto:
- Android-opencv conversión mat a escala de grises con el uso de matToBitmap / bitmapToMat
- Cómo obtener efecto de color mágico como escáner de cámara utilizando OpenCV
- Detección de objetos reales utilizando la cámara. Posibilidades de encontrar objetos reales usando cámara
- Gradle android build para diferentes arquitecturas de procesador
- Error de enlace no satisfecho - OpenCV para Android No nativo
... IplImage zdjecie=cvLoadImage(Environment.getExternalStorageDirectory().getPath()+ "/1.bmp"); cvSaveImage(Environment.getExternalStorageDirectory().getPath() + "/2.bmp", zdjecie); ...
y tengo error:
Caused by: java.lang.UnsatisfiedLinkError: Couldn't load jniopencv_core: findLibrary returned null
… porque no sé qué debo hacer con los archivos de opencv (y otros) .so.
Entonces, ¿cómo debemos usar JavaCV en Android Studio?
- ClassNotFoundException: android.hardware.camera2.CameraAccessException con OpenCV 3.1.0
- Mejorar el rendimiento de Tesseract con OpenCV en Android
- Pasar una matriz de Mats a código nativo
- Cómo integrar el gestor de opencv en una aplicación para Android
- Convertir mapa de bits de Android a OpenCV Mat y hacia atrás
- Detección de objetos para android con tesseract o OpenCV
- Eclipse - Método NewStringUTF () no se pudo resolver
- Detección de elipse con OpenCV
La inserción dentro de las dependencias build.gradle
funcionó para mí:
compile 'org.bytedeco:javacv:+' compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.10–0.10', classifier: 'android-arm' compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.5.1–0.10', classifier: 'android-arm'
1.ADVERTENCIA: ¡ Eso no es suficiente !:
dependencies { compile group: 'org.bytedeco', name: 'javacv', version: '0.9'}
2.EDIT: Lo siento por error, mi reciente solución que he publicado aquí y que dijo sólo sobre la línea anterior estaba mal. Pero lo he comprobado y esto funciona para mí:
a) Añadir dependencias
dependencies { compile group: 'org.bytedeco', name: 'javacv', version: '0.9' compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.9-0.9', classifier: 'android-arm' compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.3-0.9', classifier: 'android-arm' }
b) Crear jniLibs dir dentro de su proyecto (en el mismo nivel que las librerías normales dir.) EDIT: Si tiene algunos problemas, trate de mover jniLibs a app / src / main).
c) Agregue los archivos requeridos .so extraídos de opencv-android-arm.jar y ffmpeg-android-arm.jar (o sólo los archivos que realmente necesita) para crear jniLibs dir. (Si no sabes lo que estoy hablando, puedes descargar javacv-0.9-bin.zip desde la página de JavaCV y en su interior puedes encontrar estos 2 .jars).
Para obtener una solución actualizada (JavaCV 1.1 y Android Studio 2.1.1), consulte mis instrucciones paso a paso en mi Gist . JavaCV 1.2 actualmente no le gusta Android 6.
Este tut utilizará JavaCV 1.1, versión 1.2 tiene actualmente SIGSEGV cuestión . JavaCV 1.1 viene con FFmpeg 2.8.1.
- Obtener los binarios prebulit aquí .
- Extraerlo y copiar estos archivos:
- javacpp.jar ( esencial ).
- javacv.jar ( esencial ).
- ffmpeg.jar ( esencial si utiliza FFmpeg ).
- ffmpeg-android-arm.jar (para la CPU del brazo).
- ffmpeg-android-x86.jar (opcional para CPU x86). en la carpeta
libs
de su proyecto (app/libs
en mi caso).
- Haga clic en la
app
->F4
->Dependencies
->+
->File dependencies
-> elegir todos los .jar anterior. - Temporalmente, debido a este problema , necesitamos establecer
targetSdkVersion 22
la aplicación. - Posiblemente necesite establecer estas
build.gradle
packagingOptions
en elbuild.gradle
:
android {compileSdkVersion 23 buildToolsVersion "23.0.3"
defaultConfig { applicationId "com.example.test" minSdkVersion 16 targetSdkVersion 22 versionCode 1 versionName "1.0" } packagingOptions { exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.properties' exclude 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.xml' //might need these if you use openCV //exclude 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.properties' //exclude 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.xml' }
}
Desafortunadamente, tuve algunos problemas con la solución de user2645214 (todavía obteniendo java.lang.UnsatisfiedLinkError), pero encontré otro, así que decidí compartirlo con aquellos que tendrían el mismo problema.
Desde la versión 0.7.3 hay otra forma de incluir sus archivos * .so – solo puede ponerlos en / src / main / jniLibs (solo cree el directorio jniLibs si no lo tiene) y debería funcionar.
También mi archivo build.gradle se ve así:
apply plugin: 'android' repositories { mavenCentral() maven { url 'http://maven2.javacv.googlecode.com/git/' } } dependencies { compile 'com.android.support:appcompat-v7:20.+' compile 'com.googlecode.javacpp:javacpp:0.7' compile 'com.googlecode.javacv:javacv:0.7' } android { compileSdkVersion 20 buildToolsVersion '20.0.0' defaultConfig { applicationId "com.example.agp.testapplication2" minSdkVersion 15 targetSdkVersion 20 versionCode 1 versionName "1.0" } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
Me enfrenté a este problema en Windows 7 x64. Esta es una sección de mi archivo gradle.build que resolvió el problema:
compile("org.bytedeco:javacv:0.11") compile("org.bytedeco.javacpp-presets:opencv:2.4.11-0.11:windows-x86_64") compile("org.bytedeco.javacpp-presets:ffmpeg:2.6.1-0.11:windows-x86_64")
EDITAR. La solución en esta publicación está obsoleta y puede contener algunos errores. Por favor vea la publicación reciente y correcta en la parte inferior de la página.
Ok, lo hice por mi cuenta :). Así que aquí es lo que debemos hacer para usar JavaCV en Android Studio:
1) Primero debemos agregar tales dependencias a build.gradle dentro del proyecto:
dependencies { compile group: 'com.googlecode.javacpp', name: 'javacpp', version: '0.7' compile group: 'com.googlecode.javacv', name: 'javacv', version: '0.7'}
(Quiero decir: build.gradle dentro de nuestro directorio de módulos)
Gracias por obtener javacv.jar y javacpp.jar dentro de bibliotecas externas (si no, debemos reiniciar Android Studio).
2) Si seguimos la instrucción de Eclipse en el sitio oficial de javacv estamos ahora en el punto 4 .:
Extraiga todos los archivos * .so de javacv-android-arm.jar, opencv-2.4.8-android-arm.jar, y ffmpeg-2.1.1-android-arm.jar directamente en el nuevo "libs / armeabi" , sin crear ninguno de los subdirectorios encontrados en los archivos JAR.
Tenemos que extraer todos los archivos * .so que necesitamos, pero luego debemos unirlos a nuestro proyecto de otra manera especial: la tercera respuesta aquí dice sobre ello, pero en general, deberíamos:
- Crear un nuevo directorio 'armeabi'
- Ponga interesantes archivos .so en el directorio 'armeabi'
- Crear armeabi.zip
- Cambiar la extensión de armeabi.zip a armeabi.jar
- Poner armeabi.jar en el directorio 'libs'
- Asegúrese de que build.gradle de nuestro módulo contiene dicha dependencia:
compile fileTree (dir: 'libs', incluya: ['* .jar'])
3) Disfruta de tu OpenCV y JavaCv en Android Studio (y no te olvides de añadir
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
a tu AndroidManifest.xml si quieres leer / guardar la imagen de / a sdcard y intenta agradecer esto, que tu proyecto funcione bien).
////////////////////////////////////////////////// ///////
Si algo está mal, por favor escríbalo en los comentarios.
Si intenta con javacv 1.2, tenemos que hacer algunos pasos adicionales para que esto funcione. Aquí está mi archivo build.gradle
android { compileSdkVersion 24 buildToolsVersion "24.0.2" defaultConfig { applicationId "org.audiorecording" minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } packagingOptions { exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.properties' exclude 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.xml' //might need these if you use openCV exclude 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.properties' exclude 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.xml' } } repositories { mavenCentral() } configurations { all*.exclude group: 'org.bytedeco', module: 'javacpp-presets' } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:24.2.1' compile 'com.android.support:design:24.2.1' compile 'org.bytedeco:javacv:1.2' compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '3.1.0-1.2', classifier: 'android-arm' compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '3.0.2-1.2', classifier: 'android-arm' }
- Desactivado Llamar a 'ejecutar (Params …)' como miembro de tipo raw 'android.os.AsyncTask'
- ¿Qué es FCM token en Firebase?