สารบัญ:

การตรวจจับใบหน้า การฝึกอบรม และการจดจำใบหน้า Opencv: 3 ขั้นตอน
การตรวจจับใบหน้า การฝึกอบรม และการจดจำใบหน้า Opencv: 3 ขั้นตอน

วีดีโอ: การตรวจจับใบหน้า การฝึกอบรม และการจดจำใบหน้า Opencv: 3 ขั้นตอน

วีดีโอ: การตรวจจับใบหน้า การฝึกอบรม และการจดจำใบหน้า Opencv: 3 ขั้นตอน
วีดีโอ: Face Recognition with OpenCV with Python | Part 1 2024, พฤศจิกายน
Anonim
การตรวจจับใบหน้า การฝึกอบรม และการจดจำใบหน้า Opencv
การตรวจจับใบหน้า การฝึกอบรม และการจดจำใบหน้า Opencv

OpenCV เป็นไลบรารีคอมพิวเตอร์วิทัศน์แบบโอเพ่นซอร์สซึ่งเป็นที่นิยมอย่างมากสำหรับการประมวลผลภาพขั้นพื้นฐาน เช่น การเบลอภาพ การผสมภาพ การเพิ่มคุณภาพของภาพ ตลอดจนคุณภาพของวิดีโอ ขีดจำกัด เป็นต้น นอกจากการประมวลผลภาพแล้ว ยังให้การเรียนรู้เชิงลึกล่วงหน้าที่หลากหลายอีกด้วย แบบจำลองที่สามารถนำมาใช้โดยตรงในการแก้ปัญหาง่ายๆ ในมือ

สำหรับการติดตั้ง opencv ใช้ลิงค์นี้

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

ขั้นตอนที่ 1: การตรวจจับใบหน้าในวิดีโอแบบเรียลไทม์

คุณสามารถค้นหาโปรแกรมตรวจจับใบหน้าจำนวนมากใน Google และใบหน้าที่ตรวจพบควรถูกบันทึกไว้ในโฟลเดอร์สำหรับการประมวลผลภาพเพิ่มเติม เช่น การฝึกอบรมและการติดป้ายกำกับ เราจะไปเก็บ 30 ตัวอย่าง

นำเข้า cv2

นำเข้า numpy เป็น np

นำเข้าระบบปฏิบัติการนำเข้าsys

กล้อง = cv2. VideoCapture(0)

faceCascade = cv2. CascadeClassifier("haarcascade_frontalface_default.xml") #add เส้นทางไฟล์ harcascade ของคุณ

name = raw_input("ชื่อของเขา/เธอคืออะไร")

#ไฟล์ทั้งหมดจะถูกบันทึกภายใต้โฟลเดอร์ Users/prasad/Documents/images

dirName = "/Users/prasad/Documents/images/" + ชื่อ

print(dirName) ถ้าไม่ใช่ os.path.exists(dirName): os.makedirs(dirName) print("Directory Created") else: print("ชื่อมีอยู่แล้ว") sys.exit()

นับ = 1

#เราจะไปเก็บ 30 ตัวอย่าง

ในขณะที่นับ 30: แตก # frame = frame.array grey = cv2.cvtColor(frame, cv2. COLOR_BGR2GRAY) ใบหน้า = faceCascade.detectMultiScale (สีเทา, 1.5, 5) สำหรับ (x, y, w, h) ในใบหน้า: roiGray = grey[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)

ถ้าคีย์ == 27:

หยุดพัก

#camera.release()

cv2.destroyAllWindows()

ขั้นตอนที่ 2: ฝึกอบรมภาพตัวอย่างของคุณ

หลังจากการตรวจจับใบหน้าเสร็จสิ้น เราก็ไปฝึกภาพกันได้เลย

นำเข้า osimport numpy เป็น np จาก PIL นำเข้าอิมเมจนำเข้า cv2 นำเข้าดอง #import serial

#ser = serial. Serial('/dev/ttyACM0', 9600, หมดเวลา = 1)

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

ตัวจำแนกลายมือ = cv2.face. LBPHFaceRecognizer_create()

baseDir = os.path.dirname(os.path.abspath(_file_))

#train ภาพภายใต้โฟลเดอร์ภาพ

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

รหัสปัจจุบัน = 1

labelIds = {} yLabels = xTrain = #ser.write("การฝึกอบรม…..".encode())

สำหรับ root, dirs, ไฟล์ใน os.walk(imageDir):

print(root, dirs, files) สำหรับไฟล์ในไฟล์: print(file) if file.endswith("png") or file.endswith("jpg"): path = os.path.join(root, file) label = os.path.basename(root) พิมพ์ (ฉลาก)

หากไม่ใช่ป้ายกำกับใน labelIds:

labelIds[label] = currentId พิมพ์ (labelIds) currentId += 1

id_ = labelIds [ป้ายกำกับ]

pilImage = Image.open(เส้นทาง).convert("L") imageArray = np.array(pilImage, "uint8") faces = faceCascade.detectMultiScale(imageArray, scaleFactor=1.1, minNeighbors=5)

สำหรับ (x, y, w, h) ในหน้า:

ผลตอบแทนการลงทุน = imageArray[y:y+h, x:x+w] xTrain.append(roi) yLabels.append(id_)

ด้วย open("labels", "wb") เป็น f:

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

จดจำ.train(xTrain, np.array(yLabels))

จดจำ.save("trainer.yml") พิมพ์(labelIds)

ขั้นตอนที่ 3: การจดจำใบหน้า

หลังจากการฝึกสิ้นสุดลง คุณสามารถรันโค้ดด้านล่างเพื่อให้มันเริ่มจดจำใบหน้าที่คุณฝึกได้

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

ด้วย open('labels', 'rb') เป็น f:

dicti = ดองโหลด (f) f.close ()

กล้อง = cv2. VideoCapture(0)

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

ตัวจำแนกลายมือ = cv2.face. LBPHFaceRecognizer_create() recognitionr.read("trainer.yml")

แบบอักษร = cv2. FONT_HERSHEY_SIMPLEX

สุดท้าย=''

#for เฟรมใน camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):

ในขณะที่ True: ret, frame = camera.read() grey = cv2.cvtColor(frame, cv2. COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale(gray, scaleFactor = 1.5, minNeighbors = 5) สำหรับ (x, y, w, h) ในหน้า: roiGray = grey[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= ชื่อ if conf <= 70: cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

cv2.imshow('เฟรม', เฟรม)

คีย์ = cv2.waitKey(1)

ถ้าคีย์ == 27:

ทำลาย cv2.destroyAllWindows()

แนะนำ: