2016-01-23 18 views
1

我想用臉部及眼部分類在我的應用程序。這個概念是複製你有Resources.Raw之下,他們用InputStreamOutputStream下應用添加到某個文件夾的分類XML文件的內容,然後嘗試從該文件夾中加載這些分類中的應用程序來使用它們。我使用現有的代碼在這裏爲了這個目的,無法在OpenCV中加載分類爲Android

http://romanhosek.cz/android-eye-detection-updated-for-opencv-2-4-6/

下面是加載分類代碼部分:

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()) { 
        Toast.makeText(getApplicationContext(), "face classifier error", Toast.LENGTH_LONG).show(); 
        Log.e(TAG, "Failed to load cascade face classifier"); 
        mJavaDetector = null; 
       } else 
        Log.i(TAG, "Loaded cascade classifier from " 
          + mCascadeFile.getAbsolutePath()); 

       mJavaDetectorEye = new CascadeClassifier(
         cascadeFileER.getAbsolutePath()); 
       if (mJavaDetectorEye.empty()) { 
        Toast.makeText(getApplicationContext(), "eye classifer error", Toast.LENGTH_LONG).show(); 
        Log.e(TAG, "Failed to load cascade eye classifier"); 
        mJavaDetectorEye = null; 
       } else 
        Log.i(TAG, "Loaded cascade classifier from " 
          + mCascadeFile.getAbsolutePath()); 



       cascadeDir.delete(); 

      } catch (IOException e) { 
       e.printStackTrace(); 
       Log.e(TAG, "Failed to load cascade. Exception thrown: " + e); 
      } 

當運行應用程序我在得到這兩個錯誤信息logcat:

Failed to load cascade face classifier 

Failed to load cascade eye classifier 

從代碼中可以看出,只有在加載分類器時出現問題纔會生成這些代碼。

我用Android的工作室,和OpenCV爲Android 3.1 V。我也嘗試下載最新的SDK構建工具,但這並沒有解決問題。項目。

誰能告訴我怎麼解決這個問題呢?

謝謝。

回答

1

有一個在opencv4android V3.1的錯誤。如果你使用intead 2.4.11版本,它應該工作。我還沒有嘗試3.0版本,所以也許它工作。

問候

+0

你說得對,我這樣做,效果不錯,謝謝你的回答。 – Dania

3

這個問題已經回答了here

它在OpenCV的V3.1中的錯誤,所有你需要做的是修改代碼如下:

 mJavaDetector = new CascadeClassifier(
          mCascadeFile.getAbsolutePath()); 
    mJavaDetector.load(mCascadeFile.getAbsolutePath()); 

 mJavaDetectorEye = new CascadeClassifier(
        cascadeFileER.getAbsolutePath()); 
     mJavaDetectorEye.load(cascadeFileER.getAbsolutePath()); 
相關問題