2012-02-23 35 views
2

私はこの問題を抱えています。私はAndroidでopenCvライブラリを使って眼鏡を見つけようとしたときにコードが機能しません。私が去る場合眼鏡で目を見つけるOpenCv

LinkedList<org.opencv.core.Rect> occhi = new LinkedList<org.opencv.core.Rect>(); 
        org.opencv.core.Size sOcchi = new org.opencv.core.Size(15, 15); 
        mioClassificatoreOcchiOcchiali.detectMultiScale(matOcchi, occhi,1.1, 2,0,sOcchi); 

結果はinsted常に0である:私は私の分類子を取り、このコードで私はメガネで目を探してみてください。このように

  try { 
      InputStream is = this.getResources().openRawResource(R.raw.haarcascade_eye_tree_eyeglasses); 
      File cascadeDir = this.getDir("cascade"+"occhiOcchiali", Context.MODE_PRIVATE); 
      File cascadeFile = new File(cascadeDir, "haarcascade_eye_tree_eyeglasses.xml"); 
      FileOutputStream os = new FileOutputStream(cascadeFile); 
      byte[] buffer = new byte[4096]; 
      int bytesRead; 
      while ((bytesRead = is.read(buffer)) != -1) { 
       os.write(buffer, 0, bytesRead); 
      } 
      is.close(); 
      os.close(); 
      mioClassificatoreOcchiOcchiali = new CascadeClassifier(cascadeFile.getAbsolutePath()); 
      Log.d("metodo1", cascadeFile.getAbsolutePath()); 
      if (mioClassificatoreOcchiOcchiali.empty()) { 
       Log.d("metodo1", "Failed to load cascade classifier"); 
       mioClassificatoreOcchiOcchiali = null; 
      } else 
       Log.d("metodo1", "Loaded cascade classifier from " + cascadeFile.getAbsolutePath()); 

      cascadeFile.delete(); 
      cascadeDir.delete(); 

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


私のコードは次のようです私の眼鏡、結果は常に2です。
誰も私を助けることができますか?
ありがとうございます。

+0

は、メガネなしで目にHaar分類のためのあなたのコードの仕事をしていますか? – sarwar

+0

はい、それは眼鏡なしでうまくいきます。どうして?あなたは私を助けることができますか? –

答えて

4

私はOpenCVのAndroid実装でプレイしていませんが、通常のバージョンを使用しています。あなたのコードがHaarカスケードで眼鏡ではうまく動作し、眼鏡ではうまく動作しない場合、openCVでパッケージ化された眼+眼鏡カスケードはあまり良くないと思われます。私は同じ面を前面と側面で区別しようとしました。

train a new cascade(これは労働集約型です)、または他の人が訓練したカスケードを調べるfor this caseです。

+0

これは実際にopencvの顔/目の検出に関する問題です。我々は、分類子が訓練された方法に依存している – jlengrand

1

haarcascade_mcs_eyepair_smallという名前のOpencvクラシファイアは、眼鏡の有無に関わらずアンドロイドプロジェクトで良い結果を得ていることがわかりました。実際、それは1つの座標xとyを持つ目のカップルを見つけました。
これは役に立ったと思っています...

2

私のOpenCV Windowsクライアントで眼鏡をかけていない人も同様の問題がありました。数日の掘削とデバッグの後、私は最終的に、モニター自体(と私の大きな白い形)から生成されたグレアが問題を引き起こしていると判断しました。この眩しさは、OpenCVが顔を検出するのを妨げていました。なぜこれは? OpenCVが目を見ることができないなら、顔を見ることはできません。

これよりも小さいAndroidの画面がこの同じ問題を引き起こす可能性があるかどうかはわかりませんが、時間がかかる可能性があります。

ハール・カスケーゼについて...私は、他のレスポンスで参照されているカスケード・ファイルを含め、すべてのカスケード・ファイルを調べました。最高のファイルは、haarcascade_frontalface_alt2.xmlです。私の環境とすべてのタイプの人にとって、このファイルははるかに優れています。

ここにいくつかの例があります。


ませメガネとOpenCVのは、うまく私の顔を検出することはできません。

No glasses and OpenCV can detect a face just fine


をグレア私の白いフォームから自分のモニターに今私の顔を検出してからOpenCVのを妨げている:

Glare from my white form on my monitor is now preventing OpenCV from detecting a face


私のウェブカメラは、すべてのアップを回転させて最後に、私の眼鏡とOpenCVのにはグレアがうまく私の顔を検出することはできませんがあります:

Rotated webcam

関連する問題