มาลองทำ API ง่าย ๆ เพื่อเปรียบเทียบใบหน้า (Face Comparison) โดยใช้ภาษา Python

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

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

วันนี้เราจะใช้ Python มาทำการเปรียบเทียบใบหน้า โดยใช้ Library ที่ชื่อว่า “DeepFace” และ “Flask” มาทำ Rest API มาดูขั้นตอนการทำได้เลย!!

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

Flask เป็น Python Web Framework ที่มีส่วนควบคุมการทำงานที่มีขนาดเล็กและง่ายต่อการขยาย ซึ่งเราจะนำมาใช้ในส่วนของการสร้าง API

ก่อนที่เราจะเริ่มพัฒนา จำเป็นต้องต้องติดตั้ง 2  ตัวนี้ก่อน

ภาพจาก : towardsai

  • Python 3

ภาษาไพธอน เป็นภาษาโปรแกรมมิ่ง แบบ Open Source ที่ทำงานบนระบบปฎิบัติการได้หลากหลาย สามารถทำงานได้เหมือนกับภาษาโปรแกรมมิ่งทั่วไป และมีจุดเด่นเหมาะสำหรับงานที่ต้องการประมวลผลแบบพิเศษ เช่น การวิเคราะห์ข้อมูล (Data analytics) งานที่เกี่ยวกับการประมวลผลด้านสื่อกราฟฟิก และการประมวลผลภาพ (Multimedia & Image processing) การประมวลผลทางวิทยาศาสตร์และสถิติ (Scientific & Statistics computing) และงานด้าน Machine learning เป็นต้น

  • VS Code application และ VS Code Python extension

หรือ Visual Studio Code (VS Code) เป็นโปรแกรมแก้ไขซอร์สโค้ดที่มีขนาดเล็กแต่ทรงพลัง ซึ่งทำงานบนเดสก์ท็อปรองรับการทำงานบน Windows, macOS และ Linux พร้อมทั้งยังสามารถปรับแต่ง ด้วยการใช้ส่วนขยาย (Extension) อื่นๆ ได้อีกมากมาย ในที่นี้เราจะใช้ ส่วนขยาย ที่ชื่อว่า VS Code Python extension เข้ามาช่วยในการเขียนนะครับ (link วิธีการติดตั้ง https://code.visualstudio.com/docs/python/python-tutorial)

ส่วนใครที่ติดตั้ง Python และ VS code เรียบร้อยแล้วก็ข้ามมาได้เลย ส่วนใครที่ยังไม่แน่ใจว่าเคยติดตั้ง Python ไปแล้ว ให้ใช้ Command นี้เพื่อตรวจสอบเวอร์ชั่นของ Python (Execute ใน Command Prompt)

python — version

1. สร้าง Folder ขึ้นมาใหม่ และตั้งชื่อตามใจชอบได้เลย และเปิด Folder ด้วย VS code

2. สร้าง File ขึ้นมาใหม่ ภายใต้ Folder ที่สร้างไป ในทีนี้ใช้ชื่อว่า face.py

3. Setup Environment โดยกด ctrl+shift+P และพิมพ์ว่า Python: Create Environment จากนั้นคลิกเลือก Venv

4. ทำการ Import Library DeepFace และ Flask โดยเปิด Terminal ใน VS code และพิมพ์ Command ดังนี้

5. Copy Code ส่วนนี้ไปวางในไฟล์ face.py

อธิบาย Code แบบสั้นๆ

บรรทัดที่ 8 เป็นการสร้าง API โดยกำหนด Path คือ /face-compare และกำหนดให้เป็น Method-POST

บรรทัดที่ 11-13 เป็นการอ่านรูปจาก Path ใน Request Body

บรรทัดที่ 16 ทำการส่งรูปเข้าไปยัง Library DeepFace เพื่อเปรียบเทียบรูป

บรรทัดที่ 21 ใส่เงื่อนไขว่าคะแนนให้เกินเท่าไหร่ ถึงจะถือว่าเป็นคนๆเดียวกัน ตรงนี้สามารถปรับคะแนนได้

บรรทัดที่ 28-31 เป็นการกำหนด Json ที่จะ Response สามารถแก้หรือเพิ่มลบ attributes ตรงนี้ได้

บรรทัดที่ 36 เป็นการ Return Json กลับไปให้คนที่ Call API มา

*** ใครอยากแก้ Port ของ Service ให้แก้ตรงบรรทัดที่ 44 ได้เลย

 

6. สร้าง Folder Images ใน Project

จากนั้นนำรูปที่ต้องการ Compare เข้าไปใส่ใน Folder

7. Start program โดยการกดปุ่ม Run > Run Without Debugging หรือพิมพ์ Command ใน Terminal “python face.py” เมื่อ Start เรียบร้อยจะขึ้นหน้าตาแบบนี้

8. ทดสอบ Call API โดยใช้ Postman

 

ภาพตัวอย่างที่ใช้ในการเปรียบเทียบ

ผลที่ได้

ความหมายคือ ตรวจพบใบหน้าในรูป (detected = true)
เป็นใบหน้าคนๆเดียวกัน (sameFace = true)
คะแนนความเหมือนกันอยู่ที่ 71.16%

 

มาลองคนละคนดีกว่า

ผลที่ได้

ความหมายคือ ตรวจพบใบหน้าในรูป (detected = true)
ไม่ใช่ใบหน้าคนๆเดียวกัน (sameFace = false)
คะแนนความเหมือนกันอยู่ที่ 29.63%

 

การนำไปใช้งานจริงควรจะมี Service มาครอบตัวนี้อีกทีนะครับ เช่นเขียน Java Service ขึ้นมา 1 ตัว และรับเป็น Multipart Form-data เพื่อให้ Front-end หรือคนที่เรียก Service แนบรูปมาได้ จากนั้นเราก็เขียนให้ Java ไปเก็บรูปลงใน Path Images ของ Project Python จากนั้นก็ Call Python Service และส่ง Path ของรูปไปด้วย เมื่อ Java Service ได้รับ Response จาก Python ก็ให้ไปลบไฟล์รูปที่เคยเก็บไว้ใน Folder Images

เป็นยังไงกันบ้างครับ กับการทำการเปรียบเทียบใบหน้าโดยใช้ Python ที่เราได้นำเสนอไป ทางทีมงานสตรีมฯ ของเรายังมี โซลูชั่น เทคโนโลยี นวัตกรรม ด้านดิจิทัลอีกมากมาย รอติดตามบทความต่อๆไปได้เลยครับ

หากสนใจโซลูชั่นด้านดิจิทัล สามารถติดต่อเราได้ที่อีเมล marketing@stream.co.th หรือโทร. 02-679-2233

*Head Banner Image Credit: recfaces

 

เรียบเรียงโดย Phasathon Yingcharoenrat

Senior Software Engineer, Stream I.T. Consulting Ltd.