TỔNG QUAN
Giới thiệu sản phẩm
Hiện nay, an ninh bảo mật đang trở thành ưu tiên hàng đầu tại nhiều quốc gia, đặc biệt trong bối cảnh phát triển xã hội Hệ thống nhận diện khuôn mặt đã trở thành giải pháp quan trọng cho việc bảo vệ ngôi nhà Nhằm đáp ứng nhu cầu này, nhóm chúng tôi đã phát triển sản phẩm mở khóa cửa tự động bằng công nghệ nhận diện khuôn mặt, giúp chủ nhà tiết kiệm thời gian và chi phí, đồng thời nâng cao độ tin cậy trong bảo mật.
Mục tiêu
Xây dựng hệ thống nhận diện khuôn mặt bằng cách thu thập dữ liệu từ ESP32 Cam Mô hình này sẽ nhận diện khuôn mặt qua ESP32 Cam, so sánh với dữ liệu đã lưu trữ để đưa ra kết quả Dựa trên kết quả nhận diện, hệ thống sẽ thực hiện mở khóa cửa.
Các vấn đề cần giải quyết
• Xử lý và lắp nối các thiết bị phần cứng
• Xử lý ảnh từ Camera của ESP32 và dữ liệu trước đó
• Kết nối và cài đặt ESP8266
• Xây dựng hệ thống phân tích và nhận diện khuôn mặt
• Lập trình và viết mã nguồn cho các chức năng
• Ghép nối các phần và chạy thử từ đó điều chỉnh mô hình
Vấn đề Giải pháp đề xuất
Phát hiện khuôn mặt • Xây dựng và huấn luyện model phát hiện khuôn mặt
• Thử nghiệm với các model: Facenet, LBPH, OpenCV
• Huấn luyện trên Visual Studio Code
Nhận diện khuôn mặt • Xây dựng và huấn luyện model nhận diện khuôn mặt
• Thử nghiệm với các model: Facenet, MTCNN,…
• Huấn luyện trên Visual Studio Code Ứng dụng
• Xây dựng ứng dụng điện thoại với React Native
• Người dùng có thể đăng nhập
• Có chức năng hiển thị camera thời gian thực, lịch sử các lần nhận diện
• Đóng mở cửa bằng ứng dụng
Server Viết API bằng Django Rest Framework
Bảng 1: Đề xuất giải pháp tổng quan
GIẢI PHÁP
Các giải pháp
Hình 1: Sơ đồ tổng quan hệ thống
Hệ thống bao gồm ESP8266 và ESP32 Cam để chụp ảnh, kết nối với điện thoại thông minh để tương tác và hiển thị kết quả, cùng với Django REST Framework để thiết lập máy chủ Qua mạng không dây, điện thoại và ESP32 Cam có thể giao tiếp với máy chủ thông qua API.
API này được lập trình dựa trên Django REST Framework
2.2 Sơ đồ hoạt động tổng quan
Hình 2: Sơ đồ hoạt động tổng quan
2.3 Linh kiện sử dụng Tên linh kiện Hình ảnh Thông số, hoạt động
- Bộ vi xử lý ESP8266EX
- Mạng không dây 2.4 GHz hỗ trợ chuẩn 802.11 b/g/n
- Điện áp vào: 5V thông qua cổng USB
- Giao tiếp: Cable Micro USB
- Hỗ trợ bảo mật: WPA/WPA2
- Tích hợp giao thức TCP/IP
- Bộ vi xử lý ESP32-D0WD
- RAM: 512KB bên trong + PSRAM 4M bên ngoài
- Bluetooth: Bluetooth 4.2 BR / EDR và BLE
- Bảo mật: WPA / WPA2 / WPA2- Enterprise / WPS
- Định dạng hình ảnh đầu ra: JPEG
- Tốc độ truyền của UART: mặc định 115200bps
Module ULN2003 + Động cơ bước 28BYJ-48
- Điện áp cung cấp: 5 ~ 12VDC
- Tín hiệu ngõ ra: Jack cắm động cơ bước 28BYJ-48
- Có 3 đèn LED báo trạng thái:
- Tốc độ Baud: 300 bps đến 1,5
Bảng 2: Linh kiện sử dụng
Tên linh kiện Đơn giá Ghi chú
460.000 Bảng 3: Bảng kê chi phí đồ án
RESTful API là tiêu chuẩn thiết kế API cho ứng dụng web, giúp quản lý tài nguyên hiệu quả Tiêu chuẩn này tập trung vào các loại tài nguyên hệ thống như tệp văn bản, hình ảnh, âm thanh, video và dữ liệu động, với các trạng thái tài nguyên được định dạng và truyền tải qua giao thức HTTP.
Hình 3: Mô hình RESTful API
• Các thành phần của RESTful API
API (Giao diện lập trình ứng dụng) là tập hợp các quy tắc và cơ chế cho phép các ứng dụng hoặc thành phần tương tác với nhau Nó cung cấp dữ liệu cần thiết cho ứng dụng của bạn dưới các định dạng phổ biến như JSON hoặc XML.
REST (REpresentational State Transfer) là một kiến trúc API sử dụng phương thức HTTP đơn giản để giao tiếp giữa các máy Thay vì chỉ sử dụng một URL để xử lý thông tin người dùng, REST gửi yêu cầu HTTP như GET, POST, DELETE đến một URL cụ thể để quản lý dữ liệu hiệu quả.
RESTful API là tiêu chuẩn thiết kế API cho ứng dụng web, giúp quản lý tài nguyên hiệu quả Đây là một trong những phương pháp thiết kế API phổ biến hiện nay, cho phép các ứng dụng web và di động giao tiếp dễ dàng với nhau.
Chức năng quan trọng nhất của REST là quy định cách sử dụng các phương thức HTTP như GET, POST, PUT, DELETE và cách định dạng URL cho ứng dụng web nhằm quản lý các tài nguyên RESTful không đặt ra yêu cầu về logic mã nguồn của ứng dụng và không bị giới hạn bởi ngôn ngữ lập trình, cho phép bất kỳ ngôn ngữ hoặc framework nào cũng có thể được sử dụng để thiết kế một API RESTful.
• Phương thức RESTful hoạt động:
Hình 4: Sơ đồ hoạt động RESTful API
REST hoạt động chủ yếu dựa vào giao thức HTTP Các hoạt động cơ bản nêu trên sẽ sử dụng những phương thức HTTP riêng
❖ GET (SELECT): Trả về một Resource hoặc một danh sách Resource
❖ POST (CREATE): Tạo mới một Resource
❖ PUT (UPDATE): Cập nhật thông tin cho Resource
❖ DELETE (DELETE): Xoá một Resource Những phương thức hay hoạt động này thường được gọi là CRUD tương ứng với Create, Read, Update, Delete – Tạo, Đọc, Sửa, Xóa
• Giới thiệu về Django REST Framework:
Django REST Framework is a powerful extension of Django that enables the creation of robust Web APIs, serving as a bridge between various systems such as clients and servers Clients can include web applications, mobile devices, and tablets, while the server typically runs on Django with a MySQL database.
Django REST Framework hỗ trợ giao thức truyền tải dữ liệu HTTP thông qua các phương thức như Post, Get, Put, Delete
2.5 Giải pháp phát hiện và nhận diện khuôn mặt 2.5.1 Tổng quan về hệ thống nhận diện:
Hình 6: Sơ đồ hệ thống nhận diện khuôn mặt 2.5.2 Face Detector
Face detection is a module in the system designed to identify faces within an image and mark them with bounding boxes The primary model utilized for this task is MTCNN.
MTCNN viết tắt của Multi-task Cascaded Convolutional Networks Nó là bao gồm
3 mạng CNN xếp chồng và đồng thời hoạt động khi detect khuôn mặt Mỗi mạng có cấu trúc khác nhau và đảm nhiệm vai trò khác nhau trong task
MTCNN bao gồm ba lớp mạng khác nhau, đại diện cho ba giai đoạn chính: P-Net, R-Net và O-Net Đầu vào của MTCNN là hình ảnh của một người hoặc một nhóm người, trong khi đầu ra là vị trí khuôn mặt cùng với các điểm quan trọng trên khuôn mặt như mắt, mũi và miệng.
Face encoder: là một module trong hệ thống được dùng để trích xuất đặc trưng của một gương mặt có trong bức ảnh
Sử dụng model facenet để đi trích xuất đặc trưng Facenet gồm có hai thành phần chính đó là siam network và triple loss function.[3]
SIAM NETWORK là một kiến trúc mạng cho phép xác định xem hai bức ảnh có thuộc về cùng một người hay không Khi đưa vào mô hình hai hình ảnh, hệ thống sẽ phân tích và trả lời câu hỏi này một cách chính xác.
Thay vì dự đoán trực tiếp bức ảnh đó là thuộc về ai, thì sẽ nhận vào 2 bức ảnh và nói xem nó có cùng một loại hay không?
Ví dụ: muốn phân loại người A với một bức ảnh, ta chỉ cần đưa bức ảnh của người
Khi hai bức ảnh được đưa vào mô hình để phân loại, hệ thống sẽ xác định xem chúng có cùng một người hay thuộc về các loại khác nhau.
Mạng Siam nhận đầu vào là hai bức ảnh bất kỳ và xuất ra hai vector đặc trưng tương ứng Các vector này được biểu diễn dưới dạng số học, cho phép kiểm tra độ tương đồng giữa các bức ảnh thông qua một hàm loss Hàm loss phổ biến được sử dụng trong trường hợp này là norm bậc 2.
Hàm loss function được sử dụng để đo lường sự khác biệt giữa hai vectơ biểu diễn của hai ảnh input Thông thường, hàm loss function này là một hàm chuẩn bậc 2.
||𝑓(𝑥1) − 𝑓(𝑥2)|| 2 2 Phải là một giá trị nhỏ
- Khi x1, x2 là 2 người khác nhau:
||𝑓(𝑥1) − 𝑓(𝑥2)|| 2 2 Phải là một giá trị lớn
TRIPLE LOSS: Ta chọn 3 bức ảnh trong đó sẽ có 1 bức ảnh làm chính (Anchor
Image), bên cạnh đó sẽ có 1 bức ảnh giống (Positive) và một bức ảnh khác (Negative) với bức ảnh Anchor Kí hiệu lần lượt là A,P,N
Hàm loss function đóng vai trò quan trọng trong việc tối thiểu hóa khoảng cách giữa hai ảnh khi chúng là Negative và tối đa hóa khoảng cách khi chúng là Positive Do đó, việc lựa chọn các bộ ba ảnh phù hợp là rất cần thiết để đạt được hiệu quả tối ưu trong quá trình học máy.
Khi lựa chọn ảnh Anchor và Positive, cần đảm bảo khoảng cách d(A,P) lớn để tăng độ khó cho thuật toán Việc so sánh ảnh hồi nhỏ với ảnh hiện tại giúp thuật toán học tốt hơn Nếu thuật toán có khả năng nhận diện chính xác, nó sẽ trở nên thông minh hơn.
KẾT QUẢ
Tổng quan kết quả đạt được
Sau khi hoàn thành quá trình xây dựng PBL5, nhóm đã nỗ lực để hoàn thiện sản phẩm theo đúng yêu cầu và thời gian đề ra, tập trung vào các mục tiêu và vấn đề ban đầu.
- Nắm được kiến thức cơ bản về kỹ thuật máy tính
- Nắm được các kiến thức về phát hiện và nhận diện khuôn mặt để điều khiển Camera
- Tương ứng với những kết quả nhận diện được người dùng có thể điều khiển, xem và quản lý camera để đóng mở cửa
3.1 Kết quả thực tế 3.1.1 Quá trình thực hiện và kết quả phân tích và nhận diện khuôn mặt Quá trình xây dựng mô hình:
• Cài đặt thư viện và các phần mềm cần thiết:
❖ Tải và cài đặt CUDA
Để chuẩn bị dữ liệu cho dự án, mỗi học viên cần thu thập 30 bức ảnh chụp khuôn mặt của mình từ nhiều góc độ khác nhau Ảnh phải rõ nét và chỉ chứa một khuôn mặt cụ thể Hãy đặt tên thư mục chứa ảnh của bạn theo tên của chính bạn để dễ dàng quản lý.
Xử lý dữ liệu là bước quan trọng trong việc phân tích ảnh chụp khuôn mặt Dữ liệu thu thập được bao gồm cả khuôn mặt và ngoại cảnh xung quanh Để tách biệt khuôn mặt của từng đối tượng, chúng tôi sử dụng mô hình MTCNN để phát hiện khuôn mặt và thực hiện cắt ảnh, từ đó thu được khuôn mặt cụ thể.
Hình 13: Ảnh được crop cụ thể của đối tượng
Chuẩn hóa và lưu trữ dữ liệu là bước quan trọng trong quy trình xử lý ảnh Dữ liệu ảnh thu được dưới định dạng như jpg và png sẽ được chuyển đổi thành vector 512 chiều thông qua mô hình Facenet Sau đó, dữ liệu này sẽ được lưu trữ dưới dạng file npy cùng với việc lưu trữ các đối tượng liên quan.
• Test: Phần test thực hiện các bước:
❖ Thu thập dư liệu test (cụ thể là 1 ảnh từ đối tượng cần test)
❖ Xử lý dữ liệu, cắt dữ liệu về và chuẩn hóa dữ liệu về dạng vector tương ứng (512 chiều)
Để truy cập file npy đã lưu trữ và file lưu trữ đối tượng, cần sử dụng thuật toán phù hợp để thực hiện tính toán và xác định khuôn mặt cần kiểm tra.
Kết quả nhận diện khuôn mặt:
Hình 15: Kết quả nhận diện khuôn mặt
Chú thích: Ảnh sử dụng detect được 1 người, khoảng cách Euclid nhỏ nhất có được là 0.60715 Xác định đây là ảnh của Đạt, với xác suất là 93%
Hình 16: Kết quả 50 lần test
Khi chọn ngưỡng phù hợp và sử dụng camera ESP32-CAM, ảnh test đạt độ sáng đầy đủ với độ nhòa và mờ ít, kết quả cho thấy độ chính xác đạt 88% sau 50 lần test Sai số chủ yếu xảy ra do camera bị rung, nhòa, mờ hoặc độ sáng thấp.
Hình 17: Giao diện đăng nhập Hình 18: Giao diện đăng ký
Chức năng: Đăng ký tài khoản người dùng và đăng nhập với tài khoản vừa đăng ký
Người dùng có thể dễ dàng đăng ký tài khoản bằng cách nhập Email, mật khẩu và mã PIN đã được chỉ định Sau khi hoàn tất đăng ký, họ sẽ đăng nhập vào tài khoản mới và ứng dụng sẽ chuyển hướng đến màn hình chính.
Hình 19: Giao diện màn hình chính
Chức năng: Là giao diện màn hình chính của ứng dụng
Users can navigate between different screens such as Control, History, and Profile by clicking on the BottomTab Additionally, they can access the Control screen for the Front by pressing the Front button.
Hình 20: Giao diện xem camera và điều khiển cửa
Chức năng: Là giao diện điều khiển đóng mở cửa và xem camera thời gian thực
Người dùng có thể dễ dàng điều khiển cửa bằng cách nhấn vào công tắc Switch để mở hoặc đóng cửa Sau 10 giây, cửa sẽ tự động đóng lại Ngoài ra, người dùng còn có thể xem camera thời gian thực thông qua Webview bên dưới.
Hình 21: Giao diện danh sách lịch sử các lần nhận diện
Hình 22: Giao diện chi tiết lịch sử nhận diện
Chức năng: Là giao diện hiển thị danh sách và xem chi tiết các lần nhận diện khuôn mặt
Người dùng có thể cuộn qua danh sách lịch sử để xem các mục đã nhận diện Khi nhấn vào một item cụ thể, Modal chi tiết lịch sử sẽ hiện ra, hiển thị thông tin về số lần nhận diện, tên người nhận diện và thời gian thực hiện nhận diện.
Hình 23: Giao diện thông tin người dùng
Chức năng: Là giao diện hiển thị thông tin người dùng
Các hoạt động: Người dùng xem email của mình trên màn hình Người dùng đăng xuất khỏi ứng dụng bằng cách nhấn vào Sign out