Skip to content

Instantly share code, notes, and snippets.

@quangpd
Created December 5, 2024 09:34
Show Gist options
  • Save quangpd/f4579d3edadb7ad2ee3c16de39d5f3a5 to your computer and use it in GitHub Desktop.
Save quangpd/f4579d3edadb7ad2ee3c16de39d5f3a5 to your computer and use it in GitHub Desktop.
CompreFace là một giải pháp nhận diện khuôn mặt mã nguồn mở
CompreFace là một giải pháp nhận diện khuôn mặt mã nguồn mở với các chức năng chính sau:
1. NHẬN DIỆN KHUÔN MẶT (FACE RECOGNITION)
Xác định danh tính (Identification):So sánh khuôn mặt được cung cấp với một danh sách (database) các khuôn mặt đã được lưu trữ để xác định danh tính.
Trả về ID hoặc thông tin của người tương ứng.
Xác minh danh tính (Verification):So sánh hai khuôn mặt để kiểm tra xem có phải là cùng một người hay không.
Trả về kết quả là "match" hoặc "no match" với độ chính xác cao.
2. PHÁT HIỆN KHUÔN MẶT (FACE DETECTION)
Phát hiện và xác định vị trí các khuôn mặt trong ảnh.
Hỗ trợ tính năng phát hiện nhiều khuôn mặt trong một bức ảnh.
Trả về tọa độ các vùng chứa khuôn mặt trong ảnh.
3. NHẬN DIỆN CẢM XÚC (EMOTION RECOGNITION)
Phân tích khuôn mặt và nhận diện các cảm xúc như:Hạnh phúc
Buồn bã
Giận dữ
Sợ hãi
Trung lập
Tính năng này có thể được sử dụng trong phân tích tâm lý hoặc trải nghiệm người dùng.
4. NHẬN DIỆN ĐỘ TUỔI VÀ GIỚI TÍNH (AGE AND GENDER DETECTION)
Độ tuổi: Ước lượng độ tuổi dựa trên khuôn mặt.
Giới tính: Xác định giới tính (nam, nữ) của người trong ảnh.
5. XỬ LÝ VIDEO (REAL-TIME FACE RECOGNITION)
Hỗ trợ nhận diện khuôn mặt trong thời gian thực qua video stream.
Có thể tích hợp với hệ thống giám sát (CCTV) để nhận diện và theo dõi.
6. QUẢN LÝ API VÀ ỨNG DỤNG
Tạo ứng dụng: Cho phép tạo nhiều ứng dụng với các cấu hình API Key khác nhau.
API RESTful:Gửi ảnh qua API để nhận diện.
Trả về kết quả theo định dạng JSON.
Quản lý database khuôn mặt:Thêm, cập nhật, hoặc xóa các khuôn mặt trong cơ sở dữ liệu.
7. HỖ TRỢ NHẬN DIỆN QUA ÁNH XẠ KHUÔN MẶT (FACE EMBEDDINGS)
Lưu trữ và so sánh khuôn mặt thông qua vector hóa (embeddings).
Giảm độ phức tạp và tăng tốc độ nhận diện.
8. TÙY CHỈNH VÀ MỞ RỘNG
Cấu hình ngưỡng nhận diện:Cho phép tùy chỉnh ngưỡng xác định (threshold) để điều chỉnh độ chính xác và tốc độ.
Hỗ trợ nhiều mô hình AI:Người dùng có thể tích hợp các mô hình nhận diện khuôn mặt khác nếu muốn.
9. BẢO MẬT
Sử dụng API Key để đảm bảo chỉ có các ứng dụng được cấp quyền mới có thể truy cập.
Dữ liệu nhận diện và hình ảnh được xử lý trên server nội bộ, đảm bảo quyền riêng tư.
10. DỄ DÀNG TRIỂN KHAI
Docker: Chạy trên bất kỳ hệ thống nào hỗ trợ Docker, từ máy tính cá nhân đến các hệ thống đám mây.
Giao diện quản trị web:Dễ sử dụng, cho phép quản lý ứng dụng, người dùng và cấu hình API.
CÁC BƯỚC TRIỂN KHAI HOÀN THIỆN VỚI FLUTTER VÀ BACKEND
1. YÊU CẦU HỆ THỐNG
Docker và Docker Compose: CompreFace chạy trên Docker, bạn cần cài đặt Docker và Docker Compose trước.Docker: Hướng dẫn cài đặt Docker
Docker Compose: Hướng dẫn cài đặt Docker Compose
Cấu hình tối thiểu:CPU: 4 cores
RAM: 4GB
Dung lượng ổ đĩa: 20GB
2. TẢI VÀ CÀI ĐẶT COMPREFACE
BƯỚC 1: CLONE REPOSITORY
Mở terminal và chạy:
git clone https://github.com/exadel-inc/CompreFace.git cd CompreFace
BƯỚC 2: CHẠY DỊCH VỤ VỚI DOCKER COMPOSE
CompreFace cung cấp file docker-compose.yml để khởi chạy toàn bộ dịch vụ. Bạn chạy lệnh:
docker-compose up -d
Lệnh này sẽ tải các container cần thiết và khởi chạy CompreFace trên cổng mặc định http://localhost:8000.
3. TRUY CẬP GIAO DIỆN WEB
Mở trình duyệt và truy cập:
http://localhost:8000
Đăng nhập:
Tài khoản mặc định:
Email: admin
Mật khẩu: admin
Để tích hợp CompreFace vào ứng dụng Flutter, bạn cần sử dụng API của CompreFace và xây dựng giao diện trên Flutter để gửi ảnh nhận diện khuôn mặt, sau đó hiển thị kết quả. Dưới đây là hướng dẫn chi tiết:
1. CHUẨN BỊ BACKEND COMPREFACE
Cài đặt CompreFace:Làm theo hướng dẫn ở phần trên để khởi chạy CompreFace trên server của bạn (hoặc máy cục bộ với Docker).
Lấy API Key từ giao diện quản trị của CompreFace.
Đảm bảo API hoạt động:
Gọi thử API nhận diện khuôn mặt bằng Postman để kiểm tra:
Endpoint: http://<server_ip>:8000/api/v1/recognition/faces
Method: POST
Headers:
X-api-key: YOUR_API_KEY
Body (dạng form-data):
javascriptSao chép mãfile: <tệp ảnh>
2. TẠO ỨNG DỤNG FLUTTER
BƯỚC 1: CÀI ĐẶT FLUTTER
Đảm bảo bạn đã cài đặt Flutter. Nếu chưa, làm theo Hướng dẫn cài đặt Flutter.
BƯỚC 2: TẠO DỰ ÁN FLUTTER MỚI
flutter create face_recognition_app cd face_recognition_app
BƯỚC 3: CÀI ĐẶT THƯ VIỆN CẦN THIẾT
Thêm các thư viện vào tệp pubspec.yaml:
dependencies: http: ^0.15.0 image_picker: ^0.8.7+4
Cài đặt thư viện:
flutter pub get
3. TÍCH HỢP API COMPREFACE
TỆP main.dart
Tạo giao diện cho phép người dùng tải ảnh và gửi đến API của CompreFace.
import 'dart:convert'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'package:image_picker/image_picker.dart'; void main() { runApp(const FaceRecognitionApp()); } class FaceRecognitionApp extends StatelessWidget { const FaceRecognitionApp({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return MaterialApp( title: 'CompreFace Recognition', home: FaceRecognitionScreen(), ); } } class FaceRecognitionScreen extends StatefulWidget { @override _FaceRecognitionScreenState createState() => _FaceRecognitionScreenState(); } class _FaceRecognitionScreenState extends State<FaceRecognitionScreen> { File? _image; final picker = ImagePicker(); String? _result; Future<void> _pickImage() async { final pickedFile = await picker.pickImage(source: ImageSource.gallery); if (pickedFile != null) { setState(() { _image = File(pickedFile.path); _result = null; }); } } Future<void> _recognizeFace() async { if (_image == null) return; const apiUrl = "http://<server_ip>:8000/api/v1/recognition/faces"; const apiKey = "YOUR_API_KEY"; var request = http.MultipartRequest('POST', Uri.parse(apiUrl)) ..headers['x-api-key'] = apiKey ..files.add(await http.MultipartFile.fromPath('file', _image!.path)); var response = await request.send(); if (response.statusCode == 200) { var responseBody = await response.stream.bytesToString(); var jsonResponse = jsonDecode(responseBody); setState(() { _result = jsonResponse.toString(); }); } else { setState(() { _result = "Error: ${response.statusCode}"; }); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('CompreFace Recognition'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ _image == null ? const Text('No image selected.') : Image.file(_image!, height: 200), const SizedBox(height: 20), ElevatedButton( onPressed: _pickImage, child: const Text('Pick Image'), ), const SizedBox(height: 20), ElevatedButton( onPressed: _recognizeFace, child: const Text('Recognize Face'), ), const SizedBox(height: 20), _result == null ? const Text('Result will appear here.') : Text( 'Result: $_result', textAlign: TextAlign.center, ), ], ), ), ); } }
4. CHẠY ỨNG DỤNG
Kết nối điện thoại hoặc mở trình giả lập Android/iOS.
Chạy lệnh:
flutter run
Tải ảnh và kiểm tra kết quả nhận diện khuôn mặt.
5. TÙY CHỈNH VÀ MỞ RỘNG
Quản lý danh sách khuôn mặt:Lưu kết quả nhận diện vào database (SQLite hoặc Firestore).
Thêm chức năng chụp ảnh:Sử dụng ImageSource.camera trong ImagePicker.
Giao diện chuyên nghiệp hơn:Sử dụng thư viện như flutter_bloc để quản lý trạng thái hoặc flutter_staggered_grid_view để hiển thị danh sách ảnh.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment