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:

 ... 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?

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.

  1. Obtener los binarios prebulit aquí .
  2. 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).
  3. Haga clic en la app -> F4 -> Dependencies -> + -> File dependencies -> elegir todos los .jar anterior.
  4. Temporalmente, debido a este problema , necesitamos establecer targetSdkVersion 22 la aplicación.
  5. Posiblemente necesite establecer estas build.gradle packagingOptions en el build.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:

  1. Crear un nuevo directorio 'armeabi'
  2. Ponga interesantes archivos .so en el directorio 'armeabi'
  3. Crear armeabi.zip
  4. Cambiar la extensión de armeabi.zip a armeabi.jar
  5. Poner armeabi.jar en el directorio 'libs'
  6. 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' } 
  • Reducción de la reflexión de luz OpenCV
  • ¿Cómo usar OpenCV para procesar la imagen para que el texto se vuelva nítido y claro?
  • Cómo detectar los límites de una página de pasaporte con OpenCV?
  • OpenCV Manager Error al detectar hardware en Galaxy S5
  • Aplicación de Android que utiliza tecnología de reconocimiento de imagen
  • Cambiar el color de un objeto en una aplicación de Android
  • Uso no libre (SIFT, SURF) en android con java
  • Bibliotecas no del sistema en los indicadores de vinculador
  • Construya un subconjunto de OpenCV solamente (en particular para Android)
  • ¿Cómo puedo usar OpenCV con imágenes almacenadas, sin una cámara?
  • Error: 'to_string' no es un miembro de 'std'
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.