Kazalo:

Odkrivanje obrazov Opencv, usposabljanje in prepoznavanje: 3 koraki
Odkrivanje obrazov Opencv, usposabljanje in prepoznavanje: 3 koraki

Video: Odkrivanje obrazov Opencv, usposabljanje in prepoznavanje: 3 koraki

Video: Odkrivanje obrazov Opencv, usposabljanje in prepoznavanje: 3 koraki
Video: Can Artificial Intelligence understand emotions? 2024, November
Anonim
Opencv zaznavanje obrazov, usposabljanje in prepoznavanje
Opencv zaznavanje obrazov, usposabljanje in prepoznavanje

OpenCV je odprtokodna knjižnica računalniškega vida, ki je zelo priljubljena za izvajanje osnovnih nalog obdelave slik, kot so zameglitev, mešanje slik, izboljšanje slike, pa tudi kakovost videa, določanje praga itd. Poleg obdelave slik ponuja različna vnaprej usposobljena poglobljena učenja modele, ki jih je mogoče neposredno uporabiti za reševanje preprostih nalog.

za namestitev opencv uporabite to povezavo

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

1. korak: Zaznavanje obraza v videoposnetku v realnem času

v Googlu lahko iščete številne programe za odkrivanje obrazov, odkrite obraze pa shranite v mapo za nadaljnjo obdelavo slik, kot sta usposabljanje in označevanje. zbrali bomo 30 vzorcev

uvoz cv2

uvoz numpy kot np

import os import sys

camera = cv2. VideoCapture (0)

faceCascade = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml") #dodajte svojo pot do datoteke harcascade

name = raw_input ("Kako mu je ime?")

#vse datoteke bodo shranjene v mapo Users/prasad/Documents/images

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

print (dirName), če ne os.path.exists (dirName): os.makedirs (dirName) print ("Imenik ustvarjen") else: print ("Ime že obstaja") sys.exit ()

štetje = 1

#zbrali bomo 30 vzorcev

medtem ko šteje 30: break # frame = frame.array grey = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) obrazov = faceCascade.detectMultiScale (sivo, 1,5, 5) za (x, y, w, h) v obrazih: roiGray = siva [y: y + h, x: x + w] ime datoteke = dirName + "/" + ime + str (štetje) + ".jpg" cv2.imwrite (ime datoteke, roiGray) cv2.imshow ("obraz", roiGray) cv2.rectangle (okvir, (x, y), (x+w, y+h), (0, 255, 0), 2) count+= 1 cv2.imshow ("okvir", okvir) ključ = cv2.waitKey (1)

če je ključ == 27:

prekiniti

#camera.release ()

cv2.destroyAllWindows ()

2. korak: Usposabljanje vzorčnih slik

Ko je zaznavanje obrazov končano, lahko nadaljujemo z usposabljanjem slik

import osimport numpy kot np iz PIL import image import cv2 import pickle #import serial

#ser = serial. Serial ('/dev/ttyACM0', 9600, časovna omejitev = 1)

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

prepoznavalnik = cv2.face. LBPHFaceRecognizer_create ()

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

#slikovajte slike pod mapo s slikami

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

currentId = 1

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

za root, dirke, datoteke v os.walk (imageDir):

print (root, dirs, files) za datoteko v datotekah: print (file) if file.endswith ("png") ali file.endswith ("jpg"): path = os.path.join (root, file) label = os.path.basename (root) tiskanje (oznaka)

če ni označeno v labelIds:

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

id_ = labelIds [oznaka]

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

za (x, y, w, h) v obrazih:

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

z odprto ("oznake", "wb") kot f:

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

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

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

3. korak: Prepoznavanje obrazov

po končanem usposabljanju lahko zaženete spodnjo kodo, tako da bo začela prepoznavati vaše usposobljene obraze

import osos.environ ['PYTHONINSPECT'] = 'on' import cv2 import numpy kot np import pickle #import RPi. GPIO kot GPIO iz časa import sleep

z odprto ('oznake', 'rb') kot f:

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

camera = cv2. VideoCapture (0)

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

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

font = cv2. FONT_HERSHEY_SIMPLEX

zadnja = ''

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

medtem ko je True: ret, frame = camera.read () siva = cv2.cvtColor (okvir, cv2. COLOR_BGR2GRAY) obrazi = faceCascade.detectMultiScale (siva, scaleFactor = 1,5, minNeighbors = 5) za (x, y, w, h) v obrazih: roiGray = siva [y: y+h, x: x+w]

id_, conf = prepoznavalec.predict (roiGray)

za ime, vrednost v dicti.items ():

če je vrednost == id_: print (ime) cv2.putText (okvir, ime, (x, y), pisava, 2, (0, 0, 255), 2, cv2. LINE_AA) če je ime! = zadnja: zadnja = ime, če je konf <= 70: cv2.rectangle (okvir, (x, y), (x+w, y+h), (0, 255, 0), 2)

cv2.imshow ('okvir', okvir)

key = cv2.waitKey (1)

če je ključ == 27:

break cv2.destroyAllWindows ()

Priporočena: