OpenCV para Android: Error al cargar el error del clasificador en cascada
Esta es la primera vez que uso openCV biblioteca. Quiero usarlo para detectar los ojos. He utilizado el código FdActivity
disponible en este tutorial:
Http://romanhosek.cz/android-eye-detection-updated-for-opencv-2-4-6/
- Cómo obtener valores de BuildConfig desde xml?
- WYSIWYG View Editor en 'Android'?
- El atributo del paquete AndroidManifest.xml <manifiesto> no tiene ningún espacio de nombres
- ¿Cómo mantener la consistencia con XML drawables a través de diferentes tamaños de pantalla?
- Barra de herramientas que se superpone debajo de la barra de estado
El tutorial utiliza OpenCV 2.4.6, pero he descargado la versión 3.1 en mi proyecto. Debido a las diferencias de versión he cambiado las líneas que utilizan putText, rectángulo y círculo para importar desde imgproc en lugar de Core. Esto es todo lo que he cambiado. He añadido haarcascade_lefteye_2splits.xml y lbpcascade_frontalface.xml a la carpeta raw en la carpeta res.
Al ejecutar la aplicación, obtengo este error en el logcat:
failed to load cascade classifier
Que sólo se genera a partir de estas líneas en si mJavaDetector o mJavaDetectorEye está vacío:
try { // load cascade file from application resources InputStream is = getResources().openRawResource( R.raw.lbpcascade_frontalface); File cascadeDir = getDir("cascade", Context.MODE_PRIVATE); mCascadeFile = new File(cascadeDir, "lbpcascade_frontalface.xml"); FileOutputStream os = new FileOutputStream(mCascadeFile); byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = is.read(buffer)) != -1) { os.write(buffer, 0, bytesRead); } is.close(); os.close(); // --------------------------------- load left eye // classificator ----------------------------------- InputStream iser = getResources().openRawResource( R.raw.haarcascade_lefteye_2splits); File cascadeDirER = getDir("cascadeER", Context.MODE_PRIVATE); File cascadeFileER = new File(cascadeDirER, "haarcascade_eye_right.xml"); FileOutputStream oser = new FileOutputStream(cascadeFileER); byte[] bufferER = new byte[4096]; int bytesReadER; while ((bytesReadER = iser.read(bufferER)) != -1) { oser.write(bufferER, 0, bytesReadER); } iser.close(); oser.close(); mJavaDetector = new CascadeClassifier( mCascadeFile.getAbsolutePath()); if (mJavaDetector.empty()) { Log.e(TAG, "Failed to load cascade classifier"); mJavaDetector = null; } else Log.i(TAG, "Loaded cascade classifier from " + mCascadeFile.getAbsolutePath()); mJavaDetectorEye = new CascadeClassifier( cascadeFileER.getAbsolutePath()); if (mJavaDetectorEye.empty()) { Log.e(TAG, "Failed to load cascade classifier"); mJavaDetectorEye = null; } else Log.i(TAG, "Loaded cascade classifier from " + mCascadeFile.getAbsolutePath()); cascadeDir.delete(); }
Supongo que el camino a "haarcascade_eye_right.xml" no es correcto, o el archivo xml no existe, es esto lo que está causando el error?
En caso afirmativo, ¿cómo puedo tener el archivo xml, y dónde exactamente lo almacenaré? Si no, ¿cuál es la causa del problema?
Nota: uso Android Studio.
Agradecería cualquier ayuda en este sentido, he estado intentando por un tiempo, pero no pude resolverlo.
- Android xml parámetros dibujables
- Configuración de la orientación de la pantalla Actividad de Android con values.xml
- Generar errores con XML a la dependencia del convertidor de objetos de java en build.gradle para retroadaptación
- ¿Cómo puedo convertir un diseño PSD a Android xml?
- ¿Cómo recuperar partes del contenido de Wikipedia en la aplicación para Android?
- android xml El atributo de texto Textview no puede tomar '<' como valor
- Error al ejecutar el objetivo com.jayway.maven.plugins.android.generation2: android-maven-plugin
- ¿Cómo hacer la transición de la aplicación de Youtube en la búsqueda?
Entiendo. Aunque no tengo idea de por qué. …
mJavaDetector = new CascadeClassifier( mCascadeFile.getAbsolutePath() ); //must add this line mJavaDetector.load( mCascadeFile.getAbsolutePath() );
…
esto funciona para mi.
- Las palabras clave de la aplicación Android
- OnBackPress no se llama cuando se muestra la ventana emergente