OpenCV en Android Studio


Quiero usar la biblioteca OpenCV en mi aplicación con Android Studio. Seguí las instrucciones que se encuentran aquí pero obtengo un error

No se encontró la configuración con el nombre 'default'

¿Qué puede estar mal?

Uso Android Studio 1.0 con gradle 2.2.1.

Author: Hakam Fostok, 2014-12-10

6 answers

Los siguientes pasos para usar Android OpenCV sdk en Android Studio. Esta es una versión simplificada de esto(1) Así que responde.

  1. Descargar último sdk de OpenCV para Android desde OpenCV.org y descomprimir el archivo zip.
  2. Importar OpenCV a Android Studio, Desde Archivo -> Nuevo -> Módulo de importación, elija sdk/java carpeta en el archivo opencv descomprimido.
  3. Update build.gradle bajo OpenCV importado módulo para actualizar 4 campos para que coincidan con la compilación de su proyecto.gradle a) compileSdkVersion b) buildToolsVersion c) minSdkVersion y d) targetSdkVersion.
  4. Agregue la dependencia del módulopor Aplicación -> Configuración del módulo, y seleccione la pestaña Dependencias. Haga clic + icono en la parte inferior, elija Dependencia del módulo y seleccione el módulo OpenCV importado.
    • Para Android Studio v1. 2. 2, para acceder a la configuración del módulo : en la vista proyecto, haga clic derecho en el módulo dependiente - >Abrir la configuración del módulo
  5. Copiar libs carpeta bajo sdk/nativo a Android Studio bajo app/src/main.
  6. En Android Studio, cambie el nombre del directorio copiado libs a jniLibs y hemos terminado.

El paso (6) es desde que Android studio espera libs nativas en app/src/main/jniLibs en lugar de la carpeta anterior libs. Para aquellos nuevos en Android OpenCV, no miss pasos a continuación

  • include static{ System.loadLibrary("opencv_java"); } (Nota: para OpenCV versión 3 en este paso, debería cargar la biblioteca opencv_java3.)
  • Para el paso(5), si ignora cualquier lib de plataforma como x86, asegúrese de que su dispositivo/emulador no esté en esa plataforma.

OpenCV escrito está en C/C++. Las envolturas de Java son

  1. Android OpenCV SDK - OpenCV.org mantenido Android Java wrapper. Sugiero esta.
  2. OpenCV Java - OpenCV.org mantenido auto generado escritorio Java wrapper.
  3. JavaCV - Popular Java wrapper mantenido por desarrolladores independientes. No específico para Android. Esta biblioteca podría no estar sincronizada con las versiones más recientes de OpenCV.
 274
Author: Kiran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-13 17:55:26

Integración de OpenCV v3.1.0 en Android Studio v1.4.1, instrucciones con detalles adicionales y esto-es-lo-que-debe-obtener capturas de pantalla de tipo.

La mayor parte del crédito va a Kiran, Kool, 1", y SteveLiles en opencv.org por sus explicaciones. Estoy agregando esta respuesta porque creo que la interfaz de Android Studio ahora es lo suficientemente estable como para trabajar con este tipo de cosas de integración. También tengo que escribir estas instrucciones de todos modos para nuestro proyecto.

Los desarrolladores experimentados de A. S. encontrarán algo de esto pedante. Esta respuesta está dirigida a personas con experiencia limitada en Android Studio.

  1. Crea un nuevo proyecto de Android Studio usando el asistente para proyectos (Menú:/File/New Project):

    • Llámalo " cvtest1 "
    • Factor de forma: API 19, Android 4.4 (KitKat)
    • Actividad en blanco llamada Actividad principal

      Usted debe tener un cvtest1 directorio donde se almacena este proyecto. (la barra de título de Android studio te muestra dónde está cvtest1 cuando abres el proyecto)

  2. Verifica que tu aplicación se ejecute correctamente. Intente cambiar algo como el texto" Hola Mundo " para confirmar que el ciclo de compilación/prueba está bien para usted. (Estoy probando con un emulador de un dispositivo API 19).

  3. Descargue el paquete OpenCV para Android v3.1.0 y descomprímalo en algún directorio temporal en alguna parte. (Asegúrese de que es el paquete específicamente para Android y no solo el paquete OpenCV para Java.) Voy a llamar a este directorio " unzip-dir" Debajo de unzip-dirdebería tener un directorio sdk/native/libscon subdirectorios que comienzan con cosas como arm..., mips... y x86... (uno para cada tipo de "arquitectura" en la que se ejecuta Android)

  4. Desde Android Studio importa OpenCV en tu proyecto como un módulo: Menu: / File / New / Import_Module :

    • Source-directory: {unzip-dir} / sdk / java
    • Nombre del módulo: Android studio rellena automáticamente este campo con openCVLibrary310 (el nombre exacto probablemente no importa, pero vamos a ir con esto).
    • Haga clic en siguiente. Se obtiene una pantalla con tres casillas de verificación y preguntas sobre jars, bibliotecas y opciones de importación. Los tres deben ser revisados. Haga clic en Fin.

      Android Studio comienza a importar el módulo y se le muestra un import-summary.txt archivo que tiene una lista de lo que no se importó (en su mayoría archivos javadoc) y otras piezas de información. introduzca la descripción de la imagen aquí

      Pero también recibe un mensaje de error que dice no pudo encontrar el objetivo con la cadena de hash 'android-14'.... Esto sucede porque la construcción.el archivo gradle en el archivo zip OpenCV que descargaste dice que compilar usando la versión de la API de Android 14, que, por defecto, no tienes con Android Studio v1.4.1. introduzca la descripción de la imagen aquí

  5. Abra el diálogo estructura del proyecto (Menú :/File/Project_Structure). Seleccione el módulo "app", haga clic en la pestaña Dependencies y agregue :openCVLibrary310 como Dependencia del módulo. Cuando seleccione Add/Module_Dependency debería aparecer en la lista de módulos que puede agregar. Ahora aparecerá como una dependencia, pero obtendrá algunos más no se puede encontrar-android-14 errores en el registro de eventos.

  6. Mira en la compilación .gradle archivo para tu módulo de app. Hay construcción múltiple.gradle archivos en un proyecto de Android. El que desea está en el directorio cvtest1/app y desde la vista de proyecto se ve como build.gradle (Module: app) . Tenga en cuenta los valores de estos cuatro campos:

    • compileSdkVersion (mine says 23)
    • buildToolsVersion (mine says 23.0.2)
    • minSdkVersion (mina dice 19)
    • targetSdkVersion (mine says 23)
  7. Su proyecto ahora tiene un directorio cvtest1 / OpenCVLibrary310 pero no es visible desde la vista del proyecto:

introduzca la descripción de la imagen aquí

Use alguna otra herramienta, como cualquier administrador de archivos, y vaya a este directorio. También puede cambiar la vista del proyecto de Android a Archivos de Proyecto y usted puede encontrar este directorio como se muestra en esta captura de pantalla: introduzca la descripción de la imagen aquí

Dentro hay otra construcción.archivo gradle (está resaltado en la captura de pantalla anterior). Actualice este archivo con los cuatro valores del paso 6.

  1. Resynch su proyecto y luego limpiar / reconstruir. (Menu: / Build / Clean_Project ) Debería limpiar y compilar sin errores y usted debería ver muchas referencias a :openCVLibrary310 en el 0:Mensajes pantalla.

    introduzca la descripción de la imagen aquí

    En este punto, el módulo debería aparecer en la jerarquía del proyecto como openCVLibrary310, al igual que app. (Tenga en cuenta que en ese pequeño menú desplegable cambié de Project View a Android View ). También debería ver una compilación adicional .gradle archivo bajo "Gradle Scripts", pero encuentro que la interfaz de Android Studio es un poco defectuosa y, a veces, no lo hace de inmediato. Así que inténtalo resincronización, limpieza, incluso reiniciar Android Studio.

    Debería ver el módulo openCVLibrary310 con todas las funciones OpenCV en java como en esta captura de pantalla:

    introduzca la descripción de la imagen aquí

  2. Copie el directorio {unzip-dir}/sdk/native/libs (y todo bajo él) a su proyecto Android, a cvtest1 / OpenCVLibrary310/src / main / , y luego cambie el nombre de su copia de libsa jniLibs. Ahora deberías tener un directorio cvtest1/OpenCVLibrary310/src/main/jniLibs. Resynch su proyecto y este directorio debe ahora aparece en la vista de proyecto bajo openCVLibrary310 .

    introduzca la descripción de la imagen aquí

  3. Vaya al método onCreate de MainActivity.java y añadir este código:

    if (!OpenCVLoader.initDebug()) {
        Log.e(this.getClass().getSimpleName(), "  OpenCVLoader.initDebug(), not working.");
    } else {
        Log.d(this.getClass().getSimpleName(), "  OpenCVLoader.initDebug(), working.");
    }
    

    Luego ejecute su aplicación. Deberías ver líneas como esta en el monitor de Android: introduzca la descripción de la imagen aquí (I don't know why that line with the error message is allí)

  4. Ahora intenta usar código OpenCV. En el siguiente ejemplo copié un .archivo jpg en el directorio de caché de la aplicación cvtest1 en el emulador de Android. El siguiente código carga esta imagen, ejecuta el algoritmo de detección canny edge y luego escribe los resultados de nuevo a .archivo png en el mismo directorio.

    Ponga este código justo debajo del código del paso anterior y alterarlo para que coincida con sus propios archivos/directorios.

    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);
    
  5. Ejecutar su aplicación. Su emulador debe crear una imagen de "borde" en blanco y negro. Puede utilizar el Monitor del dispositivo Android para recuperar la salida o escribir una actividad para mostrarla.

El Gotchas :

  • Si baja su plataforma de destino por debajo de KitKat, algunas de las bibliotecas OpenCV ya no funcionarán, específicamente las clases relacionadas con org.opencv.androide.Camera2Renderer y otras clases relacionadas. Usted puede conseguir probablemente alrededor de esto simplemente eliminando el apprriate OpenCV .archivos java.
  • Si eleva su plataforma de destino a Lollipop o superior, mi ejemplo de carga de un archivo podría no funcionar porque el uso de rutas de archivo absolutas está mal visto. Por lo tanto, es posible que tenga que cambiar el ejemplo para cargar un archivo de la galería o en otro lugar. Hay numerosos ejemplos flotando alrededor.
 132
Author: ssimm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-14 18:34:21

Para todos los que sintieron que querían huir con todos los pasos y capturas de pantalla en el (¡genial!) por encima de las respuestas, esto funcionó para mí con android studio 2.2.1:

  1. Crea un nuevo proyecto, nómbralo como quieras y toma el predeterminado (minSdkVersion 15 está bien).
  2. Descargue el archivo zip desde aquí: https://sourceforge.net/projects/opencvlibrary/files/opencv-android / (He descargado la versión 3.1.0, pero puede haber versiones más recientes).
  3. Descomprimir el archivo zip, el mejor lugar está en la carpeta de su espacio de trabajo, pero en realidad no importa.
  4. Dentro de Android Studio, haga clic en File->New-> Import Module y vaya a \path_to_your_unzipped_file\OpenCV-android-sdk\sdk\java y presione Aceptar, luego acepte todos los diálogos predeterminados.
  5. En el archivo gradle de su módulo app, agregue esto al bloque de dependencias:

    dependencies {
        compile project(':openCVLibraryXYZ')
        //rest of code
    }
    

Donde XYZ es la versión exacta que descarga, por ejemplo en mi caso:

    dependencies {
        compile project(':openCVLibrary320')
        //rest of code
    }
 32
Author: yshahak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-17 13:41:30

Se muestra a cualquiera que tenga problemas al crear jniLibs cpp ..solo agrega ndk ..

 0
Author: Aklesh Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-17 13:41:02

Integración de Opencv con android studio

Aquellos que quieran tener un video de youtube para el mismo, probar con la última versión de opencv aunque(3.4.0), mi suerte no fue lo suficientemente buena para la versión mostrada(2.4.9)(opencv releases).

 0
Author: Prakhar1001,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-20 22:34:19

También puede agregar esta biblioteca a la compilación.gradle

dependencies{
   compile 'org.opencv:opencv-android:2.4.8'
}
 -3
Author: Istiyak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-16 16:32:28