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

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.

  • Cómo encontrarViewById () un elemento @android: id / list en una actividad de Android?
  • ¿Cómo cambiar el tema de color de la aplicación Android?
  • Cómo agregar efecto de sombra en drawable en android
  • ¿Cómo funciona el atributo androide Xml android: onClick = "..." trabajo detrás de las escenas?
  • Obtener atributos con estilo para el niño de la definición de estilo de los padres
  • Cómo agregar varios marcos en xml
  • Cómo eliminar los espacios en blanco entre etiquetas en XML
  • ¿Por qué Android Studio siempre muestra ActionBar en el diseño de la aplicación, incluso cuando está deshabilitado?
  • SyncML con Android y servicio Web de PHP
  • Desmarcando archivos XML en objetos Java en Android?
  • Android Diseño de materiales Navegación Vista -> Elemento
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.