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/
- El fondo del elemento de la lista está cambiando en el desplazamiento
- Android Databinding: "Referencias de métodos con '.' es obsoleto"
- Android: traducciones en recursos
- Cómo usar onclicklistener para ver la cuadrícula
- ¿Cómo puedo añadir una línea blanca 1px horizontal debajo del botón en un diseño relativo?
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.
- Cómo detener a Eclipse de intentar ejecutar archivos XML?
- ¿Por qué no se muestra mi aplicación en Google Play? Ahora publicado
- ¿Cómo cambio el color y / o dibujable del divisor TabWidget en Android?
- Forzar la siguiente palabra a una nueva línea si la palabra es demasiado larga para la vista de texto
- ¿Cómo obtengo un botón para abrir otra actividad en Android Studio?
- String-array dentro de string-array
- Spinner Error al establecer setOnItemSelectedListener
- Dibuja un círculo en una vista (android)
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