Оглавление:

Распознавание лиц + распознавание: 8 шагов (с изображениями)
Распознавание лиц + распознавание: 8 шагов (с изображениями)

Видео: Распознавание лиц + распознавание: 8 шагов (с изображениями)

Видео: Распознавание лиц + распознавание: 8 шагов (с изображениями)
Видео: Изучение Python OpenCV / Урок #7 – Распознавание лиц 2024, Сентябрь
Anonim
Image
Image
Распознавание лиц + распознавание
Распознавание лиц + распознавание

Это простой пример запуска обнаружения и распознавания лиц с помощью OpenCV с камеры. ПРИМЕЧАНИЕ: Я СОЗДАЛ ДАННЫЙ ПРОЕКТ ДЛЯ КОНТРОЛЯ ДАТЧИКОВ И ИСПОЛЬЗОВАЛ КАМЕРУ В КАЧЕСТВЕ ДАТЧИКА ДЛЯ ОТСЛЕЖИВАНИЯ И РАСПОЗНАВАНИЯ ЛИЦ. Итак, наша цель В этом сеансе 1. Установить Anaconda 2. Загрузить пакет Open CV 3. Установить переменные среды 4. Тест для подтверждения 5 Создайте код для распознавания лиц 6. Сделайте код для создания набора данных 7. Сделайте код для обучения распознавателя 8. Сделайте код для распознавания лиц и Результат.

Шаг 1. Установите Anaconda

Установить Anaconda
Установить Anaconda

Anaconda - это, по сути, красиво упакованная среда разработки Python, которая поставляется с множеством полезных пакетов, таких как NumPy, Pandas, IPython Notebook и т. Д. Похоже, что ее рекомендуют повсюду в научном сообществе. Проверьте Anaconda, чтобы установить его.

Шаг 2: Загрузите пакет Open CV

Скачать пакет Open CV
Скачать пакет Open CV

Во-первых, перейдите на официальный сайт OpenCV, чтобы загрузить полный пакет OpenCV. Выберите версию, которая вам нравится (2.x или 3.x). Я использую Python 2.x и OpenCV 2.x - в основном потому, что так настраиваются / основаны учебники OpenCV-Python.

В моем случае я извлек пакет (по сути, папку) прямо на свой диск F. (F: / opencv).

Шаг 3. Установите переменные среды

Установить переменные среды
Установить переменные среды

Скопируйте и вставьте файл cv2.pyd

Каталог Anaconda Site-packages (например, F: / Program Files / Anaconda2 / Lib / site-packages в моем случае) содержит пакеты Python, которые вы можете импортировать. Наша цель - скопировать и вставить файл cv2.pyd в этот каталог (чтобы мы могли использовать импорт cv2 в наших кодах Python).

Для этого скопируйте файл cv2.pyd…

Из этого каталога OpenCV (начальная часть может немного отличаться на вашем компьютере):

# Python 2.7 и 64-битная машина: F: / opencv / build / python / 2.7 / x64 # Python 2.7 и 32-битная машина: F: / opencv / build / python / 2.7 / x84

В этот каталог Anaconda (начальная часть может немного отличаться на вашем компьютере):

F: / Program Files / Anaconda2 / Lib / сайт-пакеты

После выполнения этого шага мы теперь сможем использовать import cv2 в коде Python. НО, нам все еще нужно проделать немного больше работы, чтобы заставить FFMPEG (видеокодек) работать (чтобы мы могли делать такие вещи, как обработка видео).

Щелкните правой кнопкой мыши «Мой компьютер» (или «Этот компьютер» в Windows 8.1) -> щелкните левой кнопкой мыши «Свойства» -> щелкните левой кнопкой мыши вкладку «Дополнительно» -> щелкните левой кнопкой мыши кнопку «Переменные среды…». Добавьте новую переменную пользователя. чтобы указать на OpenCV (либо x86 для 32-разрядной системы, либо x64 для 64-разрядной системы.) В настоящее время я работаю на 64-разрядной машине.

32-битный OPENCV_DIRC: / opencv / build / x86 / vc12

64-разрядная версия OPENCV_DIRC: / opencv / build / x64 / vc12

Добавьте% OPENCV_DIR% / bin к переменной пользователя PATH.

Например, моя пользовательская переменная PATH выглядит так…

До:

F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts

После:

F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts;% OPENCV_DIR% / bin

Вот и все, готово! FFMPEG готов к использованию!

Шаг 4. Протестируйте, чтобы подтвердить

Тест для подтверждения
Тест для подтверждения
Тест для подтверждения
Тест для подтверждения

Нам нужно проверить, можем ли мы теперь делать это в Anaconda (через Spyder IDE):

  • Импортировать пакет OpenCV
  • Используйте утилиту FFMPEG (для чтения / записи / обработки видео)

Тест 1: можем ли мы импортировать OpenCV?

Чтобы подтвердить, что Anaconda теперь может импортировать пакет OpenCV-Python (а именно cv2), выполните их в консоли IPython:

импорт cv2

напечатать cv2._ version_

Если пакет cv2 импортирован нормально, без ошибок, а версия cv2 распечатана, то все в порядке!

Тест 2: можем ли мы использовать кодек FFMPEG?

Поместите образец

input_video.mp4

видео файл в каталоге. Мы хотим проверить, можем ли мы:

  • прочтите этот видеофайл.mp4 и
  • записать новый видеофайл (может быть.avi или.mp4 и т. д.)

Для этого нам нужен тестовый код на Python, назовите его test.py. Поместите его в тот же каталог, что и образец

input_video.mp4

файл.

Это то, что

test.py

может выглядеть так (Примечание: большое спасибо за предложения Пита и Уоррена в поле для комментариев - я заменил свой исходный тестовый код его - пожалуйста, проверьте его самостоятельно и сообщите нам, работает ли это лучше):

импорт cv2

cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # True = прочитать видео успешно. False - не читать видео. fourcc = cv2. VideoWriter_fourcc (* 'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened () # True = записать видео успешно. False - не записать видео. cap.release () out.release ()

Этот тест ОЧЕНЬ ВАЖЕН. Если вы хотите обрабатывать видеофайлы, вам необходимо убедиться, что Anaconda / Spyder IDE может использовать FFMPEG (видеокодек). Мне потребовалось несколько дней, чтобы он заработал. Но я надеюсь, что на это у вас уйдет гораздо меньше времени!:) Примечание: еще один очень важный совет при использовании Anaconda Spyder IDE. Убедитесь, что вы проверили текущий рабочий каталог (CWD) !!!

Шаг 5: Создайте код для распознавания лиц

Сделать код для распознавания лиц
Сделать код для распознавания лиц
Сделать код для распознавания лиц
Сделать код для распознавания лиц

Цель

В этом сеансе

  • Мы увидим основы обнаружения лиц с использованием каскадных классификаторов на основе функций Хаара.
  • Мы расширим то же самое для обнаружения глаз и т. Д.

Обнаружение каскада Хаара в OpenCV

Здесь мы займемся обнаружением. OpenCV уже содержит множество предварительно обученных классификаторов для лица, глаз, улыбки и т. Д. Эти файлы XML хранятся в папке opencv / data / haarcascades /. Давайте создадим детектор лиц и глаз с помощью OpenCV. Сначала нам нужно загрузить необходимые XML-классификаторы. Затем загрузите наше входное изображение (или видео) в режиме оттенков серого ИЛИ мы можем использовать камеру (для обнаружения лиц в реальном времени)

импортировать numpy как np

import cv2 face_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / sources / data / haarcascades / haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / sources / data / haarcascades / haarcascades / haarcascades / haarcascades.xml ') cap = cv2. VideoCapture (0), а 1: ret, img = cap.read () gray = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale (gray, 1.5, 5) for (x, y, w, h) в лицах: cv2.rectangle (img, (x, y), (x + w, y + h), (255, 0, 0), 2) roi_gray = gray [y: y + h, x: x + w] roi_color = img [y: y + h, x: x + w] eyes = eye_cascade.detectMultiScale (roi_gray) for (ex, ey, ew, eh) в глазах: cv2.rectangle (roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2) print "found" + str (len (faces)) + "face (s)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff, если k == 27: перерыв cap.release () cv2.destroyAllWindows ()

Шаг 6. Создайте код для создания набора данных

Сделайте код для создания набора данных
Сделайте код для создания набора данных
Сделайте код для создания набора данных
Сделайте код для создания набора данных

Мы занимаемся распознаванием лиц, поэтому вам понадобятся изображения лиц! Вы можете создать свой собственный набор данных или начать с одной из доступных баз данных лиц, https://face-rec.org/databases/ предоставит вам актуальный обзор. Три интересных базы данных (части описания цитируются с

  • AT&T Facedatabase
  • Йельская база данных A
  • Расширенная база данных Йельского университета B

ЗДЕСЬ я использую свой собственный набор данных … с помощью кода, который приведен ниже:

импортировать numpy как np

import cv2 face_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / sources / data / haarcascades / haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('введите идентификатор пользователя') sampleN = 0; в то время как 1: ret, img = cap.read () gray = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale (gray, 1.3, 5) for (x, y, w, h) в лицах: sampleN = образецN + 1; cv2.imwrite ("F: / Program Files / projects / face_rec / facesData / User." + str (id) + "." + str (sampleN) + ".jpg", серый [y: y + h, x: x + w]) cv2.rectangle (img, (x, y), (x + w, y + h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img', img) cv2.waitKey (1) если sampleN> 20: прервать cap.release () cv2.destroyAllWindows ()

Шаг 7. Создайте код для обучения распознавателя

Сделайте код для обучения распознавателя
Сделайте код для обучения распознавателя

Создайте функцию для подготовки обучающей выборки

Теперь мы определим функцию

getImagesWithID (путь)

который принимает абсолютный путь к базе данных изображений в качестве входного аргумента и возвращает кортеж из двух списков, один из которых содержит обнаруженные лица, а другой - соответствующую метку для этого лица. Например, если i-й индекс в списке лиц представляет 5-ю личность в базе данных, то соответствующее i-е место в списке меток имеет значение, равное 5.

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

импорт ОС

import numpy as np import cv2 from PIL import Image # Для распознавания лиц мы используем LBPH Face Recognizer распознаватель = cv2.createLBPHFaceRecognizer (); path = "F: / Program Files / projects / face_rec / facesData" def getImagesWithID (path): imagePaths = [os.path.join (path, f) for f in os.listdir (path)] # print image_path #getImagesWithID (path) faces = IDs = для imagePath в imagePaths: # Прочитать изображение и преобразовать его в оттенки серого facesImg = Image.open (imagePath).convert ('L') faceNP = np.array (facesImg, 'uint8') # Получить метку изображения ID = int (os.path.split (imagePath) [- 1].split (".") [1]) # Определить лицо на изображении faces.append (faceNP) IDs.append (ID) cv2.imshow ("Добавление лиц для обучения", faceNP) cv2.waitKey (10) return np.array (IDs), Face Ids, faces = getImagesWithID (path) распознаватель.train (лица, Ids) распознаватель.save ("F: / Program Files / projects / face_rec / faceREC / trainingdata.yml") cv2.destroyAllWindows ()

с помощью этого кода весь набор данных лиц преобразуется в один файл.yml…..путь: ("F: / Program Files / projects / face_rec / faceREC / trainingdata.yml")

Шаг 8: Создайте код для распознавания лиц и результата

Guyzz, это последний шаг, на котором мы можем создать код для распознавания лиц с помощью вашей веб-камеры. НА ЭТОМ ШАГЕ ЕСТЬ ДВЕ ОПЕРАЦИИ, КОТОРЫЕ БУДУТ ВЫПОЛНЯТЬСЯ…. 1. захват видео с камеры 2. сравните его с вашим файлом.yml

импортировать numpy как npimport cv2 face_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / sources / data / haarcascades / haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFaceRecognizer (); rec.load ("F: / Program Files / projects / face_rec / faceREC / trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4), а 1: ret, img = cap.read () gray = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale (gray, 1.5, 5) for (x, y, w, h) в лицах: cv2.rectangle (img, (x, y), (x + w, y + h), (255, 0, 0), 2) id, conf = rec.predict (серый [y: y + h, x: x + w]) if (id == 2): id = "alok" if id == 1: id = "alok" if id == 3: id = "anjali" if id == 4: id = "Gaurav" if id = = 5: id = 'rahul' if id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y + h), font, 255) cv2.imshow ('img', img), если cv2.waitKey (1) == ord ('q'): break cap.release ()

cv2.destroyAllWindows ()

и, наконец, результат будет прямо перед вашими глазами … Вы также можете скачать zip-файл по ссылке ниже: Нажмите здесь, чтобы загрузить коды Итак, в этом руководстве мы выполнили задачу обнаружения лиц + распознавания с помощью OpenCV ….. если вы как это поучительно….. плззз, подпишитесь на меня и проголосуйте за меня…..спасибо друзьям:)

Рекомендуемые: