Как упоминалось в предыдущей статье, очень легко перейти от обнаружения лиц на изображениях к обнаружению лиц на видео через веб-камеру — именно это мы подробно рассмотрим в этой статье.
Готов к работе
- OpenCV установлен (подробности см. В предыдущем сообщении в блоге)
- Работающая веб-камера
кодирование
Давайте погрузимся прямо в код, как показано ниже:
import cv2
import sys
cascPath = sys.argv
faceCascade = cv2.CascadeClassifier(cascPath)
video_capture = cv2.VideoCapture(0)
while True:
# Capture frame-by-frame
ret, frame = video_capture.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30, 30),
flags=cv2.cv.CV_HAAR_SCALE_IMAGE
)
# Draw a rectangle around the faces
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
# Display the resulting frame
cv2.imshow('Video', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything is done, release the capture
video_capture.release()
cv2.destroyAllWindows()
Теперь разобьем...
import cv2
import sys
cascPath = sys.argv[1]
faceCascade = cv2.CascadeClassifier(cascPath)
Это должно быть знакомо каждому. Я создаю каскад лиц, как в примере с изображением.
video_capture = cv2.VideoCapture(0)
Примечание. Вы также можете указать здесь имя файла, и Python прочитает видеофайл. Однако для этого вам необходимо установить ffmpeg, так как сам OpenCV не может декодировать сжатое видео. Ffmpeg действует как интерфейс для OpenCV, и в идеале он должен компилироваться непосредственно в OpenCV. Это непросто сделать, особенно в Windows.
while True:
# Capture frame-by-frame
ret, frame = video_capture.read()
Здесь мы можем снимать видео. Функция read() считывает кадр с источника видео, в данном случае с веб-камеры. Это вернет:
- Фактически прочитанные кадры видео (один кадр на цикл)
- Код возврата
Код возврата сообщает нам, закончились ли кадры, что может произойти, если мы читаем из файла. Это не имеет значения при чтении с веб-камеры, так как мы можем записывать постоянно, поэтому мы проигнорируем это.
# Capture frame-by-frame
ret, frame = video_capture.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30, 30),
flags=cv2.cv.CV_HAAR_SCALE_IMAGE
)
# Draw a rectangle around the faces
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
# Display the resulting frame
cv2.imshow('Video', frame)
Опять же, этот код должен выглядеть знакомо. Мы просто ищем лица в наших захваченных кадрах.
if cv2.waitKey(1) & 0xFF == ord('q'):
break
Ждем нажатия клавиши «q». Если это так, мы выходим из скрипта.
# When everything is done, release the capture
video_capture.release()
cv2.destroyAllWindows()
Как говорилось в предыдущей статье, алгоритмы, основанные на машинном обучении, редко бывают точными на 100%. Код ищет лица кадр за кадром, поэтому требует довольно много вычислительной мощности. Например, на моем 5-летнем ноутбуке он использует почти 90% процессора.
Следующий шаг
Хорошо, вы знаете, как распознавать лица. Но что, если вы хотите обнаружить свои собственные объекты, например, машину, телевизор или любимую игрушку?
OpenCV позволяет создавать собственные каскады, но этот процесс плохо документирован. Если вы хотите пойти еще дальше и распознавать отдельные лица — возможно, обнаружить и распознать свое лицо среди множества незнакомцев — задача будет очень сложной. В основном это связано с обширной предварительной обработкой изображения. Однако, если вы готовы принять вызов, вы можете использовать алгоритмы машинного обучения, описанные здесь, следующим образом:
http://scikit-learn.sourceforge.net/0.6/auto_examples/applications/plot_face_recognition.html
Мы разработали видеоплатформу EasyCVR, которая поддерживает доступ устройств с несколькими протоколами.На раннем этапе мы подготовили видеовозможности EasyCVR, включая управление PTZ камеры, голосовую связь, оповещение о тревоге и другие функции.Вошли в область распознавание лиц и в настоящее время тестирует функцию распознавания лиц видеоплатформы. Если вам интересно, вы можете прочитать наши предыдущие сообщения в блоге, чтобы узнать об этом. Приглашаем всех обратить внимание.