2015-03-30 2 views
0

Я выполняю обнаружение лица opencv с использованием каскада haar на кадрах из видео.установка параметров обнаружения граничных поверхностей opencv

Каждый кадр имеет размер 256x256, и большинство из них имеют грани, размеры которых варьируются.

Я заметил, что в текущей установке не обнаружено много лиц, и она обнаруживает около одного лица в среднем на каждые 20 ~ 50 кадров.

cscPath='haarcascade_frontalface_default.xml' 
faceCascade=cv2.CascadeClassifier(cscPath) 
image=cv2.imread(file) 
faces=faceCascade.detectMultiScale(
    image, 
    scaleFactor=1.2, 
    minNeighbors=5, 
    minSize=(10,10), 
    flags = cv2.cv.CV_HAAR_SCALE_IMAGE 
) 

Какова была бы оптимальная настройка параметров в этой ситуации?

Должен ли я просто пробовать и пытаться использовать различные настройки параметров?

ответ

1

Чем ниже масштабный коэффициент, тем более точным будет поиск вашего классификатора, однако это также займет больше времени. Он определяет, насколько он изменяет размер изображения, каждый раз, когда он выполняет проход по изображению, ищущему лица. Если вы обнаружите, что ваши лица сильно различаются по масштабу, возможно, стоит снизить это значение до 1,1 (самый низкий) и посмотреть, улучшит ли это ваши результаты.

Также мини-соседи могут сбивать вас с толку, понижая это от 5 до 3, чтобы сказать, что 3 могут улучшить результаты, однако вы также можете получить ложные срабатывания (поднять стену или объект смешной формы), это действительно то, что вы можно настроить, пока вы не получите желаемые результаты.

Я сомневаюсь, что любое из ваших лиц будет < 10 пикселей в поперечнике, поэтому переменная minSize, вероятно, в порядке.

С флагами, может быть проще использовать «флаги = 0», как я думаю, что они становятся устаревшими (однако я могу ошибаться)

Также я предполагаю, что ваши кадры в оттенках серого? как каскад предназначен для работы с серыми изображениями, и я заметил, что вы не делаете никаких функций BGR2GRAY перед передачей изображения в классификатор, вы также можете сделать это, изменив imread строки:

image = cv2.imread(file, 0) 

Также он может стоят даже используя другой классификатор .xml в целом, есть несколько классификаторов лиц доступны с OpenCV, например .:

haarcascade_frontalface_alt

haarcascade_frontalface_alt_tree

haarcascade_frontalface_al t2

Надеюсь, это поможет.

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