Face RecognitionPython

Face Recognition การเปรียบเทียบใบหน้าจากรูปภาพด้วย Python

วิธีการยืนยัน และเปรียบเทียบใบหน้าด้วย Python และ Face Recognition จากการเปรียบเทียบใบหน้าจากรูปภาพ

บทเรียน วิธีการยืนยัน และเปรียบเทียบใบหน้าด้วย Python และ Face Recognition จากการเปรียบเทียบใบหน้าจากรูปภาพ

บทเรียนก่อนหน้า:

ทีนี้ ถ้าเรามีใบหน้าตัวอย่างแล้วต้องการมาสอนให้ ML หรือ Machine Learning เข้าใจว่านี่คือใบหน้าของใคร บทความนี้ค่อนข้างจะ Basic หน่อย คือเทียบใบหน้าจากภาพแบบบ้านๆ โดยอ้างการการรู้จำใบหน้า เปรียบเทียบใบหน้าบุคคล กับใบหน้าที่อยู่ในฐานข้อมูล(ซึ่งก็คือฐานข้อมูลรูปภาพ)

เรามาเตรียมไฟล์รูปภาพกันหน่อยดีกว่า อย่างภาพแรกภาพผมเองคือ:

ตั้งชื่อว่า banyapon.jpg
ตั้งชื่อว่า banyapon.jpg

และหาภาพมาเปรียบเทียบอีกภาพคือภาพที่ใส่แว่นเหมือนกัน และอีกภาพไม่ใส่แว่น มาใช้งาน:

ตั้งชื่อ banyapon_outdoor.png
ตั้งชื่อ banyapon_outdoor.png
ตั้งชื่อว่า banyaponclear.jpg
ตั้งชื่อว่า banyaponclear.jpg

มีแต่รูปตัวเองแฮะ แต่เอาเถอะ แสดงใบหน้าตัวเองบ้าง หลายคนอยากเห็นน่าตาจริงๆ อยู่ ต่อมาเก็บไฟล์ภาพเหล่านี้ไว้ใน 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 กันหน่อยดีกว่า!

Asst. Prof. Banyapon Poolsawas

อาจารย์ประจำสาขาวิชาการออกแบบเชิงโต้ตอบ และการพัฒนาเกม วิทยาลัยครีเอทีฟดีไซน์ & เอ็นเตอร์เทนเมนต์เทคโนโลยี มหาวิทยาลัยธุรกิจบัณฑิตย์ ผู้ก่อตั้ง บริษัท Daydev Co., Ltd, (เดย์เดฟ จำกัด)

Related Articles

Back to top button

Adblock Detected

เราตรวจพบว่าคุณใช้ Adblock บนบราวเซอร์ของคุณ,กรุณาปิดระบบ Adblock ก่อนเข้าอ่าน Content ของเรานะครับ, ถือว่าช่วยเหลือกัน