บทเรียน วิธีการยืนยัน และเปรียบเทียบใบหน้าด้วย Python และ Face Recognition จากการเปรียบเทียบใบหน้าจากรูปภาพ
บทเรียนก่อนหน้า:
- การประมวลผลรู้จำใบหน้า Face Recognition ด้วย Python
- การดึงและจำแนกใบหน้า Pull Face ด้วย Python และ Face Recognition
ทีนี้ ถ้าเรามีใบหน้าตัวอย่างแล้วต้องการมาสอนให้ ML หรือ Machine Learning เข้าใจว่านี่คือใบหน้าของใคร บทความนี้ค่อนข้างจะ Basic หน่อย คือเทียบใบหน้าจากภาพแบบบ้านๆ โดยอ้างการการรู้จำใบหน้า เปรียบเทียบใบหน้าบุคคล กับใบหน้าที่อยู่ในฐานข้อมูล(ซึ่งก็คือฐานข้อมูลรูปภาพ)
เรามาเตรียมไฟล์รูปภาพกันหน่อยดีกว่า อย่างภาพแรกภาพผมเองคือ:
และหาภาพมาเปรียบเทียบอีกภาพคือภาพที่ใส่แว่นเหมือนกัน และอีกภาพไม่ใส่แว่น มาใช้งาน:
มีแต่รูปตัวเองแฮะ แต่เอาเถอะ แสดงใบหน้าตัวเองบ้าง หลายคนอยากเห็นน่าตาจริงๆ อยู่ ต่อมาเก็บไฟล์ภาพเหล่านี้ไว้ใน Folder เดียวกันกับไฟล์ facetest.py
ทำการประกาศเรียกใช้งาน Face Recognition ก่อนโดยการประกาศ:
import face_recognition
สร้างชุดข้อมูล Database คือภาพที่อยู่ในฐานข้อมูล เป็นภาพถ่ายที่เราจะใช้อ้างอิง ในระบบ หรือเป็นภาพต้นแบบสำหรับเปรียบเทียบถ้ามีภาพอื่นๆ มาจากแหล่งต่างๆ จะนำมาเปรียบเทียบกับภาพนี้ผมเลือกใช้ภาพ banyapon.jpg เป็นภาพ ของ Database
database_image = face_recognition.load_image_file("banyapon.jpg") data_base_face_encoding = face_recognition.face_encodings(database_image)[0]
จะเห็นว่าระบบที่เราทำนั้นเราต้องสร้าง Pattern ของภาพไว้โดยการเข้ารหัสภาพใบหน้า ลงในตัวแปร data_base_face_encoding ในบรรทัด:
data_base_face_encoding = face_recognition.face_encodings(database_image)[0]
ชุดรหัสจะถูกเข้ารหัสของ Face Recognition เพื่อเก็บ Pattern ใบหน้า เมื่อเราจะหาภาพใหม่มาเปรียบเทียบ เราจะทดสอบโดยการเอาภาพที่ใส่แว่นเหมือนกันมาทดสอบก่อน:
สร้างตัวแปรชื่อ sample_image เก็บที่อยู่ของภาพนี้ไว้ และทำการเข้ารหัสเพื่อเปรียบเทียบว่าตรงหรือใกล้เคียงหรือไม่ในตัวแปร sample_face_encoding
sample_image = face_recognition.load_image_file("banyapon_outdoor.png") sample_face_encoding = face_recognition.face_encodings(sample_image)[0]
ทำการเปรียบเทียบรหัสใบหน้าผ่านตัวแปร Result นั่นคือ:
results = face_recognition.compare_faces([data_base_face_encoding], sample_face_encoding) print("It's me, Banyapon") else: print("I don't know him!")
ถ้ารหัสเหมือนกันมันจะบอกว่า It’s me Banyapon ผมเองบัญญพนต์ แต่ถ้าไม่ใช่มันจะบอกว่า I don’t know him! (ไม่รู้จักไม่ใช่คนเดียวกันแน่ๆ)
ดังนั้นภาพรวมของไฟล์จะเป็นแบบนี้:
import face_recognition database_image = face_recognition.load_image_file("banyapon.jpg") data_base_encoding = face_recognition.face_encodings(database_image)[0] sample_image = face_recognition.load_image_file("banyapon_outdoor.png") sample_face_encoding = face_recognition.face_encodings(sample_image)[0] results = face_recognition.compare_faces([data_base_encoding], sample_face_encoding) if results[0] == True: print("It's me Banyapon") else: print("I don't know him!")
ทดสอบโดยการกด Debug
ผลลัพธ์คือ Terminal มันจะบอกเองว่าใช่เราไหม!
งั้นเปลี่ยนจาก banyapon_outdoor.png เป็นภาพไม่ใส่แว่นดูหน่อย นั่นคือ banyaponclear.jpg ทดสอบอีกครั้งกด Debug ดูหน่อย จะเห็นว่าใส่แว่นไม่ใส่แว่นไม่ใช่ปัญหา
หากเราหาภาพคนอื่น มาใส่เพื่อเปรียบเทียบใบหน้าแทนจะแสดงผลยังไง
เห็นยังว่าถ้าใบหน้าไม่ตรงกันมันก็จะยืนยันใบหน้าไม่ได้ บทเรียนต่อไป OpenCV กันหน่อยดีกว่า!
One Comment