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
Game & Mobile Development AR VR XR
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.

Adblock Detected

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