Cuprins:

Detectarea, formarea și recunoașterea feței Opencv: 3 pași
Detectarea, formarea și recunoașterea feței Opencv: 3 pași

Video: Detectarea, formarea și recunoașterea feței Opencv: 3 pași

Video: Detectarea, formarea și recunoașterea feței Opencv: 3 pași
Video: Aplicatie de detectare si recunoastere faciala in Python si OpenCV -partea I -E.C.D. ADRIAN IGNAT 2024, Noiembrie
Anonim
Detectare, instruire și recunoaștere a feței Opencv
Detectare, instruire și recunoaștere a feței Opencv

OpenCV este o bibliotecă open source de viziune computerizată, care este foarte populară pentru efectuarea de sarcini de bază de procesare a imaginii, cum ar fi estomparea, amestecarea imaginilor, îmbunătățirea imaginii, precum și calitatea video, praguri etc. modele care pot fi utilizate direct pentru a rezolva sarcini simple la îndemână.

pentru instalarea opencv folosiți acest link

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

Pasul 1: detectarea feței într-un videoclip în timp real

puteți căuta pe Google multe programe de detectare a feței, iar fețele detectate ar trebui să fie salvate într-un folder pentru lucrări suplimentare de procesare a imaginilor, cum ar fi antrenamentul și etichetarea. urmează să colectăm 30 de probe

import cv2

import numpy ca np

import os import sys

camera = cv2. VideoCapture (0)

faceCascade = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml") #add calea fișierului harcascade

name = raw_input („Care este numele lui?”)

#toate fișierele vor fi salvate în folderul Utilizatori / prasad / Documente / imagini

dirName = "/ Utilizatori / prasad / Documente / imagini /" + nume

print (dirName) dacă nu os.path.exists (dirName): os.makedirs (dirName) print ("Director creat") altfel: print ("Numele există deja") sys.exit ()

număr = 1

# vom colecta 30 de probe

în timp ce numărul 30: break # frame = frame.array gray = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale (gri, 1.5, 5) pentru (x, y, w, h) în fețe: roiGray = gri [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)

dacă tasta == 27:

pauză

# camera.release ()

cv2.destroyAllWindows ()

Pasul 2: Instruirea exemplelor dvs. de imagini

După ce Detectarea feței a fost finalizată, putem merge la antrenamentul imaginilor

import osimport numpy as np from PIL import Image 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 (_ fișier_))

#trenați imaginile din folderul imagini

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

currentId = 1

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

pentru root, dirs, fișiere în os.walk (imageDir):

print (root, dirs, files) pentru fișier în fișiere: print (file) dacă file.endswith ("png") sau file.endswith ("jpg"): path = os.path.join (root, file) label = os.path.basename (root) print (etichetă)

dacă nu etichetați în eticheteIduri:

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

id_ = labelIds [etichetă]

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

pentru (x, y, w, h) în fețe:

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

cu deschis („etichete”, „wb”) ca f:

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

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

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

Pasul 3: Recunoașterea fețelor

după ce s-a terminat antrenamentul, puteți rula codul de mai jos, astfel încât să înceapă să vă recunoască fețele antrenate

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

cu deschis („etichete”, „rb”) ca 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

last ="

#pentru cadru în camera.capture_continuous (rawCapture, format = "bgr", use_video_port = True):

în timp ce este adevărat: ret, cadru = camera.read () gri = cv2.cvtColor (cadru, cv2. COLOR_BGR2GRAY) fețe = faceCascade.detectMultiScale (gri, scaleFactor = 1.5, minVecini = 5) pentru (x, y, w, h) în fețe: roiGray = gri [y: y + h, x: x + w]

id_, conf = recognizer.predict (roiGray)

pentru nume, valoare în 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 = nume dacă conf <= 70: cv2.rectangle (frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imshow („cadru”, cadru)

cheie = cv2.waitKey (1)

dacă tasta == 27:

break cv2.destroyAllWindows ()

Recomandat: