2012-02-23 337 views
2

我有這樣的問題,當我試圖找到眼睛與OpenCV庫爲Android眼鏡我的代碼不能正常工作。
我的代碼如下:查找眼睛配眼鏡的OpenCV

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

這樣,我把我的分類,並使用此代碼我試圖找到眼睛配眼鏡:

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

結果總是0 insted的,如果我離開我的眼鏡,結果總是2.
任何人都可以幫助我?
在此先感謝。

+0

做爲Haar分類對眼睛不戴眼鏡代碼的工作? – sarwar 2012-02-23 16:07:05

+0

是的,它沒有眼鏡就能很好地工作。爲什麼?你可以幫助我? – 2012-02-23 16:08:53

回答

4

我還沒有跟Android實現的OpenCV的發揮,但我已經使用了普通版。如果你的代碼適合Haar級聯眼睛而不是戴眼鏡的人,那讓我懷疑用openCV打包的眼睛+眼鏡級聯不太好。我有同樣的問題試圖區分正面和側面。

您可以選擇train a new cascade(這是勞動密集型),也可以查看其他人已經培訓過的級聯for this case

+0

這確實是opencv中面部/眼睛檢測的問題。我們依賴於分類器的訓練方式 – jlengrand 2012-02-23 23:01:59

1

我發現,一個名爲OpenCV的分類haarcascade_mcs_eyepair_small提供良好結果的情況下,使用和不使用眼鏡的Android項目。事實上,它發現了一對座標爲x和y的眼睛。
希望這可能會有所幫助...

2

我也有一個類似的問題,我的OpenCV Windows客戶端沒有看到戴眼鏡的人。經過幾天的挖掘和調試,我終於確定顯示器本身產生的眩光(以及我的大白色表格)引發了這些問題。這種眩光使得OpenCV甚至無法檢測到臉部,更不用說ID了。這是爲什麼?如果OpenCV看不到眼睛,那麼它看不到臉。

我不知道更小的Android屏幕是否會導致同樣的問題,但它可能值得您花時間。

關於哈爾cascases ......我通過每一個級聯文件我能找到,包括其他的反應所引用的那些去了。目前最好的文件是: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