1. Trang chủ
  2. » Giáo Dục - Đào Tạo

HỆ THỐNG MỞ KHÓA CỬA TỰ ĐỘNG SỬ DỤNG NHẬN DẠNG KHUÔN MẶT

33 4 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Hệ Thống Mở Khóa Cửa Tự Động Sử Dụng Nhận Dạng Khuôn Mặt
Tác giả Nhóm 49
Người hướng dẫn TS. Bùi Thị Thanh Thanh
Trường học Trường đại học Bách Khoa Khoa Công Nghệ Thông Tin
Chuyên ngành Kỹ thuật máy tính
Thể loại Báo cáo đồ án
Năm xuất bản 2022
Thành phố Đà Nẵng
Định dạng
Số trang 33
Dung lượng 1,55 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • CHƯƠNG 1: TỔNG QUAN (8)
    • 1.1 Giới thiệu sản phẩm (8)
    • 1.2 Mục tiêu (8)
    • 1.3 Các vấn đề cần giải quyết (8)
  • CHƯƠNG 2: GIẢI PHÁP (10)
    • 2. Các giải pháp (10)
      • 2.1 Sơ đồ tổng quan của hệ thống (10)
      • 2.2 Sơ đồ hoạt động tổng quan (10)
      • 2.3 Linh kiện sử dụng (11)
      • 2.4 Giải pháp truyền thông (12)
      • 2.5 Giải pháp phát hiện và nhận diện khuôn mặt (15)
        • 2.5.1 Tổng quan về hệ thống nhận diện (15)
        • 2.5.2 Face Detector (15)
        • 2.5.3 Face Encoder (16)
        • 2.5.4 Face identifier (18)
        • 2.5.5 Các pretrain model (20)
      • 2.6 Giải pháp ứng dụng di động (21)
        • 2.6.1 Bài toán (21)
        • 2.6.2 Công nghệ sử dụng (21)
        • 2.6.3 Biểu đồ usecase hệ thống (22)
        • 2.6.4 Server (22)
  • CHƯƠNG 3: KẾT QUẢ (24)
    • 3. Tổng quan kết quả đạt được (24)
      • 3.1 Kết quả thực tế (24)
        • 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 (24)
        • 3.1.2 Ứng dụng di động (27)
  • CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN (32)
    • 4. Kết luận và hướng phát triển (32)
      • 4.1 Đánh giá sản phẩm (32)

Nội dung

DANH MỤC HÌNH ẢNH Hình 1: Sơ đồ tổng quan hệ thống Hình 2: Sơ đồ hoạt động tổng quan Hình 3: Mô hình RESTful API Hình 4: Sơ đồ hoạt động RESTful API Hình 5: Django REST Framework Hình 6:

TỔNG QUAN

Giới thiệu sản phẩm

Hiện nay, cùng với sự phát triển của xã hội, an ninh và bảo mật được đặt ra ở mức khắt khe trên toàn cầu Hệ thống nhận dạng khuôn mặt đóng vai trò thiết yếu trong vấn đề bảo vệ ngôi nhà và quản lý cửa ra vào Nhận thấy nhu cầu ấy, nhóm chúng tôi đã nghiên cứu và phát triển một sản phẩm mở khóa cửa tự động bằng khuôn mặt, mang đến sự tin cậy và an toàn cho các gia đình Sản phẩm giúp chủ nhà thuận tiện hơn khi ra vào, tiết kiệm thời gian và chi phí, đồng thời tăng cường hiệu quả bảo mật cho ngôi nhà.

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 và huấn luyện một mô hình AI để nhận diện khuôn mặt từ nguồn dữ liệu này Mô hình nhận diện khuôn mặt từ ESP32 Cam sẽ so sánh khuôn mặt được ghi hình với dữ liệu có sẵn trong cơ sở dữ liệu khuôn mặt và đưa ra kết quả nhận diện Dựa trên kết quả nhận diện, hệ thống sẽ tiến hành mở khóa cửa, mang lại quá trình kiểm soát truy cập an toàn và thuận tiện.

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 gồm ESP8266 và ESP32-CAM dùng để chụp ảnh, kết hợp với điện thoại thông minh để tương tác và hiển thị kết quả, được quản lý bởi server dựa trên Django REST Framework Qua mạng Wi-Fi, điện thoại và ESP32-CAM giao tiếp với server qua API, cho phép gửi dữ liệu ảnh và nhận phản hồi xử lý nhanh chóng.

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à một chuẩn thiết kế API phổ biến cho các ứng dụng web và Web services, nhằm tối ưu hóa việc quản lý các resource Nó tập trung vào các tài nguyên hệ thống như văn bản, hình ảnh, âm thanh, video và dữ liệu động, với các trạng thái của 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 một ứng dụng hoặc thành phần tương tác với một ứng dụng hoặc thành phần khác API cho phép trả về dữ liệu cho ứng dụng ở các định dạng phổ biến như JSON hoặc XML, hỗ trợ quá trình tích hợp và trao đổi thông tin giữa các dịch vụ một cách linh hoạt và hiệu quả Nhờ API, nhà phát triển có thể gọi chức năng hoặc lấy dữ liệu từ các dịch vụ bên ngoài một cách thống nhất, từ đó giảm thiểu công sức phát triển và tăng tính mở rộng cho hệ thống.

REST (REpresentational State Transfer) là một kiến trúc API phổ biến, dùng nguyên lý giao tiếp giữa các hệ thống thông qua HTTP để đơn giản hóa việc truy cập và xử lý dữ liệu từ các tài nguyên được định danh bằng URL Trong mô hình REST, các thao tác lên dữ liệu được thực hiện bằng các phương thức HTTP chuẩn như GET (lấy dữ liệu), POST (tạo dữ liệu), PUT/PATCH (cập nhật dữ liệu) và DELETE (xóa dữ liệu), giúp client gửi yêu cầu tới một URL và nhận về đại diện của tài nguyên ở định dạng thông dụng như JSON hoặc XML REST thiết kế theo nguyên tắc stateless, dễ mở rộng, tối ưu cho cache và tích hợp giữa các dịch vụ, mang lại sự linh hoạt và hiệu quả cho việc xây dựng API, ứng dụng web và di động.

RESTful API là một chuẩn thiết kế API được dùng để xây dựng các API cho các ứng dụng web, nhằm quản lý các resource một cách nhất quán và dễ mở rộng Đây là một trong những kiểu thiết kế API được sử dụng phổ biến hiện nay, cho phép các ứng dụng web và di động giao tiếp với nhau hiệu quả thông qua các tài nguyên được mô tả bằng URL và các phương thức HTTP.

REST định nghĩa cách sử dụng các phương thức HTTP (GET, POST, PUT, DELETE) và cách định dạng URL để quản lý các tài nguyên trong ứng dụng web một cách nhất quán và dễ tối ưu cho công cụ tìm kiếm RESTful không can thiệp vào logic ứng dụng hay giới hạn ngôn ngữ lập trình; bất kỳ ngôn ngữ hoặc framework nào cũng có thể thiết kế một RESTful API để tương tác với tài nguyên thông qua các phương thức HTTP tiêu chuẩn và các URL có cấu trúc rõ ràng.

• 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, feature-rich toolkit that sits on top of Django to build robust Web APIs, serving as a bridge between diverse systems It enables seamless client–server communication, with clients ranging from web, mobile, and tablet apps to servers powered by Django and databases such as MySQL.

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 core module in a system that identifies faces in an image and marks them with bounding boxes The primary model used for this task is MTCNN (Multitask Cascaded Convolutional Networks), enabling robust face localization across varied conditions and providing precise bounding boxes for each detected face.

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 là một hệ thống nhận diện khuôn mặt gồm 3 lớp mạng khác biệt, tượng trưng cho 3 stage chính là P-Net, R-Net và O-Net Đầu vào của MTCNN là một bức ảnh chứa người hoặc tập thể, còn đầu ra là vị trí khuôn mặt và các điểm trên mặt như mắt, mũi và miệng Hệ thống hoạt động theo chu trình 3 bước với P-Net phát hiện sơ bộ, R-Net hiệu chỉnh và O-Net xác nhận cuối cùng cũng như ước lượng các landmarks khuôn mặt một cách chính xác, giúp tối ưu hóa việc nhận diện và phân tích đặc trưng khuôn mặt ở nhiều kích thước.

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 nhận diện khuôn mặt cho phép đưa hai bức ảnh vào hệ thống và trả về kết quả xác định xem hai ảnh đó có thuộc về cùng một người hay không Đây là một cơ chế so sánh đặc điểm khuôn mặt giữa hai ảnh nhằm hỗ trợ xác thực danh tính hoặc đối chiếu nhân diện một cách nhanh chóng và hiệu quả.

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

Ảnh A và ảnh chụp được cần phân loại; khi hai ảnh này được đưa qua mô hình nhận diện khuôn mặt, hệ thống sẽ trả về kết quả xác định xem chúng có thuộc về cùng một người hay là hai người khác nhau Quá trình so khớp khuôn mặt giữa hai hình ảnh giúp đánh giá mức độ tương đồng và phân loại ảnh một cách hiệu quả, hỗ trợ các ứng dụng như xác thực danh tính, quản lý thư viện ảnh và các nền tảng nhận diện khuôn mặt.

Mạng Siam nhận hai ảnh bất kỳ làm đầu vào và xuất ra hai vector đặc trưng đại diện cho từng ảnh Các vector này ở dạng số nên có thể dùng để đo độ tương đồng giữa hai ảnh bằng cách đưa chúng vào một hàm loss function Hàm loss phổ biến được sử dụng là norm bậc 2 (L2) để tính khoảng cách giữa hai vector đặc trưng Nhờ đó, mức độ giống nhau giữa hai ảnh được thể hiện thông qua khoảng cách giữa hai vector, phục vụ cho các tác vụ nhận diện và đối chiếu ảnh.

Loss function đo sự khác biệt giữa hai vectơ đại diện cho hai ảnh đầu vào bằng cách đưa chúng vào một hàm mất mát Thông thường, hàm mất mát được xây dựng theo chuẩn bậc 2 (hàm chuẩn L2), cho phép đo khoảng cách giữa hai biểu diễn một cách chính xác và dễ tối ưu trong quá trình huấn luyện Việc so sánh hai vectơ này giúp mô hình học cách nhận diện sự giống và khác giữa hai ảnh, từ đó nâng cao hiệu suất và khả năng tổng quát của hệ thống.

||𝑓(𝑥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 là tối thiểu hóa khoảng cách giữa 2 ảnh khi chúng là Negative và tối đa hóa khoảng cách khi chúng là Positive Như vậy chúng ta cần lựa chọn các bộ 3 ảnh sao cho:

❖ Ảnh Anchor và Positive khác nhau nhất: cần lựa chọn để khoảng cách d(A,P) lớn Điều này cũng tương tự như bạn lựa chọn một ảnh của mình hồi nhỏ so với hiện tại để thuật toán học khó hơn Nhưng nếu nhận biết được thì nó sẽ thông minh hơn

KẾT QUẢ

Tổng quan kết quả đạt được

Sau quá trình xây dựng PBL5 với các mục tiêu và các vấn đề được đặt ra ban đầu, nhóm đã nỗ lực hoàn thiện sản phẩm đúng yêu cầu và đúng thời gian quy định của đề tài, đảm bảo chất lượng, tính khả thi và phù hợp với phạm vi công việc đã đề ra.

- 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 nhận diện khuôn mặt bằng cách thu thập dataset từ các bạn trong lớp Dữ liệu ảnh có kích thước và định dạng khác nhau, mỗi bạn cung cấp 30 ảnh để bao phủ các góc mặt và điều kiện ánh sáng đa dạng, sao cho mỗi ảnh vẫn chứa đúng một khuôn mặt duy nhất của người đó Để tổ chức dữ liệu hiệu quả cho quá trình tiền xử lý và huấn luyện mô hình, hãy tạo một thư mục riêng cho từng bạn và đặt tên thư mục bằng tên của người đó.

Trong quá trình xử lý dữ liệu cho nhận diện khuôn mặt, tập dữ liệu thu thập được là các ảnh có khuôn mặt kèm theo nền xung quanh Chúng tôi áp dụng mô hình MTCNN để detect khuôn mặt và sau đó crop ảnh để thu được khuôn mặt cụ thể của từng đối tượng, phục vụ cho các bước phân tích và nhận diện tiếp theo.

Hình 13: Ảnh được crop cụ thể của đối tượng

Chuẩn hóa dữ liệu và lưu trữ: Dữ liệu thu được ở dạng ảnh (jpg, png, …) và được đưa qua mô hình FaceNet để chuyển thành vector đặc trưng 512 chiều Dữ liệu sau khi biến đổi được lưu trữ ở định dạng file NumPy (.npy) và kèm theo lưu trữ các đối tượng liên quan để dễ tra cứu và quản lý.

• 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 vào các file npy đã lưu trữ và các file lưu trữ đối tượng, sau đó sử dụng các thuật toán nhận diện khuôn mặt phù hợp để thực thi các phép tính và xác định khuôn mặt cần test Quá trình xử lý gồm tiền xử lý dữ liệu, trích xuất đặc trưng và so sánh với dữ liệu mẫu đã lưu để định danh khuôn mặt mục tiêu.

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

Việc chọn ngưỡng phù hợp giúp ảnh test có độ sáng đầy đủ khi sử dụng camera ESP32-CAM, hạn chế độ nhòe và mờ, từ đó đạt độ chính xác 88% trong 50 lần thử; sai số tập trung ở các trường hợp camera bị rung, ảnh nhòe, 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 đăng ký tài khoản bằng cách nhập Email, mật khẩu và mã PIN được cung cấp trước Sau khi đăng ký thành công, người dùng sẽ đăng nhập tài khoản vừa được tạo và ứng dụng sẽ tự động chuyển đến màn hình Home.

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 navigate the app via BottomTab navigation to switch between the Control screen, History screen, and Profile screen They can also tap the Front button to access the Front door's Control screen, enabling quick door-control actions This design provides fast, intuitive access to device control, history viewing, and profile management.

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

Các hoạt động chính gồm: người dùng nhấn Switch để đóng mở cửa; cửa sẽ mở theo lệnh và tự động đóng sau 10 giây Bạn có thể xem camera thời gian thực bằng Webview ở phầ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 cuộn danh sách lịch sử để xem lại các lần nhận diện trước Khi nhấn vào một item nhận diện, Modal chi tiết lịch sử sẽ hiển thị số lần nhận diện, tên người nhận diện và thời gian 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

Ngày đăng: 24/10/2022, 17:11

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Xây dựng API với Django Rest Framework, https://viblo.asia/p/xay-dung-api-voi-django-rest-framework-Do754PXJ5M6 Sách, tạp chí
Tiêu đề: Xây dựng API với Django Rest Framework
[2] Django REST Framework, https://www.django-rest-framework.org/ Sách, tạp chí
Tiêu đề: Django REST Framework
[3] Quang Trần, MTCNN và FaceNet, https://viblo.asia/p/nhan-dien-khuon-mat-voi-mang-mtcnn-va-facenet-phan-1-Qbq5QDN4lD8 Sách, tạp chí
Tiêu đề: MTCNN và FaceNet
Tác giả: Quang Trần
[4] phamdinhkhanh, Facenet, https://bom.so/MqPy2I Sách, tạp chí
Tiêu đề: Facenet
Tác giả: phamdinhkhanh
[5] React Native Docs, https://reactnative.dev/docs/getting-started Link
[6] davidsandberg(2018), Facenet, https://github.com/davidsandberg/facenet Link

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w