Saltar al contenido

OpenCV en Android Studio

Solución:

Los siguientes pasos para usar Android OpenCV sdk en Android Studio. Esta es una versión simplificada de esta (1) respuesta SO.

  1. Descargar el último sdk de OpenCV para Android de OpenCV.org y descomprima el archivo zip.
  2. Importar OpenCV a Android Studio, De Archivo -> Nuevo -> Módulo de importación, escoger sdk / java carpeta en el archivo opencv descomprimido.
  3. Actualizar build.gradle bajo el módulo OpenCV importado para actualizar 4 campos para que coincidan con su proyecto build.gradle a) compileSdkVersion b) buildToolsVersion c) minSdkVersion yd) targetSdkVersion.
  4. Agregar dependencia de módulo por Aplicación -> Configuración del móduloy seleccione el Dependencias pestaña. Hacer 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 del proyecto, haga clic con el botón derecho en el módulo dependiente -> Abrir configuración del módulo
  5. Dupdo libs carpeta debajo sdk / nativo a Android Studio bajo app / src / main.
  6. En Android Studio, cambiar el nombre del copiado libs directorio a jniLibs y hemos terminado.

El paso (6) se debe a que Android Studio espera bibliotecas nativas en app/src/main/jniLibs en lugar de mayores libs carpeta. Para aquellos que son nuevos en Android OpenCV, no se pierdan los siguientes pasos

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

OpenCV escrito está en C / C ++. Los contenedores de Java son

  1. SDK de Android OpenCV – OpenCV.org mantuvo el contenedor Java de Android. Sugiero este.
  2. OpenCV Java – OpenCV.org mantuvo un contenedor Java de escritorio generado automáticamente.
  3. JavaCV – Contenedor de Java popular mantenido por desarrolladores independientes. No es específico de Android. Esta biblioteca podría pierda la sincronización con las versiones más recientes de OpenCV.

Integración de OpenCV v3.1.0 en Android Studio v1.4.1, instrucciones con detalles adicionales y capturas de pantalla del tipo “Esto es lo que debería obtener”.

La mayor parte del crédito es para 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 en este tipo de cosas de integración. También tengo que escribir estas instrucciones de todos modos para nuestro proyecto.

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

  1. Cree un nuevo proyecto de Android Studio con el asistente de proyectos (Menú: / Archivo / Nuevo proyecto):

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

      Deberías tener un cvtest1 directorio donde se almacena este proyecto. (la barra de título de Android Studio le muestra dónde está cvtest1 cuando abre el proyecto)

  2. Verifique que su 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 algún lugar. (Asegúrese de que sea el paquete específico para Android y no solo el paquete OpenCV para Java). Llamaré a este directorio “descomprimir-dir” Debajo descomprimir-dir deberías tener un sdk / native / libs directorio con subdirectorios que comienzan con cosas como brazo…, mips… y x86… (uno para cada tipo de “arquitectura” en la que se ejecuta Android)

  4. Desde Android Studio, importe OpenCV a su proyecto como un módulo: Menú:/ Archivo / Nuevo / Import_Module:

    • Directorio de origen: {unzip-dir} / sdk / java
    • Nombre del módulo: Android Studio completa automáticamente este campo con openCVLibrary310 (el nombre exacto probablemente no importa, pero seguiremos con esto).
    • Haga clic en Siguiente. Aparece una pantalla con tres casillas de verificación y preguntas sobre frascos, bibliotecas y opciones de importación. Deben comprobarse los tres. Haga clic en Terminar.

      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ó (principalmente archivos javadoc) y otras piezas de información.
      ingrese la descripción de la imagen aquí

      Pero también recibe un mensaje de error que dice no se pudo encontrar el objetivo con la cadena hash ‘android-14’ …. Esto sucede porque el archivo build.gradle en el archivo zip OpenCV que descargó dice que se compile usando la versión 14 de la API de Android, que de manera predeterminada no tiene con Android Studio v1.4.1.
      ingrese la descripción de la imagen aquí

  5. Abra el diálogo de estructura del proyecto (Menú: / Archivo / Estructura_proyecto). Seleccione el módulo “aplicación”, haga clic en el Dependencias pestaña y agregar : openCVLibrary310 como dependencia del módulo. Cuando seleccionas Agregar / Module_Dependency debería aparecer en la lista de módulos que puede agregar. Ahora aparecerá como una dependencia, pero obtendrá algunas más. No puedo encontrar Android 14 errores en el registro de eventos.

  6. Mira en el build.gradle archivo para el módulo de su aplicación. Hay varios archivos build.gradle en un proyecto de Android. El que quieres está en el cvtest1 / app directorio y desde la vista del proyecto parece build.gradle (Módulo: aplicación). Tenga en cuenta los valores de estos cuatro campos:

    • compileSDKVersion (el mío dice 23)
    • buildToolsVersion (el mío dice 23.0.2)
    • minSdkVersion (el mío dice 19)
    • targetSdkVersion (el mío dice 23)
  7. Tu proyecto ahora tiene un cvtest1 / OpenCVLibrary310 directorio pero no es visible desde la vista del proyecto:

ingrese 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 desde Androide para Archivos de proyecto y puede encontrar este directorio como se muestra en esta captura de pantalla:
ingrese la descripción de la imagen aquí

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

  1. Vuelve a sincronizar tu proyecto y luego límpialo / reconstruye. (Menú:/ Build / Clean_Project) Debería limpiarse y compilarse sin errores y debería ver muchas referencias a : openCVLibrary310 en el 0 Mensajes pantalla.

    ingrese 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 aplicación. (Tenga en cuenta que en ese pequeño menú desplegable cambié de Vista del proyecto para Vista de Android ). También debería ver un adicional build.gradle archivo en “Gradle Scripts”, pero la interfaz de Android Studio me parece un poco defectuosa y, a veces, no lo hace de inmediato. Así que intente resincronizar, limpiar e incluso reiniciar Android Studio.

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

    ingrese la descripción de la imagen aquí

  2. Copia el {unzip-dir} / sdk / native / libs directorio (y todo lo que hay debajo) a su proyecto de Android, a cvtest1 / OpenCVLibrary310 / src / main /y luego cambie el nombre de su copia de libs para jniLibs. Ahora deberías tener un cvtest1 / OpenCVLibrary310 / src / main / jniLibs directorio. Vuelva a sincronizar su proyecto y este directorio debería aparecer ahora en la vista del proyecto en openCVLibrary310.

    ingrese la descripción de la imagen aquí

  3. Vaya al método onCreate de MainActivity.java y agregue 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ía ver líneas como esta en el monitor de Android:
    ingrese la descripción de la imagen aquí
    (No sé por qué está ahí esa línea con el mensaje de error)

  4. Ahora intente utilizar algún 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 de bordes astuto y luego escribe los resultados en un archivo .png en el mismo directorio.

    Coloque este código justo debajo del código del paso anterior y modifíquelo 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. Ejecute su aplicación. Su emulador debería crear una imagen de “borde” en blanco y negro. Puede usar el Monitor de dispositivo Android para recuperar la salida o escribir una actividad para mostrarla.

los Gotchas:

  • Si baja su plataforma de destino por debajo de KitKat, algunas de las bibliotecas de OpenCV ya no funcionarán, específicamente las clases relacionadas con org.opencv.android.Camera2Renderer y otras clases relacionadas. Probablemente pueda evitar esto simplemente eliminando los archivos .java de OpenCV apropiados.
  • 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 deba cambiar el ejemplo para cargar un archivo desde la galería o en otro lugar. Hay numerosos ejemplos flotando.

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

  1. Cree un nuevo proyecto, asígnele el nombre que desee y tome el predeterminado (minSdkVersion 15 está bien).

  2. Descargue el archivo zip desde aquí: https://sourceforge.net/projects/opencvlibrary/files/opencv-android/ (descargué la versión 3.2.0, pero puede haber versiones más nuevas).

  3. Descomprima el archivo zip, el mejor lugar es en la carpeta de su espacio de trabajo, pero realmente no importa.

  4. Dentro Android Studio, haga clic en File->New-> Import Module y navegar a path_to_your_unzipped_fileOpenCV-android-sdksdkjava y presione Aceptar, luego acepte todos los cuadros de diálogo predeterminados.

  5. En el gradle archivo de tu app módulo, agregue esto al bloque de dependencias:

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

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

    dependencies {
        compile project(':openCVLibrary320')
        //rest of code
    }
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *