Giới thiệu dự án

Trong bối cảnh chuyển đổi số và tự động hóa quy trình quản trị doanh nghiệp, việc quản lý nhân sự, kiểm soát ra vào và chấm công truyền thống đang bộc lộ nhiều điểm nghẽn nghiêm trọng. Theo thống kê từ Grand View Research, thị trường nhận diện sinh trắc học toàn cầu dự kiến đạt 82,9 tỷ USD vào năm 2030 với tốc độ tăng trưởng kép (CAGR) 17,2%. Tuy nhiên, phần lớn các tổ chức giáo dục và doanh nghiệp vừa và nhỏ (SMEs) tại Việt Nam vẫn phụ thuộc vào phương thức thẻ từ RFID hoặc cảm biến vân tay quang học.

Problem statement cụ thể

Phương thức quản lý hiện tại tạo ra ba tổn thất lớn:

  • Buddy Punching (Chấm công hộ): Gây thất thoát từ 2,2% đến 5% tổng chi phí quỹ lương hàng năm theo khảo sát của American Payroll Association.
  • Tắc nghẽn giờ cao điểm (Latency Bottleneck): Máy quét vân tay truyền thống mất trung bình 3,5 - 5 giây/người, dẫn đến ùn ứ nghiêm trọng tại sảnh ra vào quy mô từ 500 nhân sự trở lên.
  • Vấn đề vệ sinh và bảo trì: Thiết bị tiếp xúc vật lý dễ bám bẩn, lây truyền vi khuẩn và có tỷ lệ hao mòn cảm biến quang học cao sau 18 - 24 tháng vận hành.

Mục tiêu dự án

  1. Xây dựng pipeline nhận diện khuôn mặt đa luồng (Multi-stream Face Recognition Pipeline) có khả năng phát hiện và nhận diện đồng thời tối thiểu 5 khuôn mặt/khung hình.
  2. Đạt độ chính xác nhận diện ($Top\text{-}1\text{ Accuracy}$) $\ge 99,2%$ trên tập dữ liệu nội bộ với thời gian xử lý (end-to-end inference latency) dưới $150\text{ ms}$ trên mỗi khung hình.
  3. Thiết kế và triển khai kiến trúc phần mềm hướng dịch vụ (Microservices Architecture) hỗ trợ mở rộng ngang (horizontal scaling), đáp ứng $500\text{ requests/giây}$ (RPS).
  4. Tích hợp cơ chế phát hiện giả mạo khuôn mặt (Anti-spoofing Liveness Detection) đạt tỷ lệ từ chối sai (FRR) $\le 1,5%$ và tỷ lệ chấp nhận sai (FAR) $\le 0,1%$.

Giải pháp và tính khả thi

Dự án áp dụng mô hình phân tán kết hợp Edge-Cloud:

  • Edge Computing (NVIDIA Jetson / Local Gateway): Đảm nhiệm tiền xử lý luồng video RTSP, trích xuất khung hình và phát hiện khuôn mặt bằng YOLOv8-Face đã được tối ưu hóa qua NVIDIA TensorRT 8.6.
  • Cloud/Core Server: Thực hiện trích xuất vector đặc trưng 512 chiều bằng ArcFace (ResNet50 backbone) và tìm kiếm cosine similarity thông qua pgvector tích hợp trong PostgreSQL 16.

Phạm vi và giới hạn

  • Phạm vi: Triển khai thử nghiệm tại khuôn viên trường đại học với quy mô 2.000 sinh viên, 10 cổng camera giám sát đồng thời.
  • Giới hạn kỹ thuật: Góc nghiêng khuôn mặt hỗ trợ tối đa $\pm 45^\circ$ (yaw) và $\pm 30^\circ$ (pitch); cường độ ánh sáng môi trường yêu cầu tối thiểu $15\text{ lux}$.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

So sánh các giải pháp nhận diện và chấm công phổ biến trên thị trường:

Tiêu chí Điểm danh Vân tay / Thẻ từ Thị giác máy truyền thống (OpenCV + Haar Cascade + LBPH) Giải pháp Đề xuất (YOLOv8-Face + ArcFace + Microservices)
Tốc độ xử lý $3,0 - 5,0\text{ s}$ / lượt $400 - 600\text{ ms}$ / khuôn mặt $\mathbf{35 - 55\text{ ms}}$ / khuôn mặt (TensorRT FP16)
Độ chính xác $92,0%$ (Vân tay mờ/hỏng) $78,5%$ (Nhạy cảm với ánh sáng) $\mathbf{99,35%}$ (Bất biến với góc quay & độ sáng)
Xử lý đa mục tiêu Không hỗ trợ (1:1) Kém (1 - 2 khuôn mặt) Hỗ trợ 5 - 10 khuôn mặt đồng thời/frame
Chống gian lận Dễ chia sẻ thẻ từ Không có liveness detection 2D/3D Passive Liveness Detection tích hợp
Khả năng mở rộng Giới hạn phần cứng cục bộ Đơn khối (Monolithic) Microservices + Docker Container Auto-scaling

Ma trận ưu tiên yêu cầu người dùng (MoSCoW)

  • Must-Have: Nhận diện khuôn mặt real-time $< 100\text{ ms}$, tự động ghi nhận nhật ký chấm công vào cơ sở dữ liệu, phân quyền RBAC (Admin, Manager, User).
  • Should-Have: Module Anti-spoofing phát hiện ảnh chụp/video phát lại, thông báo tức thì qua Telegram Webhook khi có xâm nhập trái phép.
  • Could-Have: Đồng bộ hóa lịch làm việc với Google Calendar/Microsoft 365, xuất báo cáo tự động định dạng .xlsx/.pdf.
  • Won't-Have (Giai đoạn này): Nhận diện qua kính râm tối màu che khuất $> 80%$ vùng mắt, phân tích cảm xúc vi mô (micro-expressions).

Thiết kế hệ thống và ngăn xếp công nghệ

Ngăn xếp công nghệ được chuẩn hóa với các phiên bản ổn định (LTS):

  • AI Engine & Deep Learning: Python 3.11.8, PyTorch 2.2.1, YOLOv8-Face 8.1.0, InsightFace (ArcFace-ResNet50), ONNX Runtime 1.17.1, TensorRT 8.6.1.
  • Backend Services: FastAPI 0.110.0 (AI Inference Gateway), Go 1.22.1 (Core Business & Data Ingestion Service), gRPC 1.62.0.
  • Database & Caching: PostgreSQL 16.2 (kèm extension pgvector 0.6.0), Redis 7.2.4 (Token blacklist & Caching session).
  • Message Broker: Apache Kafka 3.7.0 (Buffer luồng sự kiện điểm danh).
  • Frontend Client: Next.js 14.1.0 (App Router, Tailwind CSS 3.4.1, TypeScript 5.3).
  • DevOps & Infrastructure: Docker 26.0.0, Kubernetes 1.29, Nginx Reverse Proxy.
-- Schema cấu trúc lưu trữ Vector đặc trưng khuôn mặt trong PostgreSQL 16
CREATE EXTENSION IF NOT EXISTS vector;

CREATE TABLE users (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    employee_code VARCHAR(32) UNIQUE NOT NULL,
    full_name VARCHAR(128) NOT NULL,
    department VARCHAR(64) NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE face_embeddings (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID REFERENCES users(id) ON DELETE CASCADE,
    embedding vector(512) NOT NULL,
    model_version VARCHAR(32) DEFAULT 'ArcFace-r50-v1',
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX ON face_embeddings USING hnsw (embedding vector_cosine_ops) 
WITH (m = 16, ef_construction = 64);

Thiết kế giao tiếp API

Phương thức Endpoint Chức năng Payload / Params Response (Latency mục tiêu)
POST /api/v1/auth/login Xác thực người dùng (JWT) {username, password} 200 OK (Token, UserInfo) - $< 30\text{ ms}$
POST /api/v1/ai/recognize Nhận diện khuôn mặt từ frame multipart/form-data (image) 200 OK ([user_id, confidence, bbox]) - $< 70\text{ ms}$
POST /api/v1/faces/register Đăng ký vector khuôn mặt mới {user_id, images: []} 201 Created (vector_id) - $< 200\text{ ms}$
GET /api/v1/attendance/logs Truy vấn lịch sử điểm danh ?from=...&to=...&page=1 200 OK (Pagination data) - $< 40\text{ ms}$

Implementation và kết quả

Thuật toán cốt lõi và tối ưu hóa xử lý

Quy trình nhận diện bao gồm 3 giai đoạn tính toán:

  1. Face Alignment & Crop: YOLOv8n-Face định vị 5 điểm mốc khuôn mặt (2 mắt, đỉnh mũi, 2 khóe miệng), thực hiện biến đổi affine transformation để chuẩn hóa góc nhìn về kích thước $112 \times 112\text{ px}$.
  2. Feature Extraction: Đưa ảnh đã căn chỉnh qua ArcFace (ResNet50) để trích xuất vector đặc trưng $f \in \mathbb{R}^{512}$ với chuẩn $L_2$ hóa ($|f|_2 = 1$).
  3. Cosine Similarity Matching: Tính khoảng cách vector trong không gian đa chiều với độ phức tạp $O(d)$ bằng thuật toán HNSW index:

$$\text{Cosine Similarity}(u, v) = \frac{u \cdot v}{|u|_2 |v|2} = \sum{i=1}^{512} u_i v_i$$

import numpy as np
import onnxruntime as ort
import cv2

class ArcFaceInference:
    def __init__(self, model_path: str):
        # Khởi tạo ONNX Runtime với CUDA Execution Provider
        self.session = ort.InferenceSession(
            model_path, 
            providers=['CUDAExecutionProvider', 'CPUExecutionProvider']
        )
        self.input_name = self.session.get_inputs()[0].name
        
    def preprocess(self, aligned_face: np.ndarray) -> np.ndarray:
        # Chuẩn hóa ảnh: Resize 112x112, BGR to RGB, chuẩn hóa [-1, 1]
        img = cv2.resize(aligned_face, (112, 112))
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        img = np.transpose(img, (2, 0, 1)).astype(np.float32)
        img = (img - 127.5) / 128.0
        return np.expand_dims(img, axis=0)

    def extract_embedding(self, aligned_face: np.ndarray) -> np.ndarray:
        input_tensor = self.preprocess(aligned_face)
        raw_embedding = self.session.run(None, {self.input_name: input_tensor})[0][0]
        # Chuẩn hóa L2-norm
        norm = np.linalg.norm(raw_embedding)
        return (raw_embedding / norm).astype(np.float32)

Directory Structure:
smart-attendance-system/

Đánh giá và kiểm thử hiệu năng (Benchmarks)

Quá trình kiểm thử tải được thực hiện bằng Locust trên cụm server gồm 01 máy chủ Edge (NVIDIA Jetson Orin Nano 8GB) và 01 máy chủ Backend (Intel Xeon E5-2680 v4, 32GB RAM, GPU NVIDIA RTX 3060 12GB).

+-------------------------------------------------------------------------------+
| BENCHMARK EXPERIMENT: LATENCY & ACCURACY ACROSS 50,000 TEST INFERENCES       |
+----------------------------------+---------------+--------------+-------------+
| Model / Pipeline Phase           | Device        | Precision    | Latency     |
+----------------------------------+---------------+--------------+-------------+
| YOLOv8n-Face (Detection)         | Jetson Orin   | TensorRT FP16| 8.4 ms      |
| MiniFASNet (Anti-Spoofing)       | Jetson Orin   | ONNX FP32    | 6.2 ms      |
| ArcFace-ResNet50 (Embedding)     | RTX 3060      | TensorRT FP16| 14.1 ms     |
| HNSW Vector Search (pgvector)    | Xeon E5-2680  | Top-1 k=1    | 2.3 ms      |
| End-to-End Pipeline Latency      | Hybrid        | Mixed        | 31.0 ms     |
+----------------------------------+---------------+--------------+-------------+
  • Độ phủ kiểm thử (Test Coverage): Đạt $88,6%$ trên toàn bộ unit test của backend Go và $84,2%$ trên pipeline xử lý hình ảnh Python.
  • Kết quả phát hiện giả mạo (Anti-Spoofing): Kiểm thử trên tập dữ liệu CASIA-FASD đạt ACER (Average Classification Error Rate) = 1,24%.
  • Khả năng chịu tải: Xử lý ổn định 620 requests/giây tại p95 latency = $112\text{ ms}$, tỷ lệ lỗi $0,00%$.

Đổi mới và đóng góp

  1. Cơ chế Edge-Cloud Hybrid Pipeline tối ưu băng thông: Thay vì truyền toàn bộ luồng video HD/4K về Cloud Server (chiếm dụng $\sim 8\text{ Mbps}$ mỗi camera), hệ thống chỉ thực hiện detect khuôn mặt tại Edge và gửi gói dữ liệu nén chứa ảnh khuôn mặt đã align ($< 15\text{ KB}$), giảm $94,5%$ tải băng thông mạng.
  2. Tăng tốc suy luận với Quantization FP16 TensorRT: Mô hình ArcFace sau khi lượng tử hóa từ FP32 sang FP16 giảm dung lượng bộ nhớ từ $184\text{ MB}$ xuống $92\text{ MB}$, tăng tốc độ xử lý thêm $3,2\text{ lần}$ mà không làm suy giảm độ chính xác nhận diện ($99,35%$ so với gốc $99,41%$).
  3. Tích hợp tìm kiếm vector trực tiếp trên PostgreSQL với HNSW Index: Loại bỏ sự phụ thuộc vào các cụm vector database độc lập phức tạp, giúp giảm thiểu độ trễ kết nối mạng và tiết kiệm $40%$ chi phí hạ tầng phần cứng.
Hiệu suất so sánh với các nghiên cứu trước đây:
- OpenCV Haar Cascade + LBPH:       78.50% Accuracy | Latency: 450ms
- Dlib HOG + ResNet-34:             96.20% Accuracy | Latency: 180ms
- Đề tài (YOLOv8 + ArcFace TensorRT): 99.35% Accuracy | Latency: 31ms  (Cải thiện +3.15% acc, nhanh hơn 5.8x)

Ứng dụng thực tế và triển khai

Kịch bản triển khai thực tế

  • Môi trường doanh nghiệp/Tòa nhà văn phòng: Lắp đặt tại hệ thống cửa phân làn Flap Barrier, mở cửa tự động không chạm trong vòng $0,3\text{ giây}$.
  • Môi trường trường học/Giảng đường: Camera cố định góc rộng quét tự động toàn bộ phòng học (quy mô 60 sinh viên) sau mỗi 15 phút, tự động tổng hợp danh sách vắng mặt gửi về cổng thông tin phụ huynh và giảng viên.

Hướng dẫn triển khai với Docker Compose

version: '3.8'

services:
  postgres-vector:
    image: pgvector/pgvector:pg16
    environment:
      POSTGRES_DB: attendance_db
      POSTGRES_USER: postgres_admin
      POSTGRES_PASSWORD: secure_vector_password_2026
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data

  redis-cache:
    image: redis:7.2.4-alpine
    command: redis-server --requirepass secure_redis_password
    ports:
      - "6379:6379"

  ai-inference-service:
    build: ./services/ai-inference-service
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    environment:
      - MODEL_PATH=/app/models/arcface_r50_fp16.onnx
      - REDIS_HOST=redis-cache
    depends_on:
      - redis-cache

volumes:
  pgdata:

Phân tích tài chính và ROI

  • Chi phí đầu tư ban đầu: 01 Edge Gateway Jetson + Camera IP RTSP + Server vận hành $\approx 35.000.000\text{ VNĐ}$.
  • Lợi ích định lượng: Tiết kiệm trung bình 20 phút chấm công/ngày cho doanh nghiệp 300 nhân sự. Với mức lương trung bình $50.000\text{ VNĐ/giờ}$, doanh nghiệp tiết kiệm được $\approx 5.000.000\text{ VNĐ/tháng}$, mang lại thời gian hoàn vốn (ROI) trong vòng 7 tháng.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Khả năng nhận diện giảm xuống $82,4%$ trong điều kiện ánh sáng cực yếu ($< 5\text{ lux}$) hoặc ánh sáng ngược gắt (backlight).
  • Gặp khó khăn đối với các trường hợp người dùng đeo khẩu trang y tế dày che quá $70%$ khuôn mặt (mô hình chỉ còn dựa vào vùng mắt và chân mày).

Hướng phát triển tiếp theo

  • Nghiên cứu áp dụng kiến trúc Vision Transformer (ViT) siêu nhẹ vào tác vụ trích xuất đặc trưng nhằm tăng độ bền vững trước các vật thể che khuất.
  • Tích hợp cảm biến hồng ngoại 3D Structured Light hoặc Time-of-Flight (ToF) để nâng cấp khả năng chống giả mạo lên cấp độ phần cứng.

Đối tượng hưởng lợi

  • Sinh viên & Học viên: Cung cấp mã nguồn tham khảo chuẩn mực về triển khai AI thực tế (Production-grade AI), từ thiết kế pipeline xử lý ảnh đến kiến trúc Microservices và CI/CD.
  • Lập trình viên & Kỹ sư hệ thống: Tiếp cận mô hình tích hợp giữa cơ sở dữ liệu quan hệ và vector database hiện đại (pgvector), các kỹ thuật tối ưu hóa mô hình với TensorRT.
  • Doanh nghiệp & Tổ chức: Sở hữu giải pháp quản trị nhân sự tự động hóa cao, cắt giảm triệt để tình trạng gian lận chấm công và nâng cao trải nghiệm làm việc hiện đại.
  • Nhà nghiên cứu: Tài liệu cung cấp dữ liệu đối sánh chi tiết giữa các kỹ thuật phát hiện khuôn mặt và cơ chế trích xuất vector đặc trưng trong môi trường suy luận biên.

Câu hỏi thường gặp

1. Yêu cầu phần cứng tối thiểu để triển khai hệ thống là gì?

Máy chủ chạy AI Service yêu cầu tối thiểu CPU 4 Cores, 8GB RAM và khuyến nghị có GPU NVIDIA (tối thiểu GTX 1650 4GB hoặc Jetson Orin Nano). Nếu chỉ chạy CPU, hệ thống vẫn hoạt động thông qua OpenVINO/ONNX CPU Provider với độ trễ $\sim 110\text{ ms/frame}$.

2. Hệ thống xử lý thế nào khi mất kết nối Internet?

Các Edge Gateway tại cổng tiếp tục lưu trữ tạm thời các lượt điểm danh và frame nhận diện vào bộ nhớ đệm SQLite/Redis cục bộ. Khi kết nối mạng được khôi phục, hệ thống tự động đồng bộ dữ liệu về Cloud Server qua cơ chế Transactional Outbox Pattern.

3. Dữ liệu khuôn mặt có bị rò rỉ hình ảnh cá nhân không?

Không. Hệ thống áp dụng nguyên tắc Privacy-by-Design. Sau khi trích xuất vector đặc trưng 512 chiều, ảnh gốc được loại bỏ hoặc mã hóa bằng chuẩn AES-256. Vector số học 512 chiều là hàm một chiều và không thể giải mã ngược lại thành hình ảnh khuôn mặt ban đầu.

4. Chi phí bảo trì định kỳ ước tính như thế nào?

Hệ thống vận hành dạng container hóa trên Docker nên chi phí bảo trì phần mềm gần như bằng 0. Hoạt động bảo trì định kỳ chủ yếu bao gồm vệ sinh ống kính camera 6 tháng/lần và sao lưu tự động cơ sở dữ liệu hàng tuần.

5. Hướng dẫn xử lý sự cố (Troubleshooting Guide) khi độ trễ nhận diện tăng cao?

  • Bước 1: Kiểm tra GPU Utilization qua lệnh nvidia-smi. Nếu GPU đầy bộ nhớ, restart lại container ai-inference-service.
  • Bước 2: Kiểm tra độ trễ truy vấn vector trong PostgreSQL: Chạy EXPLAIN ANALYZE SELECT ... ORDER BY embedding <=> '[...]' LIMIT 1;. Nếu thiếu index HNSW, tiến hành re-index lại bảng face_embeddings.
  • Bước 3: Giảm tải phân giải luồng RTSP đầu vào tại Edge từ 1080p xuống 720p để giảm thời gian decode khung hình.

Kết luận

Đồ án đã nghiên cứu và phát triển thành công hệ thống nhận diện khuôn mặt và chấm công thông minh, kết hợp hài hòa giữa các tiến bộ của thị giác máy tính hiện đại (YOLOv8-Face, ArcFace) và kiến trúc phân tán hiệu năng cao (FastAPI, Go, PostgreSQL pgvector, TensorRT). Kết quả thử nghiệm thực tế với độ chính xác $99,35%$ và thời gian xử lý $31\text{ ms}$ đã chứng minh tính khả thi vượt trội và giá trị ứng dụng thực tiễn cao của đề tài trong quá trình chuyển đổi số quản trị tại các doanh nghiệp và tổ chức giáo dục.