2016-01-22 17 views
5

私はopenCVライブラリを初めて使用しています。私はそれを使って目を検出したい。Android用OpenCV:カスケード分類子エラーの読み込みに失敗しました

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

チュートリアルでは、OpenCVの2.4.6を使用していますが、私は私のプロジェクトでバージョン3.1をダウンロードしている:私はこのチュートリアルで利用可能なFdActivityコードを使用しています。バージョンの違いにより、コアの代わりにimgprocからputText、rectangle、およびcircleを使用する行を変更しました。これはすべて私が変えたものです。 resフォルダの下の生のフォルダにhaarcascade_lefteye_2splits.xmlとlbpcascade_frontalface.xmlを追加しました。

私はlogcatでこのエラーを取得するアプリを実行している:

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(); 

        } 

私はへのパスを推測:mJavaDetectorまたはmJavaDetectorEyeが空の場合にのみ、これらの行から生成される

failed to load cascade classifier 

"haarcascade_eye_right.xml"が正しくないか、XMLファイルが存在しない場合は、エラーの原因は何ですか?

はいの場合、xmlファイルはどのようにして保存できますか?いいえ、問題の原因は何ですか?

注:Androidスタジオを使用しています。

私はしばらく試してきましたが、私はそれを解決できませんでした。

答えて

14

私はそれを得ました。私はWHYについては考えがありません。 ...

mJavaDetector = new CascadeClassifier(mCascadeFile.getAbsolutePath()); 
//must add this line 
mJavaDetector.load(mCascadeFile.getAbsolutePath()); 

...

それは私のために動作します。

+0

これは間違いなくバグです。すでにパスがload()を呼び出すはずです。時間を節約してくれてありがとう! –

+0

omg、私は十分な@ウィリアム劉さんに感謝することはできません... githubとすべての例と比較して、これに時間と時間を費やし、そして最後にそのopencvバグ....ありがとうウィリアム。 :-) – Santosh

+0

愚かなopencv ... – user25

関連する問題