2014-02-17 25 views
1

我安裝了OpenCV 2.4.8 Java API以使用tutorial中給出的人臉檢測示例進行播放。使用OpenCV 2.4.8人臉檢測性能不佳

在此示例中,lbpcascade_frontalface.xml(它是CascadeClassifier)在檢測他們提供的女性面部圖像(lena.png)時可以正常工作。然而,當我試圖從這種網絡隨機image,分類製作了以下圖片,失蹤4人顯然面臨着(!):

enter image description here

我很失望,因爲我預計(與清對比度)是一個非常容易檢測人臉的圖像。

1)在Java中編碼,是否有可能改進此分類器以檢測此圖片中的所有人臉?或者我需要C++嗎?

2)我看着OpenCV's CascadeClassification web page,看到有可能訓練自己的分類器。但是指令是用C++編寫的。有沒有人使用Java來完成這項工作,還是隻能在C++中完成?

+0

嘗試使用其他級聯,像lbpcascade_frontalface_alt2.xml – berak

回答

1

我救了你的形象和這個C++代碼查找丟失的4個面以及所有其他(注意不同哈爾級聯和最小尺寸):enter image description here

Mat im1 = imread("JuVIA.png", CV_LOAD_IMAGE_COLOR); 

    vector<Rect> faces; 
    CascadeClassifier cascade("C:/local/opencv249/sources/data/haarcascades/haarcascade_frontalface_alt2.xml"); 
    cascade.detectMultiScale(im1, faces, 1.1, 2, 0| CV_HAAR_SCALE_IMAGE, Size(30, 30)); 

    for(vector<Rect>::const_iterator r = faces.begin(); r != faces.end(); r++) 
     cv::rectangle(im1, *r, CV_RGB(255,0,0)); 

    imshow("in", im1); 
    imwrite("miss4.png", im1); 
    waitKey(); 
3

該培訓與任何編程語言無關。

http://docs.opencv.org/doc/user_guide/ug_traincascade.html

你只需要使用包含在OpenCV的庫中有兩個已經寫好的程序:createsamplestraincascade。您也可以使用Haar和LBP功能,但Haar功能在面部檢測方面略勝一籌。 (順便說一下:不要使用haartraining)。

+0

謝謝,你爲什麼建議不要使用haarttraining?我知道'opencv_traincascade'已經取代了'opencv_haartraining',因爲某些版本2.X,所以後者已被棄用。我也聽說'opencv_haartraining'太慢了。你知道其他不良習慣嗎? – Rhubarb

+0

首先:由於「haartraining」不再受支持,因此使用它的幫助很少。第二:爲什麼要使用更多的程序,如果只能使用一個(如果您想更改功能的類型而不是訓練數據,則只需重置相應的參數)。 –

1

這是因爲本教程選擇使用的faceDetector是lbpcascade_frontalface.xml,它不夠好,至少無法檢測到您使用的圖片中的所有面。

您可以更改爲在opencv-2.4.8 \ sources \ data \ haarcascades文件夾下使用haarcascade_frontalface_alt.xml。然後所有的面孔都會被檢測到。

這裏下面是結果:enter image description here,更多詳細信息請參考:http://www.pkuaas.org/?uid-1140-action-viewspace-itemid-3224