Բովանդակություն:

Opencv դեմքի հայտնաբերում, ուսուցում և ճանաչում. 3 քայլ
Opencv դեմքի հայտնաբերում, ուսուցում և ճանաչում. 3 քայլ

Video: Opencv դեմքի հայտնաբերում, ուսուցում և ճանաչում. 3 քայլ

Video: Opencv դեմքի հայտնաբերում, ուսուցում և ճանաչում. 3 քայլ
Video: Can Artificial Intelligence understand emotions? 2024, Դեկտեմբեր
Anonim
Opencv դեմքի հայտնաբերում, ուսուցում և ճանաչում
Opencv դեմքի հայտնաբերում, ուսուցում և ճանաչում

OpenCV- ը բաց կոդով համակարգչային տեսադարան է, որը շատ տարածված է պատկերի մշակման հիմնական առաջադրանքների կատարման համար, ինչպիսիք են ՝ պղտորումը, պատկերի միաձուլումը, պատկերի բարձրացումը, ինչպես նաև տեսանյութի որակը, շեմը և այլն: մոդելներ, որոնք կարող են ուղղակիորեն օգտագործվել ձեռքի տակ եղած պարզ խնդիրների լուծման համար:

opencv տեղադրման համար օգտագործեք այս հղումը

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

Քայլ 1. Դեմքի հայտնաբերում իրական ժամանակի տեսանյութում

կարող եք Google- ում որոնել դեմքի հայտնաբերման բազմաթիվ ծրագրեր, և հայտնաբերված դեմքերը պետք է պահվեն թղթապանակում ՝ պատկերի հետագա մշակման համար, օրինակ ՝ ուսուցում և պիտակավորում: մենք պատրաստվում ենք հավաքել 30 նմուշ

ներմուծել cv2

ներմուծել numpy որպես np

ներմուծում os ներմուծում sys

տեսախցիկ = cv2. VideoCapture (0)

faceCascade = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml") #ավելացնել ձեր harcascade ֆայլի ուղին

name = raw_input («Ի՞նչ է նրա անունը»)

#բոլոր ֆայլերը կպահվեն Users/prasad/Documents/images պանակում

dirName = "/Users/prasad/Documents/images/" + անուն

տպել (dirName), եթե ոչ os.path.exists (dirName): os.makedirs (dirName) print ("Directory Created") else: print ("Name უკვე կա") sys.exit ()

հաշվել = 1

#պատրաստվում ենք հավաքել 30 նմուշ

մինչ հաշվել 30 -ը `ընդմիջում # շրջանակ = շրջանակ: շարք մոխրագույն = cv2.cvtColor (շրջանակ, cv2. COLOR_BGR2GRAY) դեմքեր = faceCascade.detectMultiScale (մոխրագույն, 1.5, 5) դեմքի համար (x, y, w, h): roiGray = մոխրագույն [y: y + h, x: x + w] fileName = dirName + "/" + name + str (count) + ".jpg" cv2.imwrite (fileName, roiGray) cv2.imshow ("face", roiGray) cv2. ուղղանկյուն (շրջանակ, (x, y), (x+w, y+h), (0, 255, 0), 2) հաշվիչ. սպասել բանալին (1)

եթե բանալին == 27:

ընդմիջում

#camera.release ()

cv2.destroyAllWindows ()

Քայլ 2. Վերապատրաստեք ձեր օրինակելի պատկերները

Դեմքի հայտնաբերման ավարտից հետո մենք կարող ենք գնալ պատկերների ուսուցման

ներմուծել osimport numpy as np PIL import- ից Image ներմուծել cv2 ներմուծել թթու #ներմուծել սերիալ

#ser = սերիա. Սերիալ ('/dev/ttyACM0', 9600, timeout = 1)

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

ճանաչող = cv2.face. LBPHFaceRecognizer_create ()

baseDir = os.path.dirname (os.path.abspath (_ ֆայլ_))

#վարժեցրեք պատկերները պատկերների պանակի տակ

imageDir = os.path.join (baseDir, «պատկերներ»)

ընթացիկ ID = 1

labelIds = {} yLabels = xTrain = #ser.write ("Ուսուցում…..". ծածկագրել ())

root.rs- ի, os.walk- ի ֆայլերի համար (imageDir):

տպել (արմատ, dirs, ֆայլեր) ֆայլերի համար. տպել (ֆայլ), եթե file.endswith ("png") կամ file.endswith ("jpg"): path = os.path.join (root, file) label = os.path.basename (արմատ) տպել (պիտակ)

եթե պիտակ չկա labelIds- ում ՝

labelIds [label] = currentId տպագիր (labelIds) currentId += 1

id_ = labelIds [պիտակ]

pilImage = Image.open (path).convert ("L") imageArray = np.array (pilImage, "uint8") face = faceCascade.detectMultiScale (imageArray, scaleFactor = 1.1, min Հարևաններ = 5)

(x, y, w, h) դեմքերի համար.

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

բաց («պիտակներ», «wb») ինչպես f:

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

ճանաչիչ. գնացք (xTrain, np.array (yLabels))

ճանաչիչ. պահպանել ("trainer.yml") տպել (labelIds)

Քայլ 3. Դեմքերի ճանաչում

վերապատրաստման ավարտից հետո այժմ կարող եք գործարկել ստորև նշված կոդը, որպեսզի այն սկսի ճանաչել ձեր վարժեցված դեմքերը

ներմուծել osos.environ ['PYTHONINSPECT'] = 'on' import cv2 import numpy as np import թթու #ներմուծել RPi. GPIO as GPIO from time import import sleep

բաց («պիտակներ», «rb») ինչպես f:

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

տեսախցիկ = cv2. VideoCapture (0)

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

ճանաչող = cv2.face. LBPHFaceRecognizer_create () ճանաչիչ. ընթերցում ("trainer.yml")

տառ = cv2. FONT_HERSHEY_SIMPLEX

վերջին ="

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

իսկ True: ret, frame = camera.read () gray = cv2.cvtColor (շրջանակ, cv2. COLOR_BGR2GRAY) դեմքեր = faceCascade.detectMultiScale (մոխրագույն, scaleFactor = 1.5, minNeighbors = 5) (x, y, w, h) դեմքերում ՝ roiGray = մոխրագույն [y: y+h, x: x+w]

id_, conf = ճանաչող. կանխատեսել (roiGray)

անվան համար, արժեքը 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 = անունը, եթե conf <= 70: cv2. ուղղանկյուն (շրջանակ, (x, y), (x+w, y+h), (0, 255, 0), 2)

cv2.imshow («շրջանակ», շրջանակ)

բանալին = cv2.waitKey (1)

եթե բանալին == 27:

ընդմիջում cv2.destroyAllWindows ()

Խորհուրդ ենք տալիս: