Taula de continguts:

Detecció, formació i reconeixement de cares Opencv: 3 passos
Detecció, formació i reconeixement de cares Opencv: 3 passos

Vídeo: Detecció, formació i reconeixement de cares Opencv: 3 passos

Vídeo: Detecció, formació i reconeixement de cares Opencv: 3 passos
Vídeo: How to Train Paddle OCR on a Custom Dataset | YOLOv7 + OCR on Google Colab FREE GPU (ANPR/ALPR) 2023 2024, De novembre
Anonim
Detecció, formació i reconeixement de cares Opencv
Detecció, formació i reconeixement de cares Opencv

OpenCV és una biblioteca de visió per ordinador de codi obert que és molt popular per realitzar tasques bàsiques de processament d’imatges, com ara desenfocament, barreja d’imatges, millora de la imatge, així com la qualitat del vídeo, llindars, etc. A més del processament d’imatges, proporciona diversos aprenentatges profunds models que es poden utilitzar directament per resoldre tasques senzilles a mà.

utilitzeu aquest enllaç per a la instal·lació opencv

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

Pas 1: detectar la cara en un vídeo en temps real

podeu cercar a Google molts programes de detecció de cares i les cares detectades s'han de desar a una carpeta per processar imatges, com ara formació i etiquetatge. recollirem 30 mostres

importar cv2

importar numpy com a np

import os import sys

camera = cv2. VideoCapture (0)

faceCascade = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml") #afegeix el camí del fitxer harcascade

name = raw_input ("Com es diu?")

#Tots els fitxers es desaran a la carpeta Usuaris / prasad / Documents / images

dirName = "/ Usuaris / prasad / Documents / imatges /" + nom

print (dirName) si no os.path.exists (dirName): os.makedirs (dirName) print ("Directori creat") else: print ("El nom ja existeix") sys.exit ()

compte = 1

#recollirem 30 mostres

mentre es compta 30: break # frame = frame.array gray = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale (gris, 1.5, 5) per a (x, y, w, h) en cares: 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 clau == 27:

trencar

# camera.release ()

cv2.destroyAllWindows ()

Pas 2: entrenar les imatges de mostra

Un cop finalitzada la detecció de cares, podem anar a entrenar les imatges

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

#ser = serial. Serial ('/ dev / ttyACM0', 9600, timeout = 1)

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

recognizer = cv2.face. LBPHFaceRecognizer_create ()

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

# entrenar les imatges a la carpeta d'imatges

imageDir = os.path.join (baseDir, "images")

currentId = 1

labelIds = {} yLabels = xTrain = # ser.write ("Training …..". codificar ())

per a root, dirs, fitxers a os.walk (imageDir):

imprimir (arrel, dirs, fitxers) per al fitxer en fitxers: imprimir (fitxer) si file.endswith ("png") o file.endswith ("jpg"): path = os.path.join (root, file) label = os.path.basename (root) print (etiqueta)

si no és etiqueta a labelIds:

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

id_ = labelIds [label]

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

per a (x, y, w, h) en cares:

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

amb obert ("etiquetes", "wb") com a f:

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

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

recognizer.save ("trainer.yml") imprimeix (labelIds)

Pas 3: reconeixement de cares

un cop acabat l'entrenament, podeu executar el codi següent perquè comenci a reconèixer les vostres cares entrenades

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

amb obert ('etiquetes', 'rb') com a f:

dicti = pickle.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

últim ="

#for frame in camera.capture_continuous (rawCapture, format = "bgr", use_video_port = True):

mentre que True: ret, frame = camera.read () gris = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale (gris, scaleFactor = 1.5, minNeighbors = 5) per (x, y, w, h) a les cares: roiGray = gris [y: y + h, x: x + w]

id_, conf = recognizer.predict (roiGray)

per nom, valor a 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 = nom si conf <= 70: cv2.rectangle (marc, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imshow ('marc', marc)

clau = cv2.waitKey (1)

si clau == 27:

trencar cv2.destroyAllWindows ()

Recomanat: