Tabla de contenido:

Detección, entrenamiento y reconocimiento de rostros Opencv: 3 pasos
Detección, entrenamiento y reconocimiento de rostros Opencv: 3 pasos

Video: Detección, entrenamiento y reconocimiento de rostros Opencv: 3 pasos

Video: Detección, entrenamiento y reconocimiento de rostros Opencv: 3 pasos
Video: Reconocimiento Facial y de Objetos - Tutorial OpenCV y Python 2024, Noviembre
Anonim
Detección, Entrenamiento y Reconocimiento de Rostros Opencv
Detección, Entrenamiento y Reconocimiento de Rostros Opencv

OpenCV es una biblioteca de visión por computadora de código abierto que es muy popular para realizar tareas básicas de procesamiento de imágenes como desenfocar, mezclar imágenes, mejorar la calidad de imagen y video, establecer umbrales, etc. Además del procesamiento de imágenes, proporciona varios métodos de aprendizaje profundo previamente entrenados modelos que se pueden utilizar directamente para resolver tareas sencillas.

para la instalación de opencv use este enlace

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

Paso 1: detección de rostros en un video en tiempo real

Puede buscar en Google muchos programas de detección de rostros y los rostros detectados deben guardarse en una carpeta para procesar más imágenes, como entrenamiento y etiquetado. vamos a recolectar 30 muestras

importar cv2

importar numpy como np

import os import sys

camera = cv2. VideoCapture (0)

faceCascade = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml") # agregue la ruta del archivo harcascade

name = raw_input ("¿Cuál es su nombre?")

#todos los archivos se guardarán en la carpeta Users / prasad / Documents / images

dirName = "/ Users / prasad / Documents / images /" + nombre

print (dirName) si no os.path.exists (dirName): os.makedirs (dirName) print ("Directorio creado") else: print ("El nombre ya existe") sys.exit ()

cuenta = 1

# vamos a recolectar 30 muestras

while count 30: break # frame = frame.array gray = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale (gris, 1.5, 5) para (x, y, w, h) en caras: roiGray = gris [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)

si clave == 27:

rotura

# camera.release ()

cv2.destroyAllWindows ()

Paso 2: Entrenamiento de sus imágenes de muestra

Una vez que se completó la detección de rostros, podemos entrenar las imágenes.

importar osimport numpy como np desde PIL importar imagen importar cv2 importar pickle #import serial

#ser = serial. Serial ('/ dev / ttyACM0', 9600, tiempo de espera = 1)

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

reconocedor = cv2.face. LBPHFaceRecognizer_create ()

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

#entrenar las imágenes en la carpeta de imágenes

imageDir = os.path.join (baseDir, "imágenes")

currentId = 1

labelIds = {} yLabels = xTrain = # ser.write ("Entrenando…..". encode ())

para root, dirs, archivos en os.walk (imageDir):

imprimir (raíz, directorios, archivos) para el archivo en archivos: imprimir (archivo) si archivo.endswith ("png") o archivo.endswith ("jpg"): ruta = os.path.join (raíz, archivo) etiqueta = os.path.basename (root) print (etiqueta)

si no etiqueta en labelIds:

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

id_ = labelIds [etiqueta]

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

para (x, y, w, h) en caras:

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

con open ("etiquetas", "wb") como f:

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

Recognizer.train (xTrain, np.array (yLabels))

Recognizer.save ("trainer.yml") imprimir (labelIds)

Paso 3: reconocer caras

después de que terminó el entrenamiento, ahora puede ejecutar el siguiente código para que comience a reconocer sus rostros entrenados

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

con open ('etiquetas', 'rb') como f:

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

camera = cv2. VideoCapture (0)

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

Recognizer = cv2.face. LBPHFaceRecognizer_create () Recognizer.read ("trainer.yml")

font = cv2. FONT_HERSHEY_SIMPLEX

último = ''

# para el fotograma en 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) para (x, y, w, h) en caras: roiGray = gris [y: y + h, x: x + w]

id_, conf = reconocedor.predicto (roiGray)

para nombre, valor en 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 = nombre si conf <= 70: cv2.rectangle (frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imshow ('marco', marco)

clave = cv2.waitKey (1)

si clave == 27:

romper cv2.destroyAllWindows ()

Recomendado: