Оглавление:

Обнаружение, обучение и распознавание лиц Opencv: 3 шага
Обнаружение, обучение и распознавание лиц Opencv: 3 шага

Видео: Обнаружение, обучение и распознавание лиц Opencv: 3 шага

Видео: Обнаружение, обучение и распознавание лиц Opencv: 3 шага
Видео: Урок #1 Python / Распознавание лиц OpenCV 2024, Июнь
Anonim
Обнаружение, обучение и распознавание лиц Opencv
Обнаружение, обучение и распознавание лиц Opencv

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

для установки opencv используйте эту ссылку

www.instructables.com/id/Opencv-and-Python…

Шаг 1. Обнаружение лица в видео в реальном времени

вы можете искать в Google многие программы для распознавания лиц, и обнаруженные лица должны быть сохранены в папке для дальнейшей обработки изображений, таких как обучение и маркировка. собираемся собрать 30 образцов

импорт cv2

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

импорт ОС импорт систем

камера = cv2. VideoCapture (0)

faceCascade = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml") # добавьте путь к вашему файлу Harcascade

name = raw_input ("Как его / ее имя?")

# все файлы будут сохранены в папке Users / prasad / Documents / images

dirName = "/ Users / prasad / Documents / images /" + имя

print (dirName), если не os.path.exists (dirName): os.makedirs (dirName) print («Каталог создан») else: print («Имя уже существует») sys.exit ()

count = 1

# собираемся собрать 30 образцов

в то время как счет 30: break # frame = frame.array gray = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale (gray, 1.5, 5) for (x, y, w, h) в лицах: roiGray = серый [y: y + h, x: x + w] fileName = dirName + "/" + name + str (count) + ".jpg" cv2.imwrite (fileName, roiGray) cv2.imshow ("face", roiGray) cv2.rectangle (frame, (x, y), (x + w, y + h), (0, 255, 0), 2) count + = 1 cv2.imshow ('frame', frame) key = cv2.waitKey (1)

если ключ == 27:

перерыв

# camera.release ()

cv2.destroyAllWindows ()

Шаг 2. Обучение вашим образцам изображений

После того, как функция распознавания лиц была завершена, мы можем перейти к обучению изображений.

import osimport numpy as np from PIL import Image import cv2 import pickle #import serial

#ser = serial. Serial ('/ dev / ttyACM0', 9600, тайм-аут = 1)

faceCascade = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml")

распознаватель = cv2.face. LBPHFaceRecognizer_create ()

baseDir = os.path.dirname (os.path.abspath (_ file_))

# обучаем изображения в папке изображений

imageDir = os.path.join (baseDir, «изображения»)

currentId = 1

labelIds = {} yLabels = xTrain = # ser.write ("Обучение…..". encode ())

для root, dirs, файлов в os.walk (imageDir):

print (root, dirs, files) для файла в файлах: print (file) if file.endswith ("png") или file.endswith ("jpg"): path = os.path.join (root, file) label = os.path.basename (корень) print (метка)

если не метка в labelIds:

labelIds [label] = currentId print (labelIds) currentId + = 1

id_ = labelIds [метка]

pilImage = Image.open (path).convert ("L") imageArray = np.array (pilImage, "uint8") faces = faceCascade.detectMultiScale (imageArray, scaleFactor = 1.1, minNeighbors = 5)

для (x, y, w, h) в гранях:

roi = imageArray [y: y + h, x: x + w] xTrain.append (roi) yLabels.append (id_)

с open ("labels", "wb") как f:

pickle.dump (labelIds, f) f.close ()

распознаватель.train (xTrain, np.array (yLabels))

распознаватель.save ("trainer.yml") print (labelIds)

Шаг 3: распознавание лиц

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

import osos.environ ['PYTHONINSPECT'] = 'on' import cv2 import numpy as np import pickle #import RPi. GPIO as GPIO from time import sleep

с open ('labels', 'rb') как f:

dicti = pickle.load (f) f.close ()

камера = cv2. VideoCapture (0)

faceCascade = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml")

распознаватель = cv2.face. LBPHFaceRecognizer_create () распознаватель.read ("trainer.yml")

font = cv2. FONT_HERSHEY_SIMPLEX

последний = ''

# для кадра в camera.capture_continuous (rawCapture, format = "bgr", use_video_port = True):

while True: ret, frame = camera.read () gray = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale (gray, scaleFactor = 1.5, minNeighbors = 5) для (x, y, w, h) в лицах: roiGray = серый [y: y + h, x: x + w]

id_, conf = распознаватель.predict (roiGray)

для имени значение в dicti.items ():

if value == id_: print (name) cv2.putText (frame, name, (x, y), font, 2, (0, 0, 255), 2, cv2. LINE_AA) if name! = last: last = имя, если conf <= 70: cv2.rectangle (frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imshow ('рамка', рамка)

ключ = cv2.waitKey (1)

если ключ == 27:

сломать cv2.destroyAllWindows ()

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