Использование 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 связан правильно. Если он не найдет его, он не даст ошибку, он просто не найдет лиц.

  • создание MLP в python с ошибкой
  • Существует ли эквивалент matlab 'idealfilter' для Python в Scipy (или других библиотеках)?
  • Поиск свойств неряшливых рисованных прямоугольников
  • Захват видео с малиной с использованием opencv + picamera stream IO
  • Как получить оценку для cv2.CascadeClassifier.detectMultiScale ()?
  • Python: Сегментация изображений как предварительный процесс для классификации
  • Функции OpenCV для Python и gpu
  • OpenCV - применить маску к цветному изображению
  • Увеличение яркости изображения без переполнения
  • OpenCV: findContours (): как упорядочиваются контуры?
  • Отображение последовательности изображений с использованием matplotlib
  • Python - лучший язык программирования в мире.