File size: 6,033 Bytes
75557db
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
---
title: FaceID AI Service
emoji: 👤
colorFrom: indigo
colorTo: purple
sdk: docker
app_port: 7860
pinned: false
---

# 🚀 FaceID AI Model Service (Docker & HuggingFace Spaces)

Dịch vụ AI nhận diện khuôn mặt đóng gói độc lập dưới dạng Docker Container, chạy bằng **Flask + Gunicorn + InsightFace**, sẵn sàng để deploy lên **HuggingFace Spaces** hoặc các nền tảng Container (Docker, AWS ECS, Google Cloud Run).

> [!NOTE]
> Thư mục này được thiết kế tự chứa (Self-contained) hoàn chỉnh, chỉ tập trung vào **AI Model Service**, không ảnh hưởng đến Frontend hay Backend chính của ứng dụng.

---

## 📂 Cấu trúc dịch vụ đóng gói
```text
ai_service_docker/
├── Dockerfile                  # Build image tối ưu, tải sẵn model buffalo_l lúc build
├── docker-compose.yml          # Hỗ trợ chạy & test nhanh dưới local
├── .dockerignore               # Loại bỏ các file rác, virtualenv và local DB
├── .env.example                # File cấu hình mẫu
├── requirements.txt            # Thư viện Python (đã đổi sang opencv-python-headless & thêm gunicorn)
├── app.py                      # File entry point chạy WSGI (đã cấu hình startup tại module level)
├── config.py                   # Cấu hình biến môi trường (default PORT=7860 cho HuggingFace)
├── face_model/                 # InsightFace Model Analyzer & RAM Cache
├── storage/                    # Storage Layer kết nối MongoDB & Supabase
├── api/                        # RESTful API Endpoints (18 routes)
└── utils/                      # Helper xử lý ảnh
```

---

## 🛠️ Hướng dẫn Chạy & Test Local

### 1. Chuẩn bị file `.env`
Sao chép `.env.example` thành `.env` bên trong thư mục `ai_service_docker/` và điền đầy đủ các cấu hình thực tế của bạn (MongoDB URI, Supabase URI):
```bash
cp .env.example .env
```

### 2. Khởi chạy bằng Docker Compose (Khuyến nghị)
Docker Compose được cấu hình ánh xạ port `8000` của máy bạn vào port `7860` của container để bạn có thể test bình thường như chạy không có Docker:
```bash
# Từ thư mục gốc dự án hoặc thư mục ai_service_docker/
docker compose up --build -d
```
*   **API URL (Local):** `http://localhost:8000/api/health`
*   **Xem logs container:** `docker compose logs -f`
*   **Dừng container:** `docker compose down`

### 3. Khởi chạy bằng Docker CLI (Thủ công)
Nếu không dùng Compose:
```bash
# Build image
docker build -t faceid-ai-service .

# Run container (truyền file .env)
docker run -p 8000:7860 --env-file .env --name faceid-ai-service-run faceid-ai-service
```

---

## ☁️ Hướng dẫn Deploy lên HuggingFace Spaces

HuggingFace Spaces hỗ trợ chạy Dockerfile trực tiếp một cách miễn phí. Dưới đây là 2 cách để deploy:

### Cách 1: Git Push trực tiếp vào Space (Dễ và Khuyến nghị)

1. Truy cập [HuggingFace Spaces](https://huggingface.co/spaces) và nhấn **Create new Space**.
2. Thiết lập thông số:
   * **Space name**: Tùy chọn (ví dụ: `faceid-ai-service`)
   * **License**: open-source (tùy chọn)
   * **SDK**: Chọn **Docker** (Thay vì Streamlit/Gradio)
   * **Docker template**: Chọn **Blank**
   * **Space hardware**: Chọn **CPU basic** (Miễn phí) hoặc nâng cấp GPU nếu muốn.
3. Clone Space repository vừa tạo về máy cục bộ của bạn:
   ```bash
   git clone https://huggingface.co/spaces/<your-username>/<your-space-name>
   ```
4. Copy toàn bộ các file bên trong thư mục `ai_service_docker/` (bao gồm `Dockerfile`, `app.py`, `face_model/`, v.v.) dán vào thư mục Space vừa clone.
5. Commit và Push lên HuggingFace:
   ```bash
   git add .
   git commit -m "Deploy FaceID AI Service via Docker"
   git push origin main
   ```
6. HuggingFace sẽ tự động nhận diện phần **YAML metadata** ở đầu file `README.md` này, tiến hành build Dockerfile (tải trước model `buffalo_l` mất khoảng 2-3 phút) và kích hoạt dịch vụ chạy trên port `7860`.

---

### Cách 2: Deploy từ Docker Hub / Private Registry

Nếu bạn muốn build image trên máy mình hoặc qua GitHub Actions rồi đẩy lên Registry trước:

1. Đăng nhập Docker Hub và Build / Push image:
   ```bash
   docker build -t <your-dockerhub-username>/faceid-ai-service:latest .
   docker push <your-dockerhub-username>/faceid-ai-service:latest
   ```
2. Trên Space của HuggingFace, thay vì chọn Blank Docker, bạn có thể chỉnh sửa `README.md` của Space trên giao diện web để thêm thuộc tính `app_port``docker` kéo trực tiếp từ registry:
   ```yaml
   ---
   title: FaceID AI Service
   sdk: docker
   docker_image: <your-dockerhub-username>/faceid-ai-service:latest
   app_port: 7860
   ---
   ```

---

## 🔑 Cấu hình Biến môi trường (Secrets) trên HuggingFace

Để bảo mật thông tin kết nối Cơ sở dữ liệu (MongoDB, Supabase), **TUYỆT ĐỐI KHÔNG** push file `.env` lên HuggingFace. Thay vào đó, hãy dùng **Variables and Secrets**:

1. Vào Space của bạn trên HuggingFace -> Chọn tab **Settings**.
2. Kéo xuống mục **Variables and Secrets** -> Click **New secret**.
3. Thêm các key quan trọng sau:
   * `MONGO_URI`: Đường dẫn kết nối MongoDB Atlas của bạn.
   * `SUPABASE_DB_URI`: Đường dẫn kết nối Supabase PostgreSQL của bạn.
4. (Tùy chọn) Thêm **Variables** nếu muốn ghi đè cấu hình mặc định:
   * `SIMILARITY_THRESHOLD`: Ví dụ `0.45`
   * `CORS_ORIGINS`: Ví dụ `*` hoặc domain frontend của bạn.

Sau khi cập nhật Secrets, Space sẽ tự động rebuild/restart để nhận cấu hình mới. Dịch vụ AI của bạn sẽ hoạt động hoàn toàn bảo mật và tự động!