โครงการตรวจจับใบหน้าใน Python [ใน 5 ขั้นตอนง่ายๆ]

เผยแพร่แล้ว: 2020-09-01

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

โปรดทราบว่าคุณควรทำความคุ้นเคยกับการเขียนโปรแกรมใน Python, OpenCV และ NumPy จะช่วยให้มั่นใจได้ว่าคุณจะไม่สับสนระหว่างทำงานในโครงการนี้ มาเริ่มกันเลย.

เราได้แชร์สองวิธีในการจดจำใบหน้า อันแรกใช้ไลบรารี่การจดจำใบหน้าของ Python ในขณะที่อีกอันใช้ OpenCV และ NumPy ตรวจสอบโปรแกรมวิทยาศาสตร์ข้อมูลของเราเพื่อเรียนรู้เพิ่มเติม

สารบัญ

การจดจำใบหน้าด้วย 'การจดจำใบหน้า' ของ Python

อาจเป็นวิธีที่ง่ายที่สุดในการตรวจจับใบหน้าคือการใช้ ไลบรารีการจดจำใบหน้าใน Python มีความแม่นยำ 99.38% ในฐานข้อมูล LFW การใช้งานนั้นค่อนข้างง่ายและไม่ต้องใช้ความพยายามมาก นอกจากนี้ ไลบรารียังมีคำสั่ง 'face_recognition' เฉพาะสำหรับระบุใบหน้าในรูปภาพ

วิธีใช้การจดจำใบหน้า

คุณสามารถแยกแยะใบหน้าในภาพโดยใช้คำสั่ง 'face_locations':

นำเข้า face_recognition

รูปภาพ = face_recognition.load_image_file (“your_file.jpg”)

face_locations = face_recognition.face_locations (รูปภาพ)

นอกจากนี้ยังสามารถจดจำใบหน้าและเชื่อมโยงกับชื่อของพวกเขาได้:

นำเข้า face_recognition

Know_image = face_recognition.load_image_file (“modi.jpg”)

Unknown_image = face_recognition.load_image_file (“unknown.jpg”)

modi_encoding = face_recognition.face_encodings (known_image)[0]

unknown_encoding = face_recognition.face_encodings(unknown_image)[0]

ผลลัพธ์ = face_recognition.compare_faces([modi_encoding], unknown_encoding)

รูปภาพประกอบด้วย “นเรนทรา โมดี”

มีสิ่งอื่นอีกมากมายที่คุณสามารถดำเนินการกับไลบรารีนี้โดยการรวมเข้ากับไลบรารีอื่นๆ ตอนนี้เราจะหารือเกี่ยวกับการจดจำใบหน้ากับไลบรารีที่โดดเด่นอื่นๆ ใน Python โดยเฉพาะ OpenCV และ NumPy

อ่านเพิ่มเติม: บทช่วยสอน Python NumPy: เรียนรู้ Python Numpy ด้วยตัวอย่าง

โครงการตรวจจับใบหน้าใน Python

ในโครงการนี้ เราได้ดำเนินการตรวจจับใบหน้าและจดจำใบหน้าโดยใช้ OpenCV และ NumPy เราใช้ Raspberry Pi แล้ว แต่คุณยังสามารถใช้กับระบบอื่นๆ ได้ คุณจะต้องแก้ไขโค้ดเพียงเล็กน้อยเพื่อใช้กับอุปกรณ์อื่น (เช่น Mac หรือ Windows PC)

เครดิตบางส่วนสำหรับโครงการนี้ ตกเป็น ของ Marcelo Rovai

ขั้นตอนที่ #1: ติดตั้งไลบรารี

ขั้นแรก คุณควรติดตั้งไลบรารีที่จำเป็น, OpenCV และ NumPy คุณสามารถติดตั้งได้อย่างง่ายดายผ่าน:

pip ติดตั้ง opencv-python

pip ติดตั้ง opencv-contrib-python

สำหรับการติดตั้ง NumPy ในระบบของคุณ ให้ใช้คำสั่งเดียวกับด้านบนและแทนที่ 'opencv-python' ด้วย 'numpy':

pip ติดตั้ง numpy

ขั้นตอนที่ #2: ตรวจจับใบหน้า

ตอนนี้ คุณต้องกำหนดค่ากล้องของคุณและเชื่อมต่อกับระบบของคุณ กล้องควรทำงานอย่างถูกต้องเพื่อหลีกเลี่ยงปัญหาในการตรวจจับใบหน้า

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

ในกรณีของเรา เราต้องการให้แบบจำลองของเราตรวจจับใบหน้า OpenCV มาพร้อมกับผู้ฝึกสอนและตัวตรวจจับ ดังนั้นการใช้ตัวแยกประเภท Haar Cascade จึงค่อนข้างสะดวกสำหรับไลบรารีนี้ คุณสามารถสร้างลักษณนามของคุณเพื่อตรวจจับภาพอื่นๆ ได้เช่นกัน

นี่คือรหัส:

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

นำเข้า cv2

faceCascade = cv2.CascadeClassifier ('Cascades/haarcascade_frontalface_default.xml')

หมวก = cv2.VideoCapture(0)

cap.set(3,640) # ชุด ความกว้าง

cap.set(4,480) # set ความสูง

ในขณะที่จริง:

ย้อน img = cap.read()

img = cv2.flip(img, -1)

สีเทา = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ใบหน้า = faceCascade.detectMultiScale (

สีเทา,

สเกลแฟกเตอร์=1.2,

เพื่อนบ้านขั้นต่ำ=5,

ขนาดต่ำสุด= (20, 20)

)

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

cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

roi_gray = สีเทา[y:y+h, x:x+w]

roi_color = img[y:y+h, x:x+w]

cv2.imshow('วิดีโอ',img)

k = cv2.waitKey(30) & 0xff

ถ้า k == 27: # กด 'ESC' เพื่อออก

หยุดพัก

หมวกปล่อย ()

cv2.destroyAllWindows()

ขั้นตอนที่ #3: รวบรวมข้อมูล

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

นั่นเป็นเหตุผลที่เราจะเริ่มต้นด้วยการสร้างชุดข้อมูลของเราโดยการรวบรวมรูปภาพ หลังจากรวบรวมรูปภาพที่จำเป็นแล้ว ให้เพิ่ม ID ให้กับทุกคน เพื่อให้โมเดลรู้ว่าต้องเชื่อมโยงใบหน้าใดกับ ID ใด เริ่มต้นด้วยรูปภาพของบุคคลหนึ่งและเพิ่มอย่างน้อย 10-20 ใช้นิพจน์ต่างๆ เพื่อให้ได้ผลลัพธ์ที่มีประสิทธิภาพสูงสุด

สร้างสคริปต์สำหรับเพิ่ม ID ผู้ใช้ให้กับรูปภาพ ดังนั้นคุณจึงไม่ต้องดำเนินการด้วยตนเองทุกครั้ง สคริปต์มีความสำคัญในกรณีที่คุณต้องการใช้แบบจำลองของคุณกับใบหน้าหลายหน้า

เรียน รู้หลักสูตรการเรียนรู้ของเครื่อง จากมหาวิทยาลัยชั้นนำของโลก รับ Masters, Executive PGP หรือ Advanced Certificate Programs เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว

ขั้นตอนที่ #4: รถไฟ

หลังจากสร้างชุดข้อมูลของรูปภาพของบุคคลแล้ว คุณจะต้องฝึกโมเดล คุณต้องป้อนรูปภาพไปยังตัวจำแนกประเภท OpenCV ของคุณและจะสร้างไฟล์ชื่อ 'trainer.yml' ในตอนท้าย

ในขั้นตอนนี้ คุณจะต้องจัดเตรียมรูปภาพและ ID ของโมเดลให้กับโมเดลเท่านั้น เพื่อให้โมเดลสามารถทำความคุ้นเคยกับ ID ของทุกรูปภาพ หลังจากที่เราฝึกโมเดลเสร็จแล้ว เราก็สามารถทดสอบได้

นี่คือรหัส:

นำเข้า cv2

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

จาก PIL นำเข้า Image

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

# เส้นทางสำหรับฐานข้อมูลภาพใบหน้า

เส้นทาง = 'ชุดข้อมูล'

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

เครื่องตรวจจับ = cv2.CascadeClassifier (“haarcascade_frontalface_default.xml”);

# ฟังก์ชั่นเพื่อรับภาพและป้ายกำกับข้อมูล

def getImagesAndLabels (เส้นทาง):

imagePaths = [os.path.join(path,f) สำหรับ f ใน os.listdir(path)]

ตัวอย่างใบหน้า=[]

รหัส = []

สำหรับ imagePath ใน imagePaths:

PIL_img = Image.open(imagePath).convert('L') # ระดับสีเทา

img_numpy = np.array(PIL_img,'uint8')

id = int(os.path.split(imagePath)[-1].split(“.”)[1])

ใบหน้า = detector.detectMultiScale (img_numpy)

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

faceSamples.append(img_numpy[y:y+h,x:x+w])

id.append(id)

กลับหน้าตัวอย่าง,รหัส

พิมพ์ (“\n [INFO] ใบหน้าการฝึก จะใช้เวลาสักครู่ รอสักครู่…”)

faces,ids = getImagesAndLabels(เส้นทาง)

จดจำ.train(ใบหน้า, np.array(รหัส))

# บันทึกโมเดลลงใน trainer/trainer.yml

ตัวจำแนกลายมือ.write('ผู้ฝึกสอน/ผู้ฝึกสอน.yml')

#พิมพ์จำนวนใบหน้าที่ฝึกแล้วจบโปรแกรม

print(“\n [INFO] {0} ใบหน้าได้รับการฝึกฝน ออกจากโปรแกรม”.format(len(np.unique(ids))))

เรียนรู้: แอปพลิเคชัน MATLAB ในการจดจำใบหน้า: รหัส คำอธิบาย & ไวยากรณ์

ขั้นตอนที่ #5: เริ่มการรับรู้

ตอนนี้คุณได้ฝึกโมเดลแล้ว เราสามารถเริ่มทดสอบโมเดลได้ ในส่วนนี้ เราได้เพิ่มชื่อให้กับ ID เพื่อให้โมเดลสามารถแสดงชื่อของผู้ใช้ที่เกี่ยวข้องที่รู้จักได้

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

นี่คือรหัส:

นำเข้า cv2

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

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

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

จดจำ.read('ผู้ฝึกสอน/ผู้ฝึกสอน.yml')

cascadePath = “haarcascade_frontalface_default.xml”

faceCascade = cv2.CascadeClassifier (cascadePath);

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

#เริ่มต้นเคาน์เตอร์ไอดี

id = 0

# ชื่อที่เกี่ยวข้องกับรหัส: ตัวอย่าง ==> upGrad: id=1, etc

ชื่อ = ['None', upGrad', Me', 'Friend', 'Y', 'X']

# เริ่มต้นและเริ่มการจับภาพวิดีโอเรียลไทม์

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

cam.set(3, 640) # ตั้งค่าความกว้างของวิดีโอ

cam.set (4, 480) # ตั้งค่าความสูงของวิดีโอ

# กำหนดขนาดหน้าต่างขั้นต่ำที่จะถูกจดจำว่าเป็นใบหน้า

minW = 0.1*cam.get(3)

minH = 0.1*cam.get(4)

ในขณะที่จริง:

ย้อน img =cam.read()

img = cv2.flip(img, -1) # พลิกแนวตั้ง

สีเทา = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

ใบหน้า = faceCascade.detectMultiScale (

สีเทา,

สเกลแฟกเตอร์ = 1.2,

เพื่อนบ้านขั้นต่ำ = 5,

minSize = (int(minW), int(minH)),

)

for(x,y,w,h) ในใบหน้า:

cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)

รหัส, ความมั่นใจ = รู้จำ.ทำนาย(สีเทา[y:y+h,x:x+w])

# ถ้าความมั่นใจน้อยกว่า 100 ==> “0” : perfect match

ถ้า (ความมั่นใจ < 100):

id = ชื่อ[id]

ความมั่นใจ = ” {0}%”.format(รอบ (100 – ความมั่นใจ))

อื่น:

id = “ไม่ทราบ”

ความมั่นใจ = ” {0}%”.format(รอบ (100 – ความมั่นใจ))

cv2.putText(

อิมเมจ,

str(id),

(x+5,y-5),

แบบอักษร

1,

(255,255,255),

2

)

cv2.putText(

อิมเมจ,

str(ความมั่นใจ)

(x+5,y+h-5),

แบบอักษร

1,

(255,255,0),

1

)

cv2.imshow('กล้อง',img)

k = cv2.waitKey(10) & 0xff # กด 'ESC' เพื่อออกจากวิดีโอ

ถ้า k == 27:

หยุดพัก

#ทำความสะอาด

print(“\n [INFO] ออกจากโปรแกรมและทำความสะอาด”)

cam.release()

cv2.destroyAllWindows()

เรามาถึงจุดสิ้นสุดของโครงการตรวจจับใบหน้าใน Python แล้ว ตอนนี้คุณรู้วิธีสร้างโมเดลแมชชีนเลิร์นนิงที่ตรวจจับและจดจำใบหน้าได้แล้ว อย่าลืมแบ่งปันผลลัพธ์ของคุณกับเรา!

เรียนรู้: บทช่วยสอนการตรวจจับวัตถุ TensorFlow สำหรับผู้เริ่มต้น

เรียนรู้เพิ่มเติมเกี่ยวกับการเรียนรู้ของเครื่อง

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

หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับแมชชีนเลิร์นนิง โปรดดูที่ IIIT-B & upGrad's Executive PG Program in Machine Learning & AI ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 450 ชั่วโมง กรณีศึกษาและการมอบหมายมากกว่า 30 รายการ IIIT -B สถานะศิษย์เก่า 5+ โครงการหลักที่ปฏิบัติได้จริง & ความช่วยเหลืองานกับ บริษัท ชั้นนำ

วิธีการทางคณิตศาสตร์ที่ใช้ในการจดจำใบหน้าคืออะไร?

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

การตรวจจับใบหน้าทำงานอย่างไร

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

อะไรคือความท้าทายของการจดจำใบหน้า?

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