









Preview text:
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT VÀ CÔNG NGHỆ
Dự án khóa cửa thông minh kết hợp nhận diện khuôn mặt và chống
giả mạo bằng nháy mắt dựa trên sự tích hợp của nhiều thành phần
công nghệ khác nhau, từ vi điều khiển IoT, nền tảng điều khiển từ
xa, đến các thuật toán xử lý ảnh và mô hình học máy cho nhận diện
khuôn mặt và kiểm tra “tính sống” (liveness). Phần này trình bày cơ
sở lý thuyết và công nghệ chính được sử dụng trong hệ thống, bao
gồm: nền tảng IoT với vi điều khiển ESP32 và ứng dụng Blynk;
nguyên lý điều khiển khóa điện, keypad và các phần tử chấp hành;
các thuật toán phát hiện và nhận diện khuôn mặt sử dụng OpenCV
(Haar Cascade và LBPH); cơ chế phát hiện nháy mắt dựa trên
Mediapipe Face Mesh và chỉ số Eye Aspect Ratio (EAR); cùng với cơ
chế giao tiếp nối tiếp giữa máy tính và ESP32 để gắn kết khối xử lý
AI với khối điều khiển phần cứng.
2.1. Nền tảng IoT và vi điều khiển ESP32 trong hệ thống khóa cửa
ESP32 là một vi điều khiển tích hợp Wi-Fi và Bluetooth, có năng lực
xử lý tương đối mạnh, nhiều chân I/O, phù hợp cho các ứng dụng IoT
cần vừa kết nối mạng vừa điều khiển phần cứng. Trong dự án này,
ESP32 đóng vai trò “bộ não” của phần cứng, chịu trách nhiệm đọc
tín hiệu từ các thiết bị nhập (keypad, nút nhấn, kênh serial từ máy
tính), điều khiển các thiết bị xuất (relay khóa cửa, buzzer, LED),
đồng thời duy trì kết nối với nền tảng Blynk để cho phép điều khiển
và giám sát từ xa thông qua Internet. Về mặt lý thuyết, ESP32 được
lập trình theo mô hình vòng lặp chính (loop) liên tục đọc trạng thái
cảm biến, xử lý logic điều khiển, và cập nhật trạng thái hệ thống.
Các hàm callback của Blynk (ví dụ BLYNK_WRITE cho từng chân ảo)
cho phép nhận lệnh điều khiển từ ứng dụng di động và thực thi ngay
lập tức trên thiết bị, tạo thành một kiến trúc IoT real-time đơn giản nhưng hiệu quả.
Trong thiết kế khóa cửa, ESP32 điều khiển relay nối với khóa điện, sử
dụng logic ON/OFF để mở hoặc khóa cửa. Buzzer được sử dụng như
một phần tử cảnh báo âm thanh, phát tiếng beep báo hiệu các trạng
thái như nhập đúng mật khẩu, nhập sai nhiều lần, hoặc cửa đang
được mở bằng FaceID từ máy tính. LED hoặc màn hình hiển thị đóng
vai trò cung cấp phản hồi trực quan cho người dùng tại chỗ, giúp dễ
dàng nhận biết trạng thái hiện tại của hệ thống. Keypad ma trận
được đọc thông qua các chân số của ESP32, với thuật toán quét
hàng–cột để xác định phím được nhấn, từ đó xây dựng chuỗi mật
khẩu do người dùng nhập. Các thành phần này kết hợp với nhau
theo một state machine đơn giản: chờ nhập mật khẩu hoặc tín hiệu
mở cửa, kiểm tra điều kiện an toàn, nếu hợp lệ thì kích hoạt relay
mở cửa trong một khoảng thời gian định trước, sau đó tự động khóa lại.
2.2. Nền tảng Blynk và điều khiển từ xa qua Internet
Blynk là một nền tảng IoT cho phép kết nối thiết bị phần cứng (như
ESP32) với ứng dụng di động hoặc web thông qua các “chân ảo”
(virtual pins). Trong dự án này, Blynk được sử dụng để cung cấp giao
diện điều khiển từ xa cho khóa cửa, giúp người dùng có thể mở hoặc
khóa cửa, xem trạng thái hệ thống, và kích hoạt một số chức năng
đặc biệt (như yêu cầu đăng ký khuôn mặt mới) từ điện thoại thông
minh. Về mặt nguyên lý, ESP32 kết nối đến máy chủ Blynk bằng
cách sử dụng token xác thực (auth token) được cấp cho mỗi dự án,
thông qua kết nối Wi-Fi. Khi người dùng thao tác trên giao diện Blynk
(ví dụ nhấn một nút ảo gán với chân V4), tín hiệu này được chuyển
từ app lên server Blynk, rồi từ server về ESP32 thông qua các
callback BLYNK_WRITE trong chương trình.
Một điểm đáng chú ý trong dự án là việc sử dụng Blynk không chỉ để
điều khiển relay mở khóa, mà còn làm “kênh điều khiển logic” cho
khối xử lý AI trên máy tính. Cụ thể, khi người dùng nhấn nút yêu cầu
đăng ký khuôn mặt mới, ESP32 nhận tín hiệu từ Blynk và ngay lập
tức gửi chuỗi lệnh “CMD_REGISTER_FACE” qua cổng serial tới máy
tính. Nhờ đó, Blynk gián tiếp trở thành giao diện để khởi động các
quy trình phức tạp bên phía xử lý hình ảnh (thu dataset, huấn luyện
lại mô hình nhận diện), dù bản thân Blynk không chạy các thuật
toán AI nào. Điều này thể hiện cách kết hợp linh hoạt giữa một nền
tảng IoT “nhẹ” và một hệ thống xử lý chuyên sâu chạy trên máy
tính, giúp hệ thống tổng thể vẫn giữ được độ đơn giản trong phần
cứng nhưng lại tận dụng được sức mạnh xử lý của máy tính cá nhân.
2.3. Xử lý ảnh và nhận diện khuôn mặt với OpenCV, Haar
Cascade và LBPH
Nhận diện khuôn mặt là một trong những thành phần cốt lõi của hệ
thống. Dự án sử dụng thư viện OpenCV để thực hiện hai nhiệm vụ
chính: phát hiện (detect) khuôn mặt trong khung hình và nhận diện
(recognize) người dùng dựa vào khuôn mặt đó. Với bài toán phát
hiện, hệ thống sử dụng bộ phân loại Haar Cascade – một kỹ thuật
kinh điển dựa trên đặc trưng Haar và bộ phân loại tăng cường
(boosting). Haar Cascade hoạt động bằng cách sử dụng một tập hợp
các “weak classifiers” dựa trên các mẫu hình sáng–tối (Haar-like
features) trên ảnh grayscale, được tổ chức thành các tầng (cascade).
Khi một vùng ảnh đi qua chuỗi các tầng, nếu không đạt ngưỡng ở
bất kỳ tầng nào sẽ bị loại sớm, nhờ đó thuật toán có thể quét nhanh
toàn bộ khung hình để tìm ra các vùng có khả năng là khuôn mặt.
Dù hiện nay đã có nhiều phương pháp phát hiện hiện đại hơn (HOG
+ SVM, DNN, YOLO, v.v.), Haar Cascade vẫn là lựa chọn phù hợp
trong các hệ thống demo và chạy real-time trên thiết bị có tài
nguyên giới hạn nhờ tốc độ nhanh và triển khai đơn giản.
Với bài toán nhận diện, dự án sử dụng bộ nhận diện LBPH (Local
Binary Patterns Histograms) được OpenCV cung cấp. LBPH dựa trên
đặc trưng Local Binary Pattern – một phép mã hóa kết cấu cục bộ
của ảnh bằng cách so sánh giá trị mỗi điểm ảnh với các điểm lân
cận, từ đó tạo ra chuỗi bit mô tả pattern sáng–tối quanh điểm đó.
Sau khi tính LBP cho toàn bộ ảnh mặt, ảnh được chia thành các ô
nhỏ (cells) và histograms của giá trị LBP trong từng ô được tính toán,
sau đó nối lại thành một vector đặc trưng tổng thể. Trong quá trình
huấn luyện, LBPHFaceRecognizer của OpenCV học cách liên kết các
vector đặc trưng này với các ID người dùng, còn trong giai đoạn
nhận diện, mô hình so sánh vector của khuôn mặt mới với các vector
đã lưu trữ và trả về ID có khoảng cách nhỏ nhất kèm theo một thang
đo “độ tin cậy” (thường được biểu diễn bằng giá trị confidence –
càng thấp càng tốt). Ưu điểm của LBPH là tương đối đơn giản, hoạt
động tốt với ảnh grayscale, chịu được một mức biến thiên nhất định
về ánh sáng và biểu cảm, đồng thời có thể huấn luyện và cập nhật
lại mô hình nhanh chóng khi thêm người dùng mới.
Trong dự án, pipeline xử lý ảnh được tổ chức thành ba script chính:
script thu thập dữ liệu khuôn mặt từ webcam, lưu thành các file ảnh
với quy ước tên chứa ID người dùng; script huấn luyện mô hình LBPH
từ thư mục dataset, xuất file trainer.yml để sử dụng lại; và script
nhận diện thời gian thực, đọc file trainer.yml, thực hiện detect–
recognize trên từng khung hình camera. Việc lưu dữ liệu theo chuẩn
“User.id.count” giúp dễ dàng trích xuất ID từ tên file, phục vụ cho
hàm getImagesAndLabels gom dữ liệu huấn luyện. Đồng thời, cách
tổ chức này cho phép hệ thống có khả năng “tự học” thêm khi đăng
ký người dùng mới mà không cần thay đổi cấu trúc dữ liệu phức tạp.
2.4. Phát hiện nháy mắt và kiểm tra liveness bằng Mediapipe
Face Mesh và chỉ số EAR
Một điểm nâng cao quan trọng trong hệ thống là việc sử dụng cơ chế
kiểm tra “tính sống” (liveness detection) dựa trên hành vi nháy mắt.
Liveness detection nhằm phân biệt giữa khuôn mặt thật và các hình
thức giả mạo như ảnh in, video quay sẵn hoặc mặt nạ, tránh việc hệ
thống bị đánh lừa chỉ bằng một bức ảnh. Trong dự án, liveness được
hiện thực hóa bằng cách sử dụng Mediapipe Face Mesh để xác định
các điểm mốc (landmarks) quanh mắt và tính toán chỉ số Eye Aspect
Ratio (EAR) theo thời gian. Mediapipe Face Mesh là một mô hình học
sâu được tối ưu hóa, có khả năng dự đoán hàng trăm điểm mốc trên
khuôn mặt từ một khung hình RGB, bao gồm chi tiết vùng mắt, mũi,
môi, hàm, v.v. Dựa trên các điểm mốc quanh mắt, ta có thể xác định
các khoảng cách dọc và ngang của mắt để tính EAR.
Về mặt lý thuyết, EAR được tính bằng tỷ lệ giữa trung bình các
khoảng cách dọc và khoảng cách ngang của mắt. Khi mắt mở,
khoảng cách dọc tương đối lớn so với khoảng cách ngang, nên EAR
có giá trị cao; khi mắt nhắm, khoảng cách dọc giảm đáng kể, dẫn
đến EAR giảm xuống dưới một ngưỡng nhất định. Bằng cách theo dõi
EAR theo thời gian, hệ thống có thể phát hiện các lần nháy mắt khi
EAR giảm xuống dưới ngưỡng đóng mắt (BLINK_EAR_THRESH) và sau
đó tăng trở lại trên ngưỡng mở mắt (BLINK_RECOVER_EAR). Thông
tin về thời điểm nháy mắt được lưu vào một hàng đợi theo thời gian
(deque), và trong một cửa sổ thời gian xác định (ví dụ 4 giây), nếu
số lần nháy mắt vượt qua một ngưỡng tối thiểu (ví dụ từ 2–3 lần), hệ
thống coi đó là bằng chứng cho thấy trước camera là khuôn mặt
sống chứ không phải ảnh tĩnh.
Trong dự án, liveness không chỉ dựa vào một lần nháy đơn lẻ mà dựa
trên pattern nháy mắt trong một khoảng thời gian, giúp giảm khả
năng “vượt rào” bằng những thủ thuật đơn giản. Đồng thời, mã
nguồn còn dự trù việc kiểm tra thêm sự thay đổi vị trí và kích thước
khuôn mặt giữa các khung hình (thông qua tâm và diện tích
bounding box) để nhận biết xem khuôn mặt có đang chuyển động tự
nhiên hay không. Mặc dù cơ chế này chưa phải là một hệ thống
liveness đầy đủ như các giải pháp thương mại cao cấp (sử dụng
camera hồng ngoại, cảm biến chiều sâu, phân tích texture), nhưng
nó đã minh họa được rõ ràng nguyên lý kết hợp giữa đặc trưng hình
học (EAR), động học (nháy mắt theo thời gian) và mô hình nhận diện
khuôn mặt để chống giả mạo ở mức cơ bản.
2.5. Giao tiếp nối tiếp giữa máy tính và ESP32
Để kết nối khối xử lý AI trên máy tính với khối điều khiển phần cứng
ESP32, dự án sử dụng giao tiếp nối tiếp (serial communication) qua
cổng COM. Về mặt lý thuyết, giao tiếp serial là phương thức truyền
dữ liệu từng byte một theo chuỗi, với các tham số cấu hình như tốc
độ baud (baud rate), số bit dữ liệu, bit kiểm tra chẵn lẻ (parity) và bit
stop. Trong dự án, cả Python và ESP32 được cấu hình cùng tốc độ
baud (ví dụ 115200), không sử dụng parity, nhằm đảm bảo hai bên
có thể hiểu đúng dữ liệu gửi–nhận. Trên phía Python, thư viện
pySerial được dùng để mở cổng serial, cấu hình timeout không chặn
(timeout=0) để việc đọc dữ liệu không làm dừng luồng xử lý camera,
và gửi các chuỗi lệnh dạng text (ví dụ “OPEN_DOOR\n”) về ESP32 khi
cần mở cửa. Ngược lại, ESP32 sử dụng các hàm Serial.println để gửi
lệnh “CMD_REGISTER_FACE” lên máy tính mỗi khi nhận được yêu cầu
đăng ký khuôn mặt mới từ ứng dụng Blynk.
Cơ chế giao tiếp này được tổ chức theo kiểu giao thức đơn giản dựa
trên chuỗi lệnh, trong đó mỗi lệnh là một dòng text có ý nghĩa rõ
ràng, không cần cấu trúc phức tạp. Ví dụ, khi Python nhận được
chuỗi chứa “CMD_REGISTER_FACE”, chương trình sẽ chuyển sang
chế độ thu thập dữ liệu khuôn mặt; khi ESP32 nhận được chuỗi
“OPEN_DOOR”, thiết bị sẽ kích hoạt relay mở khóa. Việc sử dụng
giao tiếp serial giúp tách biệt rõ ràng hai khối: khối AI/vision chạy
trên máy tính và khối điều khiển/IoT trên ESP32, đồng thời tạo điều
kiện để trong tương lai có thể thay thế một trong hai khối mà không
ảnh hưởng quá nhiều đến bên còn lại, miễn là vẫn tuân thủ giao
thức chuỗi lệnh đã thống nhất.
2.6. Kiến trúc phần mềm và mô hình xử lý trong dự án
Về tổng thể, kiến trúc phần mềm của dự án được chia thành hai
phần chính: phần firmware chạy trên ESP32 và phần mềm chạy trên
máy tính sử dụng Python. Phần firmware được viết bằng C/C++ theo
khuôn mẫu của Arduino/ESP32, chia nhỏ thành các hàm xử lý
keypad, điều khiển relay, buzzer, cập nhật Blynk và đọc/ghi serial.
Phần Python được chia thành các script theo chức năng: script thu
thập dữ liệu khuôn mặt từ webcam, script huấn luyện mô hình LBPH,
script nhận diện khuôn mặt kết hợp liveness và giao tiếp serial,
script hỗ trợ đăng ký người dùng mới và script kiểm tra giao tiếp
serial. Cách tổ chức này giúp tách biệt rõ ràng các bước trong
pipeline xử lý: thu dữ liệu → huấn luyện → triển khai nhận diện thời
gian thực → tích hợp với phần cứng, đồng thời tạo điều kiện để sửa
đổi, thay thế hoặc nâng cấp từng khối mà không làm ảnh hưởng toàn bộ hệ thống.
Về mô hình xử lý, hệ thống hoạt động theo chu trình liên tục:
camera cung cấp khung hình → OpenCV và Haar Cascade phát hiện
khuôn mặt → LBPH nhận diện và đưa ra ID cùng độ tin cậy →
Mediapipe Face Mesh tính EAR và phát hiện nháy mắt → nếu cả điều
kiện nhận diện (ID hợp lệ, confidence dưới ngưỡng) và liveness
(nháy mắt đủ số lần trong thời gian quy định) đều thỏa, Python gửi
lệnh OPEN_DOOR đến ESP32 → ESP32 mở khóa, kích hoạt buzzer,
cập nhật trạng thái lên Blynk. Khi người dùng muốn đăng ký khuôn
mặt mới, luồng xử lý được kích hoạt ngược lại từ phía Blynk → ESP32
→ Python, cho phép hệ thống tự động bổ sung dữ liệu và huấn luyện
lại mô hình nhận diện mà không cần can thiệp sâu vào code. Toàn
bộ kiến trúc này thể hiện rõ ràng sự kết hợp giữa cơ sở lý thuyết về
xử lý ảnh, nhận diện khuôn mặt, kiểm tra liveness và các công nghệ
IoT hiện đại, tạo thành nền tảng cho một hệ thống khóa cửa thông
minh có tính linh hoạt và tiềm năng phát triển trong tương lai.
Chương 5 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Kết luận
Đề tài “Khóa cửa thông minh sử dụng ESP32 kết hợp nhận diện
khuôn mặt và chống giả mạo bằng nháy mắt” đã xây dựng thành
công một hệ thống mẫu tích hợp tương đối đầy đủ giữa phần cứng
IoT và xử lý hình ảnh nâng cao trên máy tính. Về phía phần cứng, vi
điều khiển ESP32 đảm nhiệm vai trò trung tâm điều khiển khóa điện
(relay), buzzer cảnh báo, hiển thị trạng thái và giao tiếp với người
dùng thông qua keypad và nền tảng Blynk. Nhờ vậy, hệ thống có thể
cho phép mở cửa bằng mật khẩu truyền thống, điều khiển từ xa qua
Internet, đồng thời ghi nhận và phản hồi trạng thái khóa một cách
trực quan. Về phía phần mềm trên máy tính, đề tài sử dụng OpenCV
với bộ nhận diện LBPH để nhận diện khuôn mặt dựa trên tập dữ liệu
được thu thập từ người dùng, kết hợp Mediapipe Face Mesh để xác
định các điểm mốc quanh mắt và tính toán chỉ số Eye Aspect Ratio
(EAR), từ đó phát hiện hành vi nháy mắt làm tiêu chí kiểm tra “tính
sống” (liveness) của đối tượng trước camera.
Một điểm đáng chú ý của hệ thống là luồng giao tiếp hai chiều giữa
máy tính và ESP32 thông qua cổng serial được thiết kế rõ ràng và
đơn giản nhưng hiệu quả. Ở chiều từ ESP32 lên máy tính, khi người
dùng nhấn nút trên ứng dụng Blynk yêu cầu đăng ký khuôn mặt mới,
ESP32 gửi lệnh “CMD_REGISTER_FACE” đến máy tính để kích hoạt
chế độ thu thập dữ liệu trên chương trình Python. Ở chiều ngược lại,
khi thuật toán nhận diện khuôn mặt xác định được người dùng hợp
lệ với độ tin cậy đủ cao và qua được bước kiểm tra liveness bằng
nháy mắt trong khoảng thời gian quy định, chương trình Python gửi
lệnh “OPEN_DOOR” trở lại ESP32, từ đó kích hoạt relay để mở khóa.
Cơ chế này cho thấy cách kết hợp thực tế giữa xử lý AI/vision chạy
trên máy tính và một thiết bị IoT giá rẻ nhưng linh hoạt như ESP32.
Bên cạnh đó, đề tài còn hiện thực hóa được một pipeline tương đối
hoàn chỉnh cho bài toán nhận diện khuôn mặt trong bối cảnh ứng
dụng thực tế: từ script thu thập dữ liệu (dataset) của từng người
dùng qua webcam, đặt tên file theo quy ước “User.id.count” để dễ
dàng gán nhãn; đến script huấn luyện mô hình LBPH và xuất file
“trainer.yml” chứa các tham số đã học; và cuối cùng là script nhận
diện thời gian thực kết hợp liveness, có khả năng vừa nhận diện, vừa
tự động cập nhật và huấn luyện lại mô hình khi đăng ký người dùng
mới ngay trong quá trình vận hành. Toàn bộ quy trình này giúp hệ
thống không chỉ dừng lại ở mức minh họa về mặt lý thuyết mà còn
có tính ứng dụng thực tiễn, dễ mở rộng nếu triển khai trong môi
trường gia đình hoặc phòng làm việc nhỏ. Hạn chế
Mặc dù hệ thống đã thể hiện được tính khả thi và nhiều ưu điểm, đề
tài vẫn tồn tại một số hạn chế nhất định về mặt kỹ thuật, vận hành
và độ an toàn, cần được nhìn nhận thẳng thắn nếu muốn đưa vào
ứng dụng thực tế ở quy mô lớn hơn. Trước hết, thuật toán nhận diện
khuôn mặt sử dụng LBPH kết hợp Haar Cascade là giải pháp kinh
điển, nhẹ, dễ triển khai, nhưng độ chính xác và khả năng kháng
nhiễu của nó bị giới hạn trong các điều kiện ánh sáng, góc mặt và
khoảng cách nhất định. Khi người dùng nghiêng mặt nhiều, đứng
quá xa, hoặc môi trường ánh sáng quá tối/quá gắt, việc phát hiện và
nhận diện khuôn mặt có thể không ổn định, dẫn đến tỉ lệ nhận sai
hoặc không nhận được (false negative) tăng lên, gây khó chịu cho
người sử dụng. Bên cạnh đó, tập dữ liệu dùng để huấn luyện còn
tương đối nhỏ, chủ yếu gồm ảnh từ một vài người dùng và được
chụp trong bối cảnh phòng thí nghiệm, nên mô hình chưa được kiểm
chứng với đa dạng khuôn mặt, màu da, điều kiện môi trường khác nhau.
Một hạn chế quan trọng khác là hệ thống hiện tại phụ thuộc khá
nhiều vào máy tính cá nhân (PC/laptop) để chạy phần mềm Python,
sử dụng OpenCV và Mediapipe. Điều này đồng nghĩa với việc nếu
máy tính không hoạt động, bị tắt nguồn, mất kết nối serial hoặc gặp
lỗi phần mềm, thì chức năng mở cửa bằng nhận diện khuôn mặt và
liveness sẽ không hoạt động, chỉ còn lại các phương thức như mật
khẩu hoặc điều khiển Blynk. Trong bối cảnh một hệ thống khóa cửa
thông minh thực tế, yêu cầu “always on” và độ tin cậy cao là rất
quan trọng, do đó việc phải duy trì một máy tính hoạt động liên tục
là một điểm trừ về mặt chi phí, độ tiện dụng và độ bền vận hành lâu dài.
Về mặt bảo mật, mặc dù đề tài đã bổ sung lớp chống giả mạo bằng
việc kiểm tra nháy mắt thông qua chỉ số EAR và số lần nháy trong
một khoảng thời gian, nhưng cơ chế này vẫn là một hình thức
liveness tương đối cơ bản. Người tấn công có thể sử dụng các đoạn
video quay sẵn khuôn mặt người dùng thực đang nháy mắt, trình
chiếu trên màn hình hoặc thiết bị khác để lừa hệ thống, đặc biệt nếu
thuật toán không kiểm tra thêm các đặc trưng về chiều sâu, phản xạ
ánh sáng, hoặc chuyển động tự nhiên của đầu và khuôn mặt theo
thời gian. Bên cạnh đó, kênh giao tiếp serial giữa Python và ESP32
trong mô hình demo hiện chưa áp dụng cơ chế mã hóa hoặc xác
thực (authentication), do đó về mặt lý thuyết nếu có thiết bị khác
cắm vào cổng serial hoặc can thiệp đường truyền, kẻ tấn công có
thể giả mạo lệnh “OPEN_DOOR” mà không cần thật sự qua bước nhận diện.
Ngoài ra, kiến trúc phần mềm của hệ thống, dù đã được chia nhỏ
thành các file thực hiện chức năng cụ thể (thu thập dữ liệu, huấn
luyện, nhận diện, đăng ký người dùng mới, test serial), vẫn chưa
được tổ chức theo mô hình hướng đối tượng hoặc có lớp trừu tượng
rõ ràng giữa các thành phần như module giao tiếp serial, module
nhận diện khuôn mặt, module liveness, và module quản lý người
dùng. Điều này khiến việc bảo trì, mở rộng và tái sử dụng code trong
tương lai có thể gặp khó khăn hơn, đặc biệt khi muốn tích hợp nhiều
phương thức xác thực khác (ví dụ thẻ RFID, OTP, vân tay) hoặc muốn
triển khai trên các nền tảng phần cứng khác (Raspberry Pi, Jetson,
camera IP). Về trải nghiệm người dùng, giao diện hiện tại chủ yếu là
console trên máy tính và một số nút đơn giản trên ứng dụng Blynk,
chưa có giao diện đồ họa trực quan để quản lý người dùng, xem lịch
sử mở cửa, hoặc cấu hình các tham số liveness và độ nhạy của nhận
diện, nên vẫn còn khoảng cách so với các hệ thống khóa cửa thông minh thương mại.
3. Hướng phát triển trong tương lai
Từ những hạn chế nêu trên, đề tài mở ra nhiều hướng phát triển
trong tương lai để nâng cấp hệ thống theo hướng ngày càng thông
minh, an toàn và thân thiện với người dùng hơn. Trước hết, một
hướng đi quan trọng là chuyển dần phần xử lý nhận diện khuôn mặt
và liveness từ máy tính sang một nền tảng nhúng mạnh hơn như
Raspberry Pi, Jetson Nano hoặc các dòng ESP32 tích hợp camera và
khả năng xử lý AI cơ bản. Khi đó, toàn bộ hệ thống khóa cửa có thể
hoạt động độc lập, không cần phụ thuộc vào PC luôn bật, giảm chi
phí vận hành và nâng cao độ tin cậy. Việc sử dụng các thư viện tối
ưu cho edge như TFLite hoặc các mô hình nhận diện nhẹ (MobileNet,
FaceNet bản rút gọn) có thể được xem xét để thay thế cho LBPH
trong dài hạn, nhằm cải thiện độ chính xác và khả năng chịu đựng
biến thiên ánh sáng, góc mặt.
Một hướng phát triển khác là nâng cấp cơ chế liveness từ mức cơ
bản (nháy mắt + chuyển động đơn giản) lên các phương pháp chống
giả mạo tiên tiến hơn. Cụ thể, hệ thống có thể kết hợp nhiều tín hiệu
liveness: nháy mắt, chuyển động đầu theo lệnh ngẫu nhiên (ví dụ
yêu cầu người dùng quay trái, quay phải, gật đầu), phân tích texture
da mặt để phân biệt ảnh in/ màn hình so với da thật, hoặc sử dụng
camera hồng ngoại/ToF để thu thập thông tin chiều sâu (3D) của
khuôn mặt. Những tín hiệu này, nếu được tích hợp trong một mô
hình học máy phù hợp, sẽ giúp hệ thống khó bị qua mặt bằng ảnh
hoặc video hơn, nâng cao đáng kể mức độ an toàn khi triển khai ở
các môi trường nhạy cảm như văn phòng, phòng lab, hoặc khu vực chứa tài sản giá trị.
Về mặt chức năng hệ thống và trải nghiệm người dùng, trong tương
lai có thể xây dựng một giao diện quản trị tập trung (web hoặc
mobile app riêng) cho phép: quản lý danh sách người dùng, gán
tên/ID, xem và xóa dữ liệu khuôn mặt, theo dõi lịch sử mở cửa (log
thời gian, phương thức mở, kết quả liveness), cấu hình các tham số
như số lần nháy mắt cần thiết, khoảng thời gian liveness, ngưỡng độ
tin cậy của nhận diện, cũng như thiết lập các chính sách bảo mật (ví
dụ khóa cửa tạm thời sau nhiều lần thất bại liên tiếp). Đồng thời, hệ
thống có thể tích hợp thêm các phương thức xác thực khác như thẻ
RFID, mã OTP gửi qua điện thoại, hoặc xác thực đa yếu tố (yêu cầu
vừa khuôn mặt vừa mật khẩu trong một số chế độ an toàn cao), giúp
giải quyết các trường hợp ngoại lệ khi camera không nhận diện được
hoặc khi người dùng tạm thời không thể sử dụng khuôn mặt để xác thực.
Cuối cùng, về mặt nghiên cứu và mở rộng ứng dụng, đề tài có thể
phát triển theo hướng thu thập bộ dữ liệu lớn hơn, đa dạng hơn về
độ tuổi, giới tính, màu da, điều kiện ánh sáng và bối cảnh sử dụng,
từ đó đánh giá định lượng hiệu năng của hệ thống qua các chỉ số
như độ chính xác, tỉ lệ nhận sai người (false acceptance), tỉ lệ từ chối
nhầm (false rejection), thời gian phản hồi, và khả năng chống tấn
công giả mạo. Kết quả này không chỉ giúp tối ưu các tham số hiện
tại (ngưỡng nhận diện, ngưỡng EAR, số lần nháy mắt trong một
khoảng thời gian) mà còn là cơ sở khoa học để so sánh, lựa chọn và
đề xuất các thuật toán phù hợp hơn trong tương lai. Từ một mô hình
thử nghiệm ở quy mô cá nhân hoặc gia đình, hệ thống có thể được
nâng cấp, chuẩn hóa và tích hợp vào các giải pháp nhà thông minh
(smart home) hoặc hệ thống kiểm soát ra vào (access control) của
các tòa nhà, bệnh viện, trường học, mở ra nhiều tiềm năng ứng dụng
thực tế cho giải pháp khóa cửa thông minh kết hợp nhận diện khuôn mặt và chống giả mạo.