359 words
2 minutes
Stranger Things Face Recognition

Stranger Things Face Recognition#

สวัสดีครับ ยินดีต้อนรับสู่โปรเจกต์ระบบจดจำใบหน้าตัวละครจาก Stranger Things ครับ

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

สำหรับการศึกษาเท่านั้น — โปรเจกต์นี้จัดทำขึ้นเพื่อเป็นกรณีศึกษาและทดลองเกี่ยวกับ Face Recognition ครับ


ระบบทำอะไรได้บ้าง#

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

ตัวอย่างผลลัพธ์#

ลองดูตัวอย่างการตรวจจับใบหน้าตัวละครจาก Stranger Things ได้เลยครับ

ตัวอย่างการตรวจจับใบหน้า


ตัวละครที่มีในระบบ#

ตอนนี้ผมได้เตรียมข้อมูลใบหน้าของตัวละครหลักไว้ให้แล้ว 12 คนครับ

ตัวละครตัวละคร
ElevenMike Wheeler
Dustin HendersonLucas Sinclair
Will ByersMax Mayfield
Nancy WheelerJonathan Byers
Steve HarringtonRobin Buckley
Joyce ByersHopper

ถ้าอยากเพิ่มคนอื่นก็ทำได้ครับ ดูวิธีการได้ในหัวข้อถัดไปเลยครับ


เทคโนโลยีที่ใช้#

เทคโนโลยีรายละเอียด
ArcFaceโมเดล AI ที่มีความแม่นยำสูงในการจดจำใบหน้าครับ
InsightFaceไลบรารีสำหรับ Face Recognition
FlaskWeb Framework สำหรับ Python
OpenCVประมวลผลรูปภาพครับ

สิ่งที่ต้องมีก่อนเริ่มใช้งาน#

ต้องมี Python 3.8 ขึ้นไปติดตั้งอยู่ในเครื่องครับ ถ้ายังไม่มีก็ไปดาวน์โหลดจากเว็บ python.org ได้เลยครับ


วิธีติดตั้ง#

1. Clone โปรเจกต์มาก่อนครับ#

Terminal window
git clone https://github.com/0x90Vold/stranger-things-face-recognition.git
cd stranger-things-face-recognition

2. ติดตั้ง packages ที่จำเป็นครับ#

Terminal window
pip install flask flask-cors opencv-python numpy pillow insightface onnxruntime

ตรงนี้อาจจะใช้เวลาสักพักนะครับ โดยเฉพาะ insightface เพราะต้องดาวน์โหลดโมเดลมาด้วย


วิธีใช้งาน#

เตรียมรูปสำหรับสอนระบบ#

ก่อนที่ระบบจะจดจำใบหน้าได้ ต้องมีการสอนก่อนครับ โดยการเตรียมรูปภาพของแต่ละคนไว้ในโฟลเดอร์ dataset/

โครงสร้างที่ถูกต้องจะเป็นแบบนี้ครับ

dataset/
├── Eleven/
│ ├── eleven_01.jpg
│ ├── eleven_02.jpg
│ └── eleven_03.jpg
├── Mike Wheeler/
│ ├── mike_01.jpg
│ └── mike_02.jpg
└── Dustin Henderson/
└── dustin_01.jpg

ก็คือสร้างโฟลเดอร์ชื่อคนนั้นๆ แล้วใส่รูปเข้าไปครับ ชื่อโฟลเดอร์จะกลายเป็นชื่อที่แสดงตอนจดจำได้

คำแนะนำในการเลือกรูปครับ

  • เลือกรูปที่เห็นหน้าชัดๆ ไม่เบลอ ไม่บังครับ
  • ถ้ามีหลายมุมได้ยิ่งดี เช่น หน้าตรง เอียงซ้าย เอียงขวา
  • มีหลายแสงก็ดีครับ ทั้งสว่างและมืดหน่อย
  • ยิ่งมีหลายรูปยิ่งแม่นยำ แนะนำสัก 3-5 รูปต่อคนครับ
  • พยายามหลีกเลี่ยงรูปที่มีหลายคนในภาพนะครับ ระบบอาจจะสับสนได้
  • รูปที่ใส่แว่นกันแดดหรือมีอะไรบังหน้าก็ไม่ค่อยดีครับ

รันการสอนระบบ#

พอเตรียมรูปเสร็จแล้วก็สั่งให้ระบบเรียนรู้ได้เลยครับ

Terminal window
python train_faces.py

ระบบจะอ่านรูปทั้งหมด แปลงเป็นข้อมูลตัวเลข แล้วบันทึกลงไฟล์ face.json ครับ ตอนรันจะเห็นข้อความประมาณนี้

==================================================
ArcFace Face Training System
==================================================
Loading ArcFace model...
ArcFace model loaded successfully!
Found 12 persons in dataset
--------------------------------------------------
Processing: Eleven
Processing image: eleven_01.jpg
Face embedding created (det_score: 0.998)
...
==================================================
Saving data to face.json...
Successfully saved to: face.json
Training Summary:
- Total Persons: 12
- Total Embeddings: 36
==================================================

พอเห็น Successfully saved ก็เรียบร้อยครับ


เปิดเว็บแอปพลิเคชัน#

รันคำสั่งนี้เพื่อเปิด server ครับ

Terminal window
python app.py

จะเห็นข้อความแบบนี้ครับ

============================================================
ArcFace Recognition Server Starting...
- Database: face.json
- Threshold: 0.4
============================================================
* Running on http://0.0.0.0:5000

ใช้งานผ่านเว็บ#

เปิดเบราว์เซอร์แล้วเข้าไปที่ http://localhost:5000 ครับ

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


โครงสร้างโปรเจกต์#

stthings/
├── README.md # ไฟล์คู่มือการใช้งานครับ
├── app.py # ตัว server หลัก
├── train_faces.py # สคริปต์สำหรับสอนระบบ
├── dataset/ # โฟลเดอร์เก็บรูปสำหรับสอน
├── templates/ # ไฟล์ HTML ของหน้าเว็บ
├── uploads/ # เก็บไฟล์ที่อัปโหลดชั่วคราว
└── face.json # ฐานข้อมูลใบหน้า (สร้างจากการสอน)

API สำหรับนักพัฒนา#

ถ้าอยากเรียกใช้งานผ่าน API โดยตรง ก็มีให้ใช้ 3 endpoints ครับ

ส่งรูปมาตรวจจับ#

POST /api/recognize

ส่งรูปมาได้ทั้งแบบไฟล์และ Base64 ครับ ตัวอย่างการเรียก

Terminal window
curl -X POST -F "file=@รูปของคุณ.jpg" http://localhost:5000/api/recognize

ระบบจะตอบกลับมาเป็น JSON แบบนี้ครับ

{
"success": true,
"faces_detected": 2,
"results": [
{
"face_id": 1,
"name": "Eleven",
"similarity": 89.5,
"bbox": [100, 50, 200, 180],
"det_score": 99.8
}
],
"processed_image": "data:image/jpeg;base64,..."
}

ดูข้อมูลฐานข้อมูล#

GET /api/database/info

ใช้ดูว่าตอนนี้ระบบรู้จักใครบ้าง มีกี่รูปต่อคนครับ

โหลดฐานข้อมูลใหม่#

POST /api/database/reload

ใช้ตอนที่สอนระบบใหม่แล้วอยากให้ server โหลดข้อมูลใหม่โดยไม่ต้อง restart ครับ


การตั้งค่าเพิ่มเติม#

ถ้าอยากปรับแต่งอะไร สามารถแก้ได้ในไฟล์ app.py ครับ

# ตำแหน่งไฟล์ฐานข้อมูล
FACE_DATABASE_PATH = "face.json"
# ค่าความเหมือนขั้นต่ำ (0.0 - 1.0)
# ถ้าตั้งสูงระบบจะเข้มงวดมาก ต้องเหมือนมากถึงจะยอมรับ
# ถ้าตั้งต่ำจะผ่อนปรนขึ้น แต่อาจจะจำผิดได้
SIMILARITY_THRESHOLD = 0.4

ค่า 0.4 เป็นค่าเริ่มต้นที่ผมแนะนำครับ สมดุลระหว่างความแม่นยำและความยืดหยุ่น ถ้าอยากเข้มงวดขึ้นก็เพิ่มเป็น 0.5 หรือ 0.6 ได้ครับ


ปัญหาที่อาจเจอ#

จดจำได้แต่ขึ้น Unknown ตลอด

อาจเป็นเพราะค่า threshold สูงเกินไปครับ ลองลดลงมาหน่อย หรืออาจเป็นเพราะรูปที่ใช้สอนไม่หลากหลายพอ ลองเพิ่มรูปหลายมุมหลายแสงดูครับ

รันแล้วหาโมเดลไม่เจอ

ตอนรัน train_faces.py ครั้งแรก ระบบจะดาวน์โหลดโมเดลมาให้อัตโนมัติครับ ต้องต่ออินเทอร์เน็ตด้วยนะครับ

อยากใช้ GPU

ได้ครับ แก้ในไฟล์ app.py และ train_faces.py ตรง providers จาก CPUExecutionProvider เป็น CUDAExecutionProvider แต่ต้องติดตั้ง CUDA กับ cuDNN ก่อนนะครับ


ลิงก์โปรเจกต์#


ขอบคุณ#

  • InsightFace สำหรับโมเดล ArcFace ที่ยอดเยี่ยมครับ
  • Flask สำหรับ framework ที่ใช้งานง่าย
  • Stranger Things สำหรับแรงบันดาลใจครับ

License#

โปรเจกต์นี้เป็น Open Source ภายใต้ MIT License ครับ ใช้ได้ตามสบายเลย


หากมีคำถามหรือข้อเสนอแนะ สามารถเปิด Issue ได้เลยครับ ขอบคุณที่ใช้งานครับ 🙏

Stranger Things Face Recognition
https://blog.lukkid.dev/posts/stranger-things-face-recognition/
Author
LUKKID
Published at
2026-01-05
License
CC BY-NC-SA 4.0