Sadržaj:

Otkrivanje lica, obuka i prepoznavanje Opencv lica: 3 koraka
Otkrivanje lica, obuka i prepoznavanje Opencv lica: 3 koraka
Anonim
Opencv Otkrivanje lica, obuka i prepoznavanje
Opencv Otkrivanje lica, obuka i prepoznavanje

OpenCV je biblioteka računarskog vida otvorenog koda koja je vrlo popularna za obavljanje osnovnih zadataka obrade slika, kao što su zamućivanje, miješanje slika, poboljšanje slike, kao i kvaliteta videa, postavljanje pragova itd. Osim obrade slika, pruža i različita unaprijed obučena dubinska učenja modeli koji se mogu direktno koristiti za rješavanje jednostavnih zadataka.

za instalaciju opencv -a koristite ovu vezu

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

Korak 1: Otkrivanje lica u videu u stvarnom vremenu

možete pretraživati na Googleu mnoge programe za otkrivanje lica, a otkrivena lica treba spremiti u mapu za daljnju obradu slika poput obuke i označavanja. prikupit ćemo 30 uzoraka

import cv2

uvoz numpy kao np

import os import sys

kamera = cv2. VideoCapture (0)

faceCascade = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml") #dodajte vašu putanju harcascade datoteke

name = raw_input ("Kako se on/ona zove?")

#sve datoteke će biti sačuvane u fascikli Korisnici/prasad/Dokumenti/slike

dirName = "/Korisnici/prasad/Dokumenti/slike/" + ime

print (dirName) ako nije os.path.exists (dirName): os.makedirs (dirName) print ("Direktorij je kreiran") else: print ("Ime već postoji") sys.exit ()

count = 1

#prikupit ćemo 30 uzoraka

dok broj 30: break # frame = frame.array grey = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) lica = faceCascade.detectMultiScale (sivo, 1,5, 5) za (x, y, w, h) u licima: roiGray = sivo [y: y + h, x: x + w] ime datoteke = dirName + "/" + ime + str (broj) + ".jpg" cv2.imwrite (ime datoteke, roiGray) cv2.imshow ("lice", roiGray) cv2.rectangle (okvir, (x, y), (x+w, y+h), (0, 255, 0), 2) count+= 1 cv2.imshow ('okvir', okvir) ključ = cv2.waitKey (1)

if key == 27:

break

#camera.release ()

cv2.destroyAllWindows ()

Korak 2: Obučite svoje uzorke slika

Nakon što je otkrivanje lica završeno, možemo ići na obuku slika

import osimport numpy kao np iz PIL -a import image import cv2 import pickle #import serial

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

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

prepoznavač = cv2.face. LBPHFaceRecognizer_create ()

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

#trenirajte slike ispod foldera images

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

currentId = 1

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

za root, dirs, datoteke u os.walk (imageDir):

ispis (root, dirs, files) za datoteku u datotekama: print (file) if file.endswith ("png") ili file.endswith ("jpg"): path = os.path.join (root, file) label = os.path.basename (root) ispis (oznaka)

ako nije označeno u labelIds:

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

id_ = labelIds [oznaka]

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

za (x, y, w, h) u licima:

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

s otvorenim ("labels", "wb") kao f:

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

prepoznavač.train (xTrain, np.array (yLabels))

prepoznavač.save ("trainer.yml") ispis (labelIds)

Korak 3: Prepoznavanje lica

nakon što je obuka sada završena, možete pokrenuti donji kod kako bi počeo prepoznavati vaša obučena lica

import osos.environment ['PYTHONINSPECT'] = 'on' import cv2 import numpy kao np import pickle #import RPi. GPIO kao GPIO iz vremena import sleep

s otvorenim ('labels', 'rb') kao f:

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

kamera = cv2. VideoCapture (0)

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

prepoznavač = cv2.face. LBPHFaceRecognizer_create () prepoznavač.read ("trainer.yml")

font = cv2. FONT_HERSHEY_SIMPLEX

last = ''

#za okvir u kameri.capture_continuous (rawCapture, format = "bgr", use_video_port = True):

dok je True: ret, frame = camera.read () siva = cv2.cvtColor (okvir, cv2. COLOR_BGR2GRAY) lica = faceCascade.detectMultiScale (siva, scaleFactor = 1,5, minNeighbors = 5) za (x, y, w, h) u licima: roiGray = sivo [y: y+h, x: x+w]

id_, conf = prepoznavač.predict (roiGray)

za ime, vrijednost u dicti.items ():

if value == id_: print (name) cv2.putText (okvir, ime, (x, y), font, 2, (0, 0, 255), 2, cv2. LINE_AA) if name! = last: last = naziv ako je conf <= 70: cv2.rectangle (okvir, (x, y), (x+w, y+h), (0, 255, 0), 2)

cv2.imshow ('okvir', okvir)

key = cv2.waitKey (1)

if key == 27:

break cv2.destroyAllWindows ()

Preporučuje se: