Spaces:
Runtime error
Runtime error
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` và `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!
|