Плохая производительность с обнаружением лица OpenCV 2.4.8

Я установил Java API OpenCV 2.4.8, чтобы поиграть с примером обнаружения лиц, который приведен в руководство.

В примере lbpcascade_frontalface.xml, который является CascadeClassifier, работает нормально при обнаружении изображения женского лица (lena.png), которое они предоставляют. Однако, когда я попробовал это на этом случайном изображении из Интернета, классификатор выдал следующее изображение, в котором отсутствуют 4 очевидных(!) лица:

введите здесь описание изображения

Я очень разочарован, потому что я ожидал, что это (с четкими контрастами) будет очень простым изображением для обнаружения лиц.

1) Программирование на Java. Можно ли улучшить этот классификатор, чтобы он обнаруживал все лица на этом изображении? Или мне нужен С++ для этого?

2) я просмотрел веб-страницу OpenCV CascadeClassification и увидел, что можно обучить собственный классификатор. Но инструкции на C++. Кто-нибудь делал это с помощью Java или это возможно только на С++?


person Zhubarb    schedule 17.02.2014    source источник
comment
попробуйте использовать другие каскады, такие как lbpcascade_frontalface_alt2.xml   -  person berak    schedule 22.05.2014


Ответы (3)


Я сохранил ваше изображение, и этот код С++ находит недостающие 4 лица, а также все остальные (обратите внимание на другой каскад Хаара и минимальный размер): введите здесь описание изображения

    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();
person RevJohn    schedule 22.05.2014

Обучение не связано с каким-либо языком программирования.

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

Вам нужно всего лишь использовать две уже написанные программы, включенные в библиотеку opencv: createsamples и traincascade. Вы также можете использовать функции Haar и LBP, но функции Haar немного лучше подходят для распознавания лиц. (И кстати: не используйте обучение).

person Bartis Áron    schedule 17.02.2014
comment
Спасибо, а почему вы не советуете использовать haarttraining? Я знаю, что opencv_traincascade заменил opencv_haartraining начиная с версии 2.X, поэтому последняя устарела. ТАКЖЕ я слышал, что opencv_haartraining работает слишком медленно. Знаете ли вы о каких-либо других нежелательных особенностях haartraining? - person Zhubarb; 18.02.2014
comment
Во-первых: поскольку haartraining больше не поддерживается, вы найдете очень мало помощи по его использованию. Во-вторых: зачем использовать больше программ, если можно использовать только одну (если вы хотите изменить тип функций, но не данные обучения, вам нужно сбросить только соответствующий параметр). - person Bartis Áron; 18.02.2014

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

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

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

person Community    schedule 22.05.2014