# 🔍 Face Recognition Web Application
เว็บแอปพลิเคชันสำหรับจดจำใบหน้าด้วย AI โดยใช้ Face-API.js เปรียบเทียบใบหน้าระหว่างรูปภาพต้นฉบับกับกล้องเว็บแคมแบบเรียลไทม์
**ผู้พัฒนา:** Goragod Wiriya
---
## ✨ คุณสมบัติ
- 🖼️ **อัปโหลดรูปภาพต้นฉบับ** - รองรับไฟล์ JPG, PNG, GIF
- 🤖 **AI Face Detection** - ตรวจจับใบหน้าอัตโนมัติด้วย TinyFaceDetector
- ✂️ **Auto Crop Face** - ตัดเฉพาะส่วนใบหน้าแสดงผลให้เห็นชัดเจน
- 📹 **Real-time Comparison** - เปรียบเทียบใบหน้าจากกล้องแบบเรียลไทม์
- 📊 **Similarity Score** - แสดงคะแนนความคล้ายคลึงเป็นเปอร์เซ็นต์
- 🎯 **Face Bounding Box** - วาดกรอบรอบใบหน้าที่ตรวจพบ
- 📱 **Responsive Design** - รองรับทั้งเดสก์ท็อปและมือถือ
- 🎨 **Modern UI** - ดีไซน์สไตล์ Minimal Glass Morphism
---
## 🚀 การติดตั้งและใช้งาน
### ข้อกำหนดระบบ
- เว็บเบราว์เซอร์ที่รองรับ WebRTC (Chrome, Firefox, Safari, Edge)
- การเชื่อมต่ออินเทอร์เน็ต (สำหรับโหลด AI Models)
- กล้องเว็บแคม
- Web Server (Apache, Nginx, หรือ Local Server)
### วิธีติดตั้ง
1. **ดาวน์โหลดโปรเจ็ค**
2. **วางไฟล์ในเว็บเซิร์ฟเวอร์**
```
/var/www/html/face-recognition/
├── index.html
├── script.js
└── README.md
```
3. **เปิดใช้งาน**
- เปิดเบราว์เซอร์ไปที่ `http://localhost/face-recognition/`
- อนุญาตการใช้งานกล้องเมื่อมีการแจ้งเตือน
---
## 🎯 วิธีใช้งาน
### ขั้นตอนที่ 1: อัปโหลดรูปภาพต้นฉบับ
1. คลิกปุ่ม **"เลือกรูปภาพ"**
2. เลือกไฟล์รูปภาพที่มีใบหน้าชัดเจน
3. ระบบจะตรวจจับใบหน้าและตัดเฉพาะส่วนหน้าแสดงผล
4. รอข้อความ **"วิเคราะห์ภาพต้นฉบับสำเร็จ!"**
### ขั้นตอนที่ 2: เปิดกล้องเปรียบเทียบ
1. ระบบจะเปิดกล้องอัตโนมัติ
2. มองไปที่กล้อง เฟรมจะแสดงผลการเปรียบเทียบทันที
3. ดูผลลัพธ์ในส่วน **"ผลการตรวจสอบ"**
### การอ่านผลลัพธ์
- **🟢 ตรงกัน!** - ใบหน้าตรงกับรูปต้นฉบับ (similarity > 50%)
- **🔴 ไม่ตรงกัน** - ใบหน้าไม่ตรงกับรูปต้นฉบับ (similarity ≤ 50%)
- **Similarity Score** - คะแนนความคล้ายคลึง (0-100%)
---
## 🛠️ เทคโนโลยีที่ใช้
### Frontend
- **HTML5** - โครงสร้างหน้าเว็บ
- **CSS3** - ดีไซน์ Responsive และ Glass Morphism Effect
- **Vanilla JavaScript** - ตัวจัดการเหตุการณ์และ API
### AI/ML Libraries
- **[Face-API.js v0.22.2](https://github.com/justadudewhohacks/face-api.js)** - ไลบรารี Face Recognition
- **TensorFlow.js** - Backend สำหรับ Machine Learning
### AI Models (โหลดจาก GitHub)
- **TinyFaceDetector** - ตรวจจับใบหน้า (เร็ว, แม่นยำปานกลาง)
- **FaceLandmark68Net** - จุดสำคัญบนใบหน้า 68 จุด
- **FaceRecognitionNet** - สร้าง Face Descriptor สำหรับเปรียบเทียบ
### Web APIs
- **MediaDevices.getUserMedia()** - เข้าถึงกล้องเว็บแคม
- **Canvas API** - ประมวลผลรูปภาพและวาดกรอบ
- **FileReader API** - อ่านไฟล์รูปภาพ
---
## 📋 โครงสร้างไฟล์
```
face-recognition/
├── index.html # หน้าเว็บหลัก
├── script.js # JavaScript สำหรับ Face Recognition
└── README.md # เอกสารนี้
```
### index.html
- โครงสร้าง HTML แบบ Responsive Grid Layout
- CSS Glass Morphism และ Gradient Background
- การเชื่อมต่อ Face-API.js จาก CDN
### script.js
- ฟังก์ชันโหลด AI Models จาก GitHub
- การประมวลผลรูปภาพและ Face Detection
- Real-time Face Comparison และการแสดงผล
- การจัดการ Canvas และ Bounding Box
---
## ⚙️ การปรับแต่ง
### ปรับค่าความแม่นยำ
```javascript
const threshold = 0.5; // ค่าเกณฑ์ (0-1)
// 0.3 = หลวม, 0.5 = ปานกลาง, 0.7 = เข้มงวด
```
### ปรับความเร็วการตรวจสอบ
```javascript
setInterval(async () => {
// Face detection code
}, 200); // 200ms = 5 FPS, 100ms = 10 FPS
```
### ปรับขนาด Crop Padding
```javascript
const padding = 30; // pixel รอบใบหน้า
// 20 = แน่น, 30 = ปานกลาง, 50 = หลวม
```
---
## 🔧 การแก้ไขปัญหา
### ปัญหาที่พบบ่อย
**1. ไม่สามารถเข้าถึงกล้องได้**
- ✅ ตรวจสอบสิทธิ์การใช้งานกล้องในเบราว์เซอร์
- ✅ ใช้ HTTPS หรือ localhost เท่านั้น
- ✅ กล้องไม่ถูกใช้งานโดยแอปอื่น
**2. โมเดล AI โหลดไม่ได้**
- ✅ ตรวจสอบการเชื่อมต่ออินเทอร์เน็ต
- ✅ รอสักครู่ (โมเดลใหญ่ ~100MB)
- ✅ ตรวจสอบ Console สำหรับ error message
**3. ไม่พบใบหน้าในรูปภาพ**
- ✅ ใช้รูปที่มีใบหน้าชัดเจน
- ✅ ใบหน้าหันหน้าตรงหรือเฉียง ไม่เกิน 45 องศา
- ✅ แสงสว่างเพียงพอ
**4. ความแม่นยำไม่ดี**
- ✅ ใช้รูปภาพต้นฉบับคุณภาพสูง
- ✅ ปรับค่า threshold ให้เหมาะสม
- ✅ ใบหน้าอยู่ตรงกลางของรูป
---
## 🌟 ฟีเจอร์ขั้นสูง
### การบันทึกผลลัพธ์
สามารถเพิ่มฟังก์ชันบันทึกผลการเปรียบเทียบ:
```javascript
// บันทึกลง LocalStorage
localStorage.setItem('faceResults', JSON.stringify(results));
```
### การเปรียบเทียบหลายใบหน้า
ปรับใช้ `detectAllFaces()` แทน `detectSingleFace()`:
```javascript
const detections = await faceapi.detectAllFaces(image)
.withFaceLandmarks()
.withFaceDescriptors();
```
### การปรับปรุงประสิทธิภาพ
- ลดขนาดรูปภาพก่อนประมวลผล
- ใช้ Web Workers สำหรับ Face Detection
- Cache AI Models ใน IndexedDB
---
## 📄 License
MIT License - ใช้งานได้อย่างอิสระทั้งเชิงพาณิชย์และส่วนบุคคล
---
## 👨💻 ผู้พัฒนา
**Goragod Wiriya**
- 🌐 Website: [https://goragod.com]
- 📧 Email: [admin@goragod.com]
- 💼 GitHub: [@goragodwiriya]
---
## 🙏 กิตติกรรมประกาศ
- **Face-API.js** - Vincent Mühler และทีมพัฒนา
- **TensorFlow.js** - Google TensorFlow Team
- **Pre-trained Models** - Face-API.js Community