Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Распознавание лиц в реальном времени:сквозной проект

Мы научимся шаг за шагом, как использовать PiCam для распознавания лиц в реальном времени. На моем последнем уроке по OpenCV мы изучили АВТОМАТИЧЕСКОЕ ОТСЛЕЖИВАНИЕ ОБЪЕКТОВ ВИДЕНИЯ.

Теперь мы будем использовать нашу PiCam для распознавания лиц в реальном времени, как вы можете видеть ниже:

Этот проект был выполнен с помощью этой фантастической библиотеки компьютерного зрения с открытым исходным кодом OpenCV. В этом руководстве мы сосредоточимся на Raspberry Pi (то есть Raspbian как ОС) и Python, но я также протестировал код на своем Mac, и он также отлично работает. OpenCV был разработан для вычислительной эффективности и с упором на приложения реального времени. Таким образом, он идеально подходит для распознавания лиц в реальном времени с помощью камеры.

3 фазы

Чтобы создать законченный проект по распознаванию лиц, мы должны работать над тремя очень разными фазами:

На приведенной ниже блок-схеме возобновляются эти этапы:

Шаг 1:BoM - Спецификация

Основные части:

Шаг 2. Установка пакета OpenCV 3

Я использую Raspberry Pi V3, обновленный до последней версии Raspbian (Stretch), поэтому лучший способ установить OpenCV - это следовать отличному руководству, разработанному Адрианом Роузброком:Raspbian Stretch:Install OpenCV 3 + Python на Raspberry Pi.

Я пробовал несколько разных руководств по установке OpenCV на свой Pi. Учебник Адриана - лучший. Я советую вам сделать то же самое, шаг за шагом следуя его указаниям.

После того, как вы закончите обучение Адриана, у вас должна быть виртуальная среда OpenCV, готовая для проведения наших экспериментов на вашем Pi.

Перейдем в нашу виртуальную среду и убедимся, что OpenCV 3 установлен правильно.

Адриан рекомендует запускать команду «source» каждый раз, когда вы открываете новый терминал, чтобы убедиться, что ваши системные переменные настроены правильно.

источник ~ / .profile

Теперь давайте войдем в нашу виртуальную среду:

workon cv

Если вы видите текст (cv) перед подсказкой, значит, вы находитесь в cv virtual окружающая среда:

(cv) pi @ raspberry:~ $

Адриан обращает внимание на то, что виртуальная среда cv Python полностью независим и отделен от версии Python по умолчанию, включенной в загрузку Raspbian Stretch. Таким образом, любые пакеты Python в глобальном каталоге site-packages не будут доступны для виртуальной среды cv. Точно так же любые пакеты Python, установленные в пакетах сайтов cv, не будут доступны для глобальной установки Python.

Теперь введите в свой интерпретатор Python:

питон

и убедитесь, что вы используете версию 3.5 (или выше).

Внутри интерпретатора (появится значок «>>>») импортируйте библиотеку OpenCV:

импортировать cv2

Если сообщения об ошибках не появляются, OpenCV правильно установлен В ВАШЕЙ ВИРТУАЛЬНОЙ СРЕДЕ PYTHON.

Вы также можете проверить установленную версию OpenCV:

cv2 .__ version__

Должна появиться версия 3.3.0 (или более поздняя версия, которая может быть выпущена в будущем).

На экране PrintScreen терминала выше показаны предыдущие шаги.

Шаг 3. Тестирование камеры

После установки OpenCV в RPi давайте проверим, что камера работает правильно.

Я предполагаю, что на вашем Raspberry Pi уже установлена ​​PiCam.

При просмотре руководства Адриана у вас должна быть включена камера, иначе драйверы не будут установлены правильно.

Если вы получаете сообщение об ошибке, например: Ошибка OpenCV:утверждение не удалось , вы можете попробовать решить проблему, используя команду:

sudo modprobe bcm2835-v4l2

После того, как вы правильно установили все драйверы, введите следующий код Python в своей среде IDE:

import numpy as np
import cv2
cap =cv2.VideoCapture (0)
cap.set (3,640) # установить ширину
cap.set (4,480) # установить высоту
while (True):
ret, frame =cap.read ()
frame =cv2.flip (frame, -1) # Повернуть камеру по вертикали
gray =cv2.cvtColor (frame , cv2.COLOR_BGR2GRAY)

cv2.imshow («рамка», рамка)
cv2.imshow («серый», серый)

k =cv2.waitKey (30) &0xff
if k ==27:# нажмите 'ESC' для выхода
break
cap.release ()
cv2.destroyAllWindows ()

Приведенный выше код захватит видеопоток, который будет сгенерирован вашей камерой PiCam, с отображением обоих цветов в цвете BGR и в сером режиме.

Обратите внимание, что я повернул камеру вертикально из-за того, как она собрана. Если это не ваш случай, прокомментируйте или удалите командную строку «перевернуть».

Вы также можете загрузить код с моего GitHub:simpleCamTest.py

Для выполнения введите команду:

python simpleCamTest.py

Чтобы завершить программу, вы должны нажать клавишу [ESC] на клавиатуре. Щелкните мышью в окне видео перед нажатием [ESC].

На рисунке выше показан результат.

Некоторые производители обнаружили проблемы при попытке открыть камеру (сообщения об ошибке «Assertion failed»). Это могло произойти, если камера не была включена во время установки OpenCv, и поэтому драйверы камеры не установились правильно. Для исправления используйте команду:

sudo modprobe bcm2835-v4l2

Вы также можете добавить bcm2835-v4l2 в последнюю строку файла / etc / modules, чтобы драйвер загружался при загрузке.

Чтобы узнать больше об OpenCV, вы можете следовать руководству:loading -video-python-opencv-tutorial

Шаг 4. Распознавание лиц

Самая основная задача распознавания лиц - это, конечно же, «Распознавание лиц». Прежде всего, вы должны «запечатлеть» лицо (фаза 1), чтобы распознать его по сравнению с новым лицом, снятым в будущем (фаза 3).

Самый распространенный способ обнаружения лица (или любых объектов) - использование «классификатора каскада Хаара»

Обнаружение объектов с использованием каскадных классификаторов Хаара на основе функций - это эффективный метод обнаружения объектов, предложенный Полом Виолой и Майклом Джонсом в их статье «Быстрое обнаружение объектов с использованием усиленного каскада простых функций» в 2001 году. - это подход, основанный на машинном обучении, при котором каскадная функция обучается на множестве положительных и отрицательных изображений. Затем он используется для обнаружения объектов на других изображениях.

Здесь мы будем работать с распознаванием лиц. Изначально алгоритму требуется много положительных изображений (изображений лиц) и негативных изображений (изображений без лиц) для обучения классификатора. Затем нам нужно извлечь из него функции. Хорошей новостью является то, что OpenCV поставляется с детектором и тренером. Если вы хотите обучить свой собственный классификатор для любого объекта, такого как автомобиль, самолет и т. Д., Вы можете использовать OpenCV для его создания. Его полная информация представлена ​​здесь:Каскадное обучение классификатора.

Если вы не хотите создавать свой собственный классификатор, OpenCV уже содержит множество предварительно обученных классификаторов для лица, глаз, улыбки и т. д. Эти файлы XML можно загрузить из каталога haarcascades.

Хватит теории, давайте создадим детектор лиц с OpenCV!

Загрузите файл faceDetection.py с моего GitHub.

import numpy as np
import cv2
faceCascade =cv2.CascadeClassifier ('Cascades / haarcascade_frontalface_default.xml')
cap =cv2.VideoCapture (0)
cap.set (3,640) # установить ширину
cap.set (4,480) # установить высоту
while True:
ret, img =cap.read ()
img =cv2.flip (img, –1 )
серый =cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
faces =faceCascade.detectMultiScale (
серый,
scaleFactor =1.2,
minNeighbors =5,
minSize =(20, 20)
)
для (x, y, w, h) в гранях:
cv2.rectangle (img, (x, y), (x + w, y + h), (255,0,0), 2)
roi_gray =серый [y:y + h, x:x + w]
roi_color =img [y:y + h, x:x + w]
cv2.imshow ('video', img)
k =cv2.waitKey (30) &0xff
if k ==27:# нажмите 'ESC 'для выхода
break
cap.release ()
cv2.destroyAllWindows ()

Вы не поверите, но несколько приведенных выше строк кода - это все, что вам нужно для обнаружения лица с помощью Python и OpenCV.

Когда вы сравните с последним кодом, использованным для тестирования камеры, вы поймете, что к нему было добавлено несколько частей. Обратите внимание на строку ниже:

faceCascade =cv2.CascadeClassifier («Cascades / haarcascade_frontalface_default.xml»)

Это строка, которая загружает «классификатор» (который должен находиться в каталоге с именем «Cascades /» в каталоге вашего проекта).

Затем мы установим нашу камеру и внутри цикла загрузим наше входное видео в режиме оттенков серого (то же, что мы видели раньше).

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

Faces =faceCascade.detectMultiScale (
серый,
scaleFactor =1.2,
minNeighbors =5,
minSize =(20, 20)
)

Где,

Функция обнаружит лица на изображении. Далее мы должны «отметить» лица на изображении, используя, например, синий прямоугольник. Это делается с помощью этой части кода:

for (x, y, w, h) в гранях:
cv2.rectangle (img, (x, y), (x + w, y + h), (255,0,0), 2)
roi_gray =серый [y:y + h, x:x + w]
roi_color =img [y:y + h, x:x + w]

Если лица обнаружены, он возвращает положение обнаруженных лиц в виде прямоугольника с левым верхним углом (x, y), шириной «w» и высотой «h» ==> (х, у, ш, в). Пожалуйста, посмотрите картинку.

Получив эти местоположения, мы можем создать «ROI» (нарисованный прямоугольник) для лица и представить результат с помощью imshow () функция.

Запустите указанный выше скрипт python в своей среде python, используя терминал Rpi:

python faceDetection.py

Результат:

Вы также можете включить классификаторы для «обнаружения глаз» или даже «обнаружения улыбки». В этих случаях вы включите функцию классификатора и отрисовку прямоугольника внутри цикла лица, потому что не будет смысла обнаруживать глаз или улыбку за пределами лица.

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

Примеры

На моем GitHub вы найдете другие примеры:

А на картинке вы можете увидеть результат.

Вы также можете следовать приведенному ниже руководству, чтобы лучше понять функцию распознавания лиц:

Учебное пособие по OpenCV Python для определения лица и глаз Хаара по каскадному обнаружению объектов

Шаг 5. Сбор данных

Прежде всего, я должен поблагодарить Рамиза Раджа за его отличную работу над распознаванием лиц на фотографиях:

РАСПОЗНАВАНИЕ ЛИЦА С ИСПОЛЬЗОВАНИЕМ OPENCV И PYTHON:РУКОВОДСТВО ДЛЯ НАЧИНАЮЩИХ

, а также Анирбан Кар, который разработал очень подробное руководство с использованием видео:

РАСПОЗНАВАНИЕ ЛИЦА - 3 части

Я действительно рекомендую вам взглянуть на оба руководства.

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

Сначала создайте каталог, в котором вы разрабатываете свой проект, например, FacialRecognitionProject:

mkdir FacialRecognitionProject

В этом каталоге, помимо трех сценариев Python, которые мы создадим для нашего проекта, мы должны сохранить в нем классификатор лиц. Вы можете скачать его с моего GitHub:haarcascade_frontalface_default.xml

Затем создайте подкаталог, в котором мы будем хранить образцы наших лиц, и назовите его «набор данных»:

набор данных mkdir

И загрузите код с моего GitHub:01_face_dataset.py

import cv2
import os
cam =cv2.VideoCapture (0)
cam.set (3, 640) # установить ширину видео
cam.set (4, 480) # установить высота видео
face_detector =cv2.CascadeClassifier ('haarcascade_frontalface_default.xml')
# Для каждого человека введите один числовой идентификатор лица
face_id =input ('\ n введите идентификатор пользователя и нажмите ==> ')
print («\ n [INFO] Инициализация захвата лиц. Посмотрите в камеру и подождите…»)
# Инициализируйте индивидуальное количество лиц выборки
count =0
while (True):
ret, img =cam.read ()
img =cv2.flip (img, -1) # перевернуть видеоизображение по вертикали
gray =cv2.cvtColor (img , cv2.COLOR_BGR2GRAY)
faces =face_detector.detectMultiScale (gray, 1.3, 5)
для (x, y, w, h) в лицах:
cv2.rectangle (img, (x , y), (x + w, y + h), (255,0,0), 2)
count + =1
# Сохранение захваченного изображения в папку наборов данных
cv2 .imwrite («набор данных / Пользователь.» + str (face_id) + '.' + str (count) + «.jpg», серый [y:y + h, x:x + w])
cv2. imshow ('изображение', img)
k =cv2.waitKey (100) &0x ff # Нажмите 'ESC' для выхода из видео
if k ==27:
break
elif count> =30:# Возьмите 30 образцов лица и остановите видео
break
# Выполните небольшую очистку
print («\ n [INFO] Выход из программы и очистка»)
cam.release ()
cv2.destroyAllWindows ()

Код очень похож на код, который мы видели для распознавания лиц. Мы добавили «команду ввода» для захвата идентификатора пользователя, который должен быть целым числом (1, 2, 3 и т. Д.)

face_id =input (‘\ n введите идентификатор пользователя end press ==>‘)

И для каждого из захваченных кадров мы должны сохранить его как файл в каталоге «набора данных»:

cv2.imwrite («набор данных / Пользователь.» + str (face_id) + ‘.’ + str (count) + «.jpg», серый [y:y + h, x:x + w])

Обратите внимание, что для сохранения указанного выше файла вы должны импортировать библиотеку «os». Имя каждого файла будет соответствовать структуре:

User.face_id.count.jpg

Например, для пользователя с face_id =1 четвертый образец файла в каталоге dataset / будет выглядеть примерно так:

User.1.4.jpg

как показано на фотографии с моего Pi:

В моем коде я беру 30 образцов с каждого идентификатора. Вы можете изменить его на последнем «elif». Количество образцов используется для разрыва цикла, в котором снимаются образцы лиц.

Запустите сценарий Python и запишите несколько идентификаторов. Вы должны запускать скрипт каждый раз, когда хотите объединить нового пользователя (или изменить фотографии для уже существующего).

Шаг 6. Инструктор

На этом втором этапе мы должны взять все пользовательские данные из нашего набора данных и «обучить» OpenCV Recognizer. Это делается напрямую с помощью конкретной функции OpenCV. В результате получится файл .yml, который будет сохранен в каталоге «trainer /».

Подробнее:Распознавание лиц в реальном времени:комплексный проект


Производственный процесс

  1. Операторы Python
  2. Список Python
  3. Словарь Питона
  4. MATRIX VOICE GOOGLE ASSISTANT - MATRIX VOICE PROJECT
  5. Speathe
  6. Windows IoT:дверь распознавания лиц
  7. Автоматическое отслеживание объекта обзора
  8. Распознавание цифр AI с помощью PiCamera
  9. Rover
  10. GoPiGo v2 с Windows IoT