Tien MonC Final
Tien MonC Final
CƠ SỞ TP.HCM
KHOA ĐIỆN TỬ 2
______________________
Đề tài:
Hồ Nhựt Minh
LỜI CẢM ƠN
Em xin gửi lời cảm ơn chân thành và sâu sắc nhất đến thầy Hồ Nhựt Minh ,
người đã tận tình hướng dẫn, hỗ trợ và chia sẻ những kiến thức quý báu trong
suốt quá trình em thực hiện đề tài môn học này.
Sự chỉ bảo tận tình và những ý kiến đóng góp của thầy đã giúp em không chỉ
hoàn thành bài báo cáo mà còn hiểu rõ hơn về vấn đề nghiên cứu, nâng cao kiến
thức và kỹ năng thực tiễn.
Mặc dù đã nỗ lực hết sức, nhưng do hạn chế về thời gian và kinh nghiệm, bài
báo cáo của em không tránh khỏi những thiếu sót. Em rất mong nhận được
những ý kiến đóng góp thêm từ thầy để em có thể cải thiện và hoàn thiện hơn
trong tương lai.
Em xin chân thành cảm ơn!
MỤC LỤC
LỜI CẢM ƠN......................................................................................................................... 3
MỤC LỤC...............................................................................................................................4
CHƯƠNG 1: TỔNG QUAN VÀ CƠ SỞ LÝ THUYẾT......................................................6
1. Giới thiệu bài toán.......................................................................................................6
1.1 Tổng quan đề tài nghiên cứu..................................................................................6
1.2 Mục tiêu và phạm vi thực hiện...............................................................................6
1.3 Ý nghĩa và tính ứng dụng thực tế.............................................................................7
1.4 Các thách thức và giới hạn...................................................................................... 7
2. Cơ sở lý thuyết.............................................................................................................. 8
2.1 Các khái niệm cơ bản................................................................................................ 8
2.2 Phân tích các phương pháp........................................................................................9
3. Công nghệ và thư viện sử dụng................................................................................11
3.1 Ngôn ngữ lập trình C++............................................................................................11
3.2 Thư viện chuyên dụng..............................................................................................11
CHƯƠNG 2: THIẾT KẾ VÀ CÀI ĐẶT.............................................................................12
1. Phân tích yêu cầu..........................................................................................................12
1.1 Yêu cầu chức năng...................................................................................................12
1.2 Yêu cầu phi chức năng............................................................................................. 13
2. Thiết kế hệ thống..........................................................................................................13
2.1 Kiến trúc tổng thể...................................................................................................13
2.1.1 Sơ đồ khối hệ thống...............................................................................................13
2.1.2 Các module chính..................................................................................................15
2.1.3 Luồng dữ liệu và xử lý...........................................................................................15
2.2 Thiết kế chi tiết...................................................................................................... 15
2.3 Cài đặt chương trình................................................................................................16
1. Phần đầu chương trình - Khai báo thư viện................................................................16
2. Tạo giao diện trừu tượng IFaceDetector.............................................................17
3. Lớp FaceDetector - Phát hiện mặt và chồng mặt nạ............................................17
4. Lớp FaceMaskApplication - Điều khiển ứng dụng...........................................19
5. Phần mở rộng:........................................................................................................... 20
5.1 Lớp EyeDetector: Phát hiện mắt........................................................................20
5.2 Lớp NoseDetector -Phát hiện mũi....................................................................21
5.3 Lớp MoustacheDetector – Phát hiện miệng và chồng râu..............................22
5.4 Lớp EarDetector – Phát hiện tai.........................................................................24
6. Main function:........................................................................................................... 25
CHƯƠNG 3. THỰC NGHIỆM VÀ ĐÁNH GIÁ............................................................................27
3.1 Kết quả thực nghiệm................................................................................................... 27
3.2 Hướng phát triển...........................................................................................................31
3.2.1 Các cải tiến có thể thực hiện..................................................................................31
3.2.2 Mở rộng chức năng...............................................................................................31
3.2.1 Tối ưu hiệu năng....................................................................................................32
KẾT LUẬN........................................................................................................................... 32
TÀI LIỆU THAM KHẢO..................................................................................................33
MÃ NGUỒN........................................................................................................................ 33
Mục tiêu:
Xây dựng ứng dụng nhận diện khuôn mặt và các bộ phận trên khuôn mặt (facial landmarks)
bằng OpenCV.
Áp dụng kỹ thuật overlay để tạo hiệu ứng hình ảnh hoặc chồng các lớp mặt nạ lên các bộ
phận khuôn mặt như mắt, mũi, hoặc miệng.
+ Sử dụng mô hình Haar Cascade của OpenCV để phát hiện khuôn mặt và bộ phận trên
khuôn mặt.
+ Chạy thử nghiệm trên ảnh tĩnh và video thời gian thực từ webcam.
+ Thực hiện chồng lớp mặt nạ theo cách tùy chỉnh, dựa trên các vị trí phát hiện được từ mô
hình Haar Cascade.
Giới thiệu các kỹ thuật cơ bản trong phát hiện và theo dõi khuôn mặt bằng OpenCV.
Làm rõ quy trình kết hợp phát hiện khuôn mặt với việc tạo hiệu ứng chồng lớp hình ảnh, đặt
nền tảng cho các ứng dụng phức tạp hơn.
Các công cụ chỉnh sửa ảnh và video, đặc biệt trong việc tạo hiệu ứng mặt nạ hoặc làm đẹp.
Cơ sở cho các ứng dụng thực tế tăng cường (AR) như trong các nền tảng mạng xã hội
(Snapchat, Instagram).
Độ chính xác trong phát hiện các bộ phận trên khuôn mặt phụ thuộc nhiều vào chất lượng dữ
liệu đầu vào (góc quay, độ sáng, vật cản trên khuôn mặt).
Overlay mặt nạ đòi hỏi sự chính xác trong việc định vị các bộ phận khuôn mặt dựa trên
facial landmarks.
Haar Cascade, mặc dù nhanh và nhẹ, nhưng kém chính xác hơn so với các phương pháp hiện
đại dựa trên deep learning.
Độ tin cậy trong môi trường thực tế (điều kiện ánh sáng phức tạp, khuôn mặt bị che khuất) có
thể bị ảnh hưởng.
Đề tài này chỉ tập trung vào các kỹ thuật cơ bản và ứng dụng overlay đơn giản, chưa đi sâu
vào các ứng dụng cao cấp như nhận diện cảm xúc hoặc theo dõi chuyển động phức tạp.
Hạn chế trong việc áp dụng vào các ứng dụng bảo mật hoặc nhận diện hành vi phức tạp.
2. Cơ sở lý thuyết
2.1 Các khái niệm cơ bản
2.1.1 Định nghĩa và thuật ngữ chuyên ngành
Face Detection (Phát hiện khuôn mặt): Quá trình nhận diện và định vị khuôn mặt của một
người trong ảnh hoặc video.
Facial Landmarks (Điểm đặc trưng trên khuôn mặt): Các vị trí cụ thể trên khuôn mặt
(như mắt, mũi, miệng) được phát hiện và đánh dấu, giúp xác định cấu trúc và hình dạng của
khuôn mặt.
Mask Overlay (Chồng lớp mặt nạ): Kỹ thuật chèn thêm các hiệu ứng đồ họa (như kính, mặt
nạ, hoặc trang điểm) vào các bộ phận cụ thể trên khuôn mặt dựa vào vị trí facial landmarks.
Haar Cascade:
Kỹ thuật Overlay:
Dựa trên vị trí của facial landmarks để xác định các vùng cần chồng mặt nạ.
Sử dụng phép biến đổi hình học (như tịnh tiến, xoay, co giãn) để điều chỉnh lớp mặt nạ
phù hợp với kích thước và vị trí bộ phận.
Một phương pháp phát hiện khuôn mặt cổ điển dựa trên các đặc trưng Haar. Được huấn luyện
trên các mẫu khuôn mặt và hoạt động bằng cách quét cửa sổ qua từng phần của ảnh.
Nhược điểm: Kém chính xác với điều kiện ánh sáng hoặc góc nhìn không lý tưởng.
OpenCV cung cấp các công cụ cơ bản để xử lý ảnh như phát hiện cạnh, chuyển đổi màu sắc,
và phép biến đổi hình học, hỗ trợ cho cả phát hiện khuôn mặt và chồng lớp hình ảnh.
Haar Cascade:
Ưu điểm:
Nhược điểm:
Khó nhận diện được các landmarks cụ thể trên khuôn mặt.
Ưu điểm:
Chính xác và đáng tin cậy hơn trong điều kiện thực tế.
Nhược điểm:
Ưu điểm:
Hiệu quả cao với các bài toán phức tạp, nhận diện chính xác trong điều kiện ánh sáng và góc
nhìn không lý tưởng.
Nhược điểm:
Xử lý chuỗi và container STL: Được sử dụng để quản lý dữ liệu như đường dẫn file
ảnh, video.
Quản lý bộ nhớ an toàn: Thông qua smart pointers như std::unique_ptr hoặc std::shared_ptr.
Khả năng liên kết thư viện bên ngoài: Sử dụng các phương pháp liên kết tĩnh hoặc
động để tích hợp OpenCV với dự án.
Phiên bản: OpenCV 4.x.x( 4.10.0), bao gồm các module cần thiết như:
cv::CascadeClassifier: Để phát hiện khuôn mặt và các bộ phận (mắt, mũi, miệng).
cv::imshow, cv::waitKey: Hỗ trợ hiển thị ảnh và video với các kết quả đã được xử lý.
OpenCV là thư viện chính của dự án, được sử dụng từ bước phát hiện khuôn mặt đến overlay
mask.
CHƯƠNG 2: THIẾT KẾ VÀ CÀI ĐẶT
Input:
Output:
Ảnh hoặc video có các bộ phận khuôn mặt được phát hiện, bao gồm mắt, mũi, miệng, cằm.
Ảnh hoặc video đã được áp dụng hiệu ứng chồng lớp mặt nạ (mask overlay) chính xác vào
các bộ phận khuôn mặt.
Sử dụng mô hình Haar Cascade trong OpenCV để phát hiện vị trí khuôn mặt trong ảnh hoặc
video.
Xác định vị trí các bộ phận cụ thể trên khuôn mặt như mắt, mũi, miệng, bằng cách sử dụng
các tệp mô hình Haar Cascade (ví dụ: haarcascade_eye.xml, haarcascade_mcs_nose.xml…).
Sử dụng tọa độ các bộ phận khuôn mặt để chồng các hình ảnh hoặc hiệu ứng đồ họa (như
kính, mặt nạ) lên đúng vị trí khuôn mặt.
Ảnh hoặc video đầu vào cần có ít nhất một khuôn mặt xuất hiện rõ ràng, không bị che khuất
quá nhiều.
Hệ thống cần chạy trên máy tính có hỗ trợ webcam (nếu xử lý thời gian thực).
Hệ thống có thể bị ảnh hưởng bởi ánh sáng kém hoặc góc quay không thuận lợi.
Hệ thống phải có khả năng xử lý ảnh hoặc video thời gian thực với tốc độ tối thiểu 15 FPS
trên máy tính phổ thông.
Tối ưu hóa hiệu suất bằng cách sử dụng các hàm xử lý ảnh của OpenCV, đảm bảo không gây
chậm trễ lớn khi xử lý video.
Sử dụng mô hình Haar Cascade để phát hiện khuôn mặt và các bộ phận với độ chính xác cao.
Đảm bảo overlay mask khớp chính xác với các bộ phận của khuôn mặt, ngay cả khi khuôn
mặt di chuyển trong khung hình.
- Dễ dàng thêm các loại mặt nạ hoặc hiệu ứng mới, như kính, mũ, hoặc các lớp hóa trang
khác.
- Hỗ trợ nhận diện nhiều khuôn mặt cùng lúc trên cùng một khung hình.
- Hệ thống có thể hoạt động trên nhiều nền tảng (Windows, Linux) và tái sử dụng mã nguồn
khi cần tích hợp thêm tính năng.
2. Thiết kế hệ thống
2.1 Kiến trúc tổng thể
2.1.1 Sơ đồ khối hệ thống
Hệ thống được chia thành các khối chức năng chính, bao gồm:
Nhập dữ liệu:
Đầu vào từ ảnh (JPG, PNG) hoặc video (MP4, AVI) và nguồn video thời gian thực
(Webcam).
Sử dụng thuật toán Haar Cascade để phát hiện khuôn mặt và các bộ phận trên
khuôn mặt (mắt, mũi, miệng).
Định vị và đánh dấu chính xác vị trí các bộ phận bằng tọa độ.
Tạo và áp dụng hiệu ứng chồng lớp hình ảnh hoặc đồ họa lên khuôn mặt.
Xuất dữ liệu
Hiển thị hoặc lưu ảnh/video với hiệu ứng chồng lớp.
Mat: Dữ liệu hình ảnh từ OpenCV, được sử dụng trong mọi khâu xử lý (khung hình,
mặt nạ, ROI).
CascadeClassifier: Dùng để lưu trữ và thực thi các mô hình phát hiện đặc trưng Haar.
Rect: Xác định vùng phát hiện (ROI) trong khung hình.
vector<Rect>: Lưu trữ danh sách các vùng phát hiện.
Người dùng có thể chạy ứng dụng thông qua dòng lệnh:
Trong đó:
o mode: Lựa chọn kiểu phát hiện (face, nose, eye, ear, moustache).
o cascade_file_1: Đường dẫn file cascade đầu tiên (ví dụ: face cascade).
o cascade_file_2|mask_image: Đường dẫn file cascade thứ hai (nếu có) hoặc
hình ảnh mặt nạ.
Giao diện hiển thị thông qua cửa sổ OpenCV (Frame) với hình ảnh xử lý theo thời
gian thực. Người dùng có thể nhấn phím Esc để thoát.
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <iostream>
#include <stdexcept>
highgui/highgui.hpp: Dùng để hiển thị và xử lý cửa sổ đồ họa (ví dụ: hiển thị
webcam).
imgproc/imgproc.hpp: Hỗ trợ các phép toán xử lý ảnh như chuyển đổi màu, resize ảnh,
tạo mặt nạ...
objdetect/objdetect.hpp: Dùng để phát hiện đối tượng (như mặt, mũi, mắt) bằng cách
dùng các mô hình Haar Cascade.
class IFaceDetector {
public:
virtual void detectAndApplyMask(Mat& frame) = 0;
virtual ~IFaceDetector() = default;
};
IFaceDetector:
o Là lớp giao diện (interface) cho các bộ phát hiện như mặt, mũi, mắt, tai.
o Mỗi lớp cụ thể sẽ cần cài đặt phương thức detectAndApplyMask để thực hiện
chức năng tương ứng.
Lợi ích:
o Cho phép các thành phần trong chương trình (như lớp ứng dụng) sử dụng các
bộ phát hiện khác nhau mà không cần biết chi tiết bên trong.
public:
FaceDetector(const string& cascadePath, const string& maskPath, float scale = 0.75)
: scalingFactor(scale) {
loadCascade(cascadePath);
loadFaceMask(maskPath);
}
void detectAndApplyMask(Mat& frame) override {
Mat frameGray, frameROI, faceMaskSmall;
Mat grayMaskSmall, grayMaskSmallThresh, grayMaskSmallThreshInv;
Mat maskedFace, maskedFrame;
// Detect faces
vector<Rect> faces;
faceCascade.detectMultiScale(frameGray, faces, 1.1, 2, 0 | 2, Size(30, 30));
Giải thích:
1. Thuộc tính:
o faceCascade: Bộ phân loại Haar Cascade dùng để phát hiện mặt.
o faceMask: Ảnh mặt nạ sẽ chồng lên khuôn mặt.
o scalingFactor: Tỷ lệ thu nhỏ ảnh, giúp tăng tốc độ xử lý.
2. Hàm dựng:
o Gọi loadCascade để tải mô hình Haar Cascade từ tệp.
o Gọi loadFaceMask để tải ảnh mặt nạ.
class FaceMaskApplication {
private:
unique_ptr<IFaceDetector> detector;
VideoCapture cap;
public:
FaceMaskApplication(unique_ptr<IFaceDetector> detector) : detector(move(detector)) {
if (!cap.open(0)) {
throw runtime_error("Error opening webcam.");
}
namedWindow("Frame");
}
void run() {
Mat frame;
while (true) {
cap >> frame;
if (frame.empty()) {
cerr << "Error capturing frame. Exiting!" << endl;
break;
}
try {
detector->detectAndApplyMask(frame);
}
catch (const exception& e) {
cerr << e.what() << endl;
break;
}
imshow("Frame", frame);
if (waitKey(30) == 27) { // Exit on 'Esc'
break;
}
}
cap.release();
destroyAllWindows();
}
};
Giải thích:
1. Thuộc tính:
o detector: Bộ phát hiện (mặt, mắt, mũi...) được truyền từ lớp cha
IFaceDetector.
o cap: Đối tượng quay video từ webcam.
2. Hàm dựng:
o Mở webcam (cap.open(0)).
o Khởi tạo cửa sổ hiển thị (namedWindow).
3. Vòng lặp chính (run):
o Nhận khung hình: Đọc từng khung ảnh từ webcam.
o Áp dụng bộ phát hiện: Gọi detectAndApplyMask trên từng khung.
o Hiển thị: Hiển thị khung hình đã xử lý.
o Thoát chương trình: Nhấn phím Esc để thoát.
5. Phần mở rộng:
Kế thừa từ giao diện IFaceDetector, các lớp mở rộng như EyeDetector, NoseDetector, và
MoustacheDetector được xây dựng để phát hiện và chồng các mặt nạ đặc thù lên các bộ
phận như mắt, mũi, miệng.
Xây dựng lớp phát hiện bộ phận cụ thể, sử dụng các mô hình Haar Cascade tương ứng.
Chồng mặt nạ lên vùng phát hiện với các điều chỉnh cần thiết.
Lớp EyeDetector sử dụng mô hình Haar Cascade để phát hiện mắt và chồng ảnh mặt nạ (ví
dụ: kính mắt). Lớp này kế thừa từ IFaceDetector.
public:
EyeDetector(const string& cascadePath, const string& maskPath, float scale = 0.75)
: scalingFactor(scale) {
loadCascade(cascadePath);
loadEyeMask(maskPath);
}
vector<Rect> eyes;
eyeCascade.detectMultiScale(frameGray, eyes, 1.1, 2, 0 | 2, Size(30, 30));
Nhiệm vụ: Phát hiện mũi và chồng mặt nạ (ví dụ: mũi hề).
public:
NoseDetector(const string& cascadePath, const string& maskPath) {
if (!noseCascade.load(cascadePath)) {
throw runtime_error("Error loading nose cascade file.");
}
noseMask = imread(maskPath);
if (!noseMask.data) {
throw runtime_error("Error loading nose mask image.");
}
}
vector<Rect> noses;
noseCascade.detectMultiScale(frameGray, noses, 1.1, 3, 0 | 2, Size(30, 30));
public:
MoustacheDetector(const string& faceCascadePath, const string& mouthCascadePath, const
string& maskPath, float scale = 0.75)
: scalingFactor(scale) {
loadCascade(faceCascadePath, faceCascade);
loadCascade(mouthCascadePath, mouthCascade);
loadMask(maskPath, moustacheMask);
}
// Convert to grayscale
cvtColor(frame, frameGray, COLOR_BGR2GRAY);
// Detect faces
faceCascade.detectMultiScale(frameGray, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE,
Size(30, 30));
Sử dụng mô hình Haar Cascade phát hiện tai (có thể sử dụng mô hình Haar Cascade như
haarcascade_mcs_rightear.xml và haarcascade_mcs_leftear.xml cho tai bên phải và
bên trái).
public:
EarDetector(const string& leftEarCascadePath, const string& rightEarCascadePath, const
string& maskPath) {
if (!leftEarCascade.load(leftEarCascadePath)) {
throw runtime_error("Error loading left ear cascade file.");
}
if (!rightEarCascade.load(rightEarCascadePath)) {
throw runtime_error("Error loading right ear cascade file.");
}
earMask = imread(maskPath);
if (!earMask.data) {
throw runtime_error("Error loading ear mask image.");
}
}
6. Main function:
Chọn chế độ hoạt động (phát hiện khuôn mặt, mắt, mũi, râu).
Khởi tạo lớp phát hiện tương ứng với chế độ.
Chạy ứng dụng phát hiện và chồng mặt nạ.
// Main function
try {
unique_ptr<IFaceDetector> detector;
if (mode == "face") {
detector = make_unique<FaceDetector>(argv[2], argv[3]);
}
else if (mode == "nose") {
if (argc < 5) {
cerr << "Usage for nose mode: " << argv[0] << " nose <face_cascade>
<nose_cascade> <mask_image>" << endl;
return -1;
}
detector = make_unique<NoseDetector>(argv[2], argv[3], argv[4]);
}
else if (mode == "eye") {
if (argc < 5) {
cerr << "Usage for eye mode: " << argv[0] << " eye <face_cascade>
<eye_cascade> <mask_image>" << endl;
return -1;
}
detector = make_unique<EyeDetector>(argv[2], argv[3], argv[4]);
}
else if (mode == "ear") {
detector = make_unique<EarDetector>(argv[2], argv[3]);
}
else if (mode == "moustache") {
if (argc < 5) {
cerr << "Usage for moustache mode: " << argv[0] << " moustache
<face_cascade> <mouth_cascade> <mask_image>" << endl;
return -1;
}
detector = make_unique<MoustacheDetector>(argv[2], argv[3], argv[4]);
}
else {
cerr << "Invalid mode: " << mode << endl;
return -1;
}
FaceMaskApplication app(move(detector));
app.run();
}
catch (const exception& e) {
cerr << "Error: " << e.what() << endl;
return -1;
}
return 0;
}
1. Người dùng sẽ chọn chế độ phát hiện qua tham số dòng lệnh, chẳng hạn như "face",
"eye", "nose", "moustache", hoặc "ear".
2. Người dùng cũng cần cung cấp đường dẫn đến file cascade và mặt nạ (mask) cho chế độ
đó.
Dựa vào chế độ (mode) người dùng chọn, hàm main sẽ khởi tạo một đối tượng của lớp tương
ứng (FaceDetector, EyeDetector, NoseDetector, MoustacheDetector, hoặc
EarDetector).
Sau khi khởi tạo lớp phát hiện, đối tượng đó sẽ được truyền vào một lớp
FaceMaskApplication, và phương thức run sẽ được gọi để thực hiện phát hiện và chồng mặt
nạ lên các khu vực cần thiết trên ảnh hoặc video.
Chạy lệnh
Mô tả: Phát hiện khuôn mặt và phủ lớp mặt nạ lên toàn bộ khuôn mặt.
Kết quả: Hệ thống có thể phát hiện và phủ lớp mặt nạ chính xác trên các khuôn mặt trong
các ảnh có điều kiện ánh sáng khác nhau.
2. Mũi
Chạy lệnh
Mô tả: Phát hiện mũi và phủ lớp mask lên mũi.
Kết quả: Lớp mặt nạ được phủ lên mũi chính xác, ngay cả trong các điều kiện không gian
có ánh sáng yếu hoặc góc nhìn khác biệt.
3. Tai
Chạy lệnh
Mô tả: Phát hiện tai và phủ lớp mask lên tai.
Kết quả: Hệ thống phát hiện tai trong ảnh có độ chính xác cao, mặc dù trong một số
trường hợp với góc nhìn nghiêng hoặc ảnh có độ sáng thấp, việc phát hiện có thể bị hạn chế.
4. Miệng
Chạy lệnh
Cải thiện độ chính xác của việc phát hiện các bộ phận khuôn mặt:
Sử dụng Deep Learning: Thay vì chỉ sử dụng các cascade classifier, có thể cải thiện
độ chính xác và khả năng nhận diện với các mô hình deep learning như YOLO (You
Only Look Once) hoặc MTCNN (Multi-task Cascaded Convolutional Networks) cho
việc phát hiện khuôn mặt và các bộ phận như mắt, mũi, và miệng.
Huấn luyện lại các cascade classifier: Thử huấn luyện lại các cascade classifier với
bộ dữ liệu đa dạng hơn để hệ thống nhận diện tốt hơn trong các điều kiện thực tế, đặc
biệt là trong các ảnh có chất lượng thấp hoặc với các góc nhìn khác nhau.
Phát triển một hệ thống tự động phát hiện khuôn mặt trong video:
Thay vì chỉ xử lý một hình ảnh tĩnh, hệ thống có thể được mở rộng để phát hiện và
phủ lớp mask trong các video trực tiếp, tạo nên một ứng dụng thú vị và thực tiễn hơn.
Phát triển tính năng phát hiện và áp dụng mask theo thời gian thực (real-time).
Mở rộng khả năng phát hiện và xử lý nhiều khuôn mặt trong một hình ảnh, giúp hệ thống có
thể hoạt động trong các môi trường với nhiều người (ví dụ: các sự kiện, hội nghị video, v.v.).
3.2.2 Mở rộng chức năng
Thêm tính năng nhận diện các bộ phận khuôn mặt khác:
Hệ thống có thể được mở rộng để nhận diện và phủ lớp mask lên các bộ phận khác như
miệng, lông mày, hoặc thậm chí là các đặc điểm nhận diện đặc biệt (ví dụ: nhận diện cảm xúc
khuôn mặt).
Mở rộng hệ thống để hỗ trợ nhiều loại mask khác nhau cho từng bộ phận khuôn mặt, chẳng
hạn như mặt nạ Halloween, mặt nạ động vật, hay các loại trang phục khác.
Thêm khả năng tùy chỉnh kích thước và vị trí của mask:
Cho phép người dùng tùy chỉnh kích thước, vị trí và thậm chí là hiệu ứng chuyển động của
mask trên khuôn mặt, giúp hệ thống linh hoạt hơn và dễ sử dụng.
Để hệ thống hoạt động hiệu quả hơn, đặc biệt trong môi trường thời gian thực (real-
time), có thể tối ưu hóa mã nguồn, sử dụng các thư viện hoặc thuật toán mạnh mẽ hơn
cho việc xử lý ảnh như OpenCV DNN module hoặc TensorFlow Lite cho các mô hình
học sâu.
Giảm thời gian xử lý cho từng frame trong video bằng cách áp dụng các kỹ thuật tối
ưu hóa như multi-threading hoặc GPU acceleration.
Khi làm việc với các ảnh/video có độ phân giải cao, việc tối ưu hóa bộ nhớ và các phép toán
xử lý ảnh là rất quan trọng. Có thể sử dụng các thư viện như cv::UMat trong OpenCV để xử lý
ảnh với hiệu suất cao hơn và tiết kiệm bộ nhớ.
Khi làm việc với video hoặc hình ảnh có kích thước lớn, sử dụng các kỹ thuật nén ảnh thông
minh như JPEG 2000 hoặc WebP để giảm dung lượng và tăng tốc độ xử lý mà không làm
giảm chất lượng ảnh quá nhiều.
KẾT LUẬN
Trong đề tài "Phát hiện các bộ phận khuôn mặt và phủ mặt nạ dựa trên OpenCV", em đã xây
dựng một hệ thống có khả năng phát hiện và nhận diện các bộ phận khuôn mặt như mắt, mũi,
tai, miệng, và toàn bộ khuôn mặt, sau đó phủ lớp mặt nạ tương ứng lên các bộ phận này. Hệ
thống được triển khai với các công cụ và thư viện hiện đại như OpenCV và ứng dụng các kỹ
thuật xử lý ảnh tiên tiến như cascade classifier. Qua các thử nghiệm, kết quả cho thấy hệ
thống hoạt động chính xác và ổn định trong nhiều điều kiện môi trường khác nhau, từ ánh
sáng mạnh, ánh sáng yếu đến các góc nhìn phức tạp.
Bên cạnh những thành công đạt được, hệ thống vẫn tồn tại một số hạn chế, như hiệu suất
giảm khi xử lý các ảnh hoặc video có độ phân giải cao hoặc trong điều kiện ánh sáng cực kỳ
yếu. Điều này mở ra các hướng phát triển tiềm năng trong tương lai, bao gồm việc ứng dụng
các mô hình học sâu để tăng độ chính xác, tối ưu hóa hiệu năng để hỗ trợ thời gian thực, và
mở rộng khả năng xử lý trên video trực tiếp hoặc nhận diện nhiều khuôn mặt cùng lúc.
Nhìn chung, đề tài này không chỉ đáp ứng được các mục tiêu đặt ra mà còn cung cấp một nền
tảng vững chắc để phát triển các ứng dụng thực tiễn khác, như tạo hiệu ứng trên khuôn mặt,
hỗ trợ công nghệ thực tế tăng cường (AR), hoặc các hệ thống giám sát thông minh. Hệ thống
này là một ví dụ điển hình cho việc ứng dụng các kỹ thuật xử lý ảnh và trí tuệ nhân tạo trong
việc giải quyết các bài toán liên quan đến nhận diện khuôn mặt và cá nhân hóa hình ảnh.
--------------------------------------------------------
TÀI LIỆU THAM KHẢO
[1] Millan Escriva, D., Mendonca, V. G., & Joshi, P. (2018). Learn OpenCV 4 by Building
Projects - Second Edition. Packt Publishing.
MÃ NGUỒN: