2014-02-17 3 views
1

Я установил Java API OpenCV 2.4.8 для воспроизведения с примером обнаружения лица, который указан в 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: createsamples и traincascade. Вы также можете использовать функции Haar и LBP, но функции Haar немного лучше распознают лицо. (И кстати: не используйте haartraining).

+0

Спасибо, почему вы советуете против использования haarttraining? Я знаю, что 'opencv_traincascade' заменил' opencv_haartraining' с некоторой версии 2.X, так что последнее устарело. Также я слышу, что «opencv_haartraining» слишком медленный. Знаете ли вы о каких-либо других нежелательных чертах haartraining? – Rhubarb

+0

Во-первых: поскольку «haartraining» больше не поддерживается, вы найдете очень мало информации об использовании его. Во-вторых: зачем использовать больше программ, если вы можете использовать только один (если вы хотите изменить тип функций, но не данные обучения, вам нужно сбросить только соответствующий параметр). –

1

Это потому, что выбранный вами метод faceDetector решил использовать lbpcascade_frontalface.xml, который недостаточно хорош, по крайней мере, не смог обнаружить все лица на картинке, которую вы использовали.

Вы можете изменить использование haarcascade_frontalface_alt.xml в папке opencv-2.4.8 \ sources \ data \ haarcascades. Тогда все грани будут обнаружены.

Вот следующий результат: enter image description here, более подробной информации можно найти: http://www.pkuaas.org/?uid-1140-action-viewspace-itemid-3224

Смежные вопросы