Использование OpenCV detectMultiScale для поиска моего лица

Я почти уверен, что у меня общая тема правильная, но я не нахожу никаких лиц. Мой код читается из c=cv2.VideoCapture(0) , то есть видеокамеры компьютера. Затем я получаю следующую настройку, чтобы получить, где находятся грани. Как вы можете видеть, я перебираю различные scaleFactors и minNeighbors, но исправления всегда возвращаются пустым. Я также пробовал каждый из четырех различных XML-файлов haarcascade, включенных в пакет opencv / data / haarcascades.

Какие-нибудь советы?

 while(1): ret, frame = c.read() rects = find_face_from_img(frame) def detect(img, cascade): for scale in [float(i)/10 for i in range(11, 15)]: for neighbors in range(2,5): rects = cascade.detectMultiScale(img, scaleFactor=scale, minNeighbors=neighbors, minSize=(20, 20), flags=cv2.cv.CV_HAAR_SCALE_IMAGE) print 'scale: %s, neighbors: %s, len rects: %d' % (scale, neighbors, len(rects)) def find_face_from_img(img): gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) gray = cv2.equalizeHist(gray) rects = detect(gray, cascade) в while(1): ret, frame = c.read() rects = find_face_from_img(frame) def detect(img, cascade): for scale in [float(i)/10 for i in range(11, 15)]: for neighbors in range(2,5): rects = cascade.detectMultiScale(img, scaleFactor=scale, minNeighbors=neighbors, minSize=(20, 20), flags=cv2.cv.CV_HAAR_SCALE_IMAGE) print 'scale: %s, neighbors: %s, len rects: %d' % (scale, neighbors, len(rects)) def find_face_from_img(img): gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) gray = cv2.equalizeHist(gray) rects = detect(gray, cascade) 

One Solution collect form web for “Использование OpenCV detectMultiScale для поиска моего лица”

Я немного изменил код, чтобы он работал на моем компьютере. Когда я бегу, я получаю результаты

 import cv2 import cv2.cv as cv import getopt, sys def detect(img, cascade): for scale in [float(i)/10 for i in range(11, 15)]: for neighbors in range(2,5): rects = cascade.detectMultiScale(img, scaleFactor=scale, minNeighbors=neighbors, minSize=(20, 20), flags=cv2.cv.CV_HAAR_SCALE_IMAGE) print 'scale: %s, neighbors: %s, len rects: %d' % (scale, neighbors, len(rects)) def find_face_from_img(img): gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) gray = cv2.equalizeHist(gray) rects = detect(gray, cascade) if __name__ == '__main__': args, video_src = getopt.getopt(sys.argv[1:], '', ['cascade=', 'nested-cascade=']) try: video_src = video_src[0] except: video_src = 0 args = dict(args) cascade_fn = args.get('--cascade', "cascades/haarcascade_frontalface_alt.xml") cascade = cv2.CascadeClassifier(cascade_fn) c=cv2.VideoCapture(0) while(1): ret, frame = c.read() rects = find_face_from_img(frame) if 0xFF & cv2.waitKey(5) == 27: break в import cv2 import cv2.cv as cv import getopt, sys def detect(img, cascade): for scale in [float(i)/10 for i in range(11, 15)]: for neighbors in range(2,5): rects = cascade.detectMultiScale(img, scaleFactor=scale, minNeighbors=neighbors, minSize=(20, 20), flags=cv2.cv.CV_HAAR_SCALE_IMAGE) print 'scale: %s, neighbors: %s, len rects: %d' % (scale, neighbors, len(rects)) def find_face_from_img(img): gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) gray = cv2.equalizeHist(gray) rects = detect(gray, cascade) if __name__ == '__main__': args, video_src = getopt.getopt(sys.argv[1:], '', ['cascade=', 'nested-cascade=']) try: video_src = video_src[0] except: video_src = 0 args = dict(args) cascade_fn = args.get('--cascade', "cascades/haarcascade_frontalface_alt.xml") cascade = cv2.CascadeClassifier(cascade_fn) c=cv2.VideoCapture(0) while(1): ret, frame = c.read() rects = find_face_from_img(frame) if 0xFF & cv2.waitKey(5) == 27: break 

Вывод:

 scale: 1.2, neighbors: 2, len rects: 1 scale: 1.2, neighbors: 3, len rects: 1 scale: 1.2, neighbors: 4, len rects: 1 scale: 1.3, neighbors: 2, len rects: 1 scale: 1.3, neighbors: 3, len rects: 1 scale: 1.3, neighbors: 4, len rects: 0 scale: 1.4, neighbors: 2, len rects: 1 scale: 1.4, neighbors: 3, len rects: 0 scale: 1.4, neighbors: 4, len rects: 0 scale: 1.1, neighbors: 2, len rects: 1 scale: 1.1, neighbors: 3, len rects: 1 scale: 1.1, neighbors: 4, len rects: 1 scale: 1.2, neighbors: 2, len rects: 1 scale: 1.2, neighbors: 3, len rects: 1 scale: 1.2, neighbors: 4, len rects: 1 scale: 1.3, neighbors: 2, len rects: 1 

Некоторые советы: не выбирайте слишком маленький minSize … иначе будет обнаружен каждый маленький предмет, похожий на лицо.

Я предполагаю, что вы просматриваете все эти параметры, чтобы найти те, которые являются лучшими. Я узнал, что minNeighors не должны быть слишком высокими, иначе он не найдет.

Убедитесь, что ваш файл cascade xml связан правильно. Если он не найдет его, он не даст ошибку, он просто не найдет лиц.

Interesting Posts

Эффективный способ заменить значение каждой ячейки в кадре данных pandas

Функция привязки кнопки Kivy с аргументом

Можно ли получить доступ к ключевому имени объекта изнутри шаблона jinja2?

Проверка Django: проверьте начальное значение поля формы

Ошибка привязки параметра 0: возможно, неподдерживаемый тип

Как проверить, является ли версия Windows подлинной или нет?

Функции функции f2py с массивом

Отсутствующие данные, вставьте строки в Pandas и заполните NAN

Как запретить пользователям из моего приложения Django (с завихрением)

Прочтите файл kml с несколькими метками в pykml

HTTP-сервер Python, поддерживающий закодированное кодирование?

Молчание stdout функции в Python без перебора sys.stdout и восстановления вызова каждой функции

Как добавить контент в PDF с помощью PyPDF2 и сохранить предыдущие версии

Tornado потокового HTTP-ответа, поскольку AsyncHTTPClient получает куски

Как вернуть значение из функции exec?

Python - лучший язык программирования в мире.