โครงการตรวจจับใบหน้าใน 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+ โครงการหลักที่ปฏิบัติได้จริง & ความช่วยเหลืองานกับ บริษัท ชั้นนำ
วิธีการทางคณิตศาสตร์ที่ใช้ในการจดจำใบหน้าคืออะไร?
การจดจำใบหน้ามีราคาแพงในการคำนวณ และมักใช้เป็นการทดสอบความแม่นยำของอัลกอริธึมการเรียนรู้ของเครื่องและวิธีการตรวจจับวัตถุ โดยทั่วไปแล้ว ในกรณีส่วนใหญ่ จะใช้วิธีการทางคณิตศาสตร์แบบคลาสสิก - ระยะทางแบบยุคลิด การแปลงทางเรขาคณิตถูกนำมาใช้เพื่อค้นหาระยะห่างแบบยุคลิดที่ใกล้ที่สุดระหว่างชุดทั้งสอง ระยะทางแบบยุคลิดต้องบวกกำลังสองของผลต่างระหว่างเวกเตอร์ทั้งสองของจุดที่เป็นตัวแทนของทั้งสองภาพ รายละเอียดเพิ่มเติมเกี่ยวกับอัลกอริธึมระยะทางแบบยุคลิดสามารถอ่านได้จากงานวิจัยชิ้นนี้
การตรวจจับใบหน้าทำงานอย่างไร
การตรวจจับใบหน้าเป็นกระบวนการในการตรวจจับใบหน้ามนุษย์หรือใบหน้ามนุษย์หลายๆ ใบหน้าในรูปภาพหรือวิดีโอดิจิทัล การตรวจจับใบหน้าเป็นกระบวนการย่อยของการจดจำใบหน้า แต่คำนี้โดยทั่วไปหมายถึงการจดจำใบหน้าตามรูปภาพ ซึ่งใช้เฉพาะตำแหน่งของใบหน้าในภาพเพื่อระบุหรือยืนยันบุคคล ในขณะที่การจดจำใบหน้ายังสร้างรูปแบบที่เป็นเอกลักษณ์ ใบหน้าซึ่งถูกจับคู่กับใบหน้าเป้าหมาย การตรวจจับใบหน้าแตกต่างจากการจดจำใบหน้าตรงที่การจดจำใบหน้าเป็นกระบวนการอัตโนมัติในการระบุหรือยืนยันบุคคลจากภาพดิจิทัลหรือแหล่งวิดีโอ
อะไรคือความท้าทายของการจดจำใบหน้า?
มีการกล่าวถึงความท้าทายบางประการในการจดจำใบหน้าไว้ที่นี่ อัลกอริธึมที่เกี่ยวข้องกับระบบจดจำใบหน้าค่อนข้างซับซ้อน ซึ่งทำให้ไม่สอดคล้องกันอย่างมาก ระบบจดจำใบหน้าถูกหลอกได้ง่ายโดยการเปลี่ยนแปลงของสภาพแวดล้อมและแสง ท่าทางที่แตกต่างกัน และแม้แต่คนที่หน้าตาคล้ายกัน ระบบจดจำใบหน้าต้องการพลังในการคำนวณที่สูงมาก ซึ่งเป็นเหตุผลว่าทำไมระบบจดจำใบหน้าจึงมักใช้กับสมาร์ทโฟนและแล็ปท็อประดับไฮเอนด์ ระบบจดจำใบหน้าอาจตรวจพบการจับคู่ที่ผิดพลาดหลายอย่างในเฟรมเดียว ซอฟต์แวร์ต้องกำหนดสิ่งที่ผู้ใช้ตั้งใจจะทำ ซึ่งไม่ใช่งานง่ายสำหรับซอฟต์แวร์