CameraWebServer trong IDE không lưu các khuôn mặt đã đăng ký theo cách có thể tồn tại khi mất điện. Để sửa đổi nó để sử dụng phân vùng mới, một số thay đổi cần được thực hiện đối với đoạn code .
Trong Arduino IDE, hãy tạo một bản sao của CameraWebServer Sketch đang hoạt động của máy chủ từ hướng dẫn trước bằng cách lưu nó với một tên tệp mới chẳng hạn như CameraWebServerPermanent.
Trong Arduino IDE sẽ hiển thị 3 tab như hình sau :
MẠNG KẾT NỐI VẠN VẬT HỆ THỐNG NHẬN DIỆN KHUÔN MẶT SINH VIÊN
Trong tab thứ hai (app_httpd.cpp), hãy thực hiện các thay đổi sau. Sau #include "fr_osystem.h" (xung quanh dòng 24), hãy thêm:
#include "fr_flash.h";
Thay đổi int8_t left_sample_face = register_face (& id_list, align_face); (& id_list, align_face); (xung quanh dòng 178) đến:
int8_t left_sample_face = enroll_face_id_to_flash(&id_list, aligned_face);
Sau face_id_init (& id_list, FACE_ID_SAVE_NUMBER, ENROLL_CONFIRM_TIMES); (xung quanh dòng 636) thêm:
read_face_id_from_flash(&id_list);
Flash và chạy Sketch này theo cách tương tự như trước đây. Dữ liệu khuôn mặt đã đăng ký hiện đang được lưu vào phân vùng mới trên bộ nhớ flash.
c)Kích Hoạt Nhận Dạng Khn Mặt.
Khởi động Arduino IDE, tạo 1 Sketch mới.
1. #include "esp_camera.h"
2. #include "fd_forward.h"
3. #include "fr_forward.h"
4. #include "fr_flash.h" 5.
6. #define relayPin 12 // pin 2 cũng có thể sử dụng
7. unsigned long currentMillis = 0;
8. unsigned long openedMillis = 0;
9. long interval = 5000; // mở khóa trong mili giây
10.
12.#define FACE_ID_SAVE_NUMBER 7 13.
14.static inline mtmn_config_t app_mtmn_config()
15.{ 16. mtmn_config_t mtmn_config = {0}; 17. mtmn_config.type = FAST; 18. mtmn_config.min_face = 80; 19. mtmn_config.pyramid = 0.707; 20. mtmn_config.pyramid_times = 4; 21. mtmn_config.p_threshold.score = 0.6; 22. mtmn_config.p_threshold.nms = 0.7; 23. mtmn_config.p_threshold.candidate_number = 20; 24. mtmn_config.r_threshold.score = 0.7; 25. mtmn_config.r_threshold.nms = 0.7; 26. mtmn_config.r_threshold.candidate_number = 10; 27. mtmn_config.o_threshold.score = 0.7; 28. mtmn_config.o_threshold.nms = 0.7; 29. mtmn_config.o_threshold.candidate_number = 1; 30. return mtmn_config; 31.}
32.mtmn_config_t mtmn_config = app_mtmn_config(); 33.
34.static face_id_list id_list = {0};
35.dl_matrix3du_t *image_matrix = NULL;
36.camera_fb_t * fb = NULL; 37.
38.dl_matrix3du_t *aligned_face = dl_matrix3du_alloc(1, FACE_WIDTH, FACE_HEIG HT, 3);
39.
40.void setup() {
41. Serial.begin(115200); // Tốc độ boaud
42. // đặt chế độ ban đầu vào cho chân relay và led
43. digitalWrite(relayPin, LOW); 44. pinMode(relayPin, OUTPUT); 45. 46. camera_config_t config; 47. config.ledc_channel = LEDC_CHANNEL_0; 48. config.ledc_timer = LEDC_TIMER_0; 49. config.pin_d0 = 5; 50. config.pin_d1 = 18; Trang | 32
MẠNG KẾT NỐI VẠN VẬT HỆ THỐNG NHẬN DIỆN KHUÔN MẶT SINH VIÊN 51. config.pin_d2 = 19; 52. config.pin_d3 = 21; 53. config.pin_d4 = 36; 54. config.pin_d5 = 39; 55. config.pin_d6 = 34; 56. config.pin_d7 = 35; 57. config.pin_xclk = 0; 58. config.pin_pclk = 22; 59. config.pin_vsync = 25; 60. config.pin_href = 23; 61. config.pin_sscb_sda = 26; 62. config.pin_sscb_scl = 27; 63. config.pin_pwdn = 32; 64. config.pin_reset = -1; 65. config.xclk_freq_hz = 20000000; 66. config.pixel_format = PIXFORMAT_JPEG; 67. config.frame_size = FRAMESIZE_SVGA; 68. config.jpeg_quality = 12; 69. config.fb_count = 1; 70.
71. esp_err_t err = esp_camera_init(&config);
72. if (err != ESP_OK) {
73. Serial.printf("Camera init failed with error 0x%x", err);
74. return;
75. } 76.
77. // thả xuống kích thước khung hình để có tốc độ khung hình ban đầu cao hơn. 78. sensor_t * s = esp_camera_sensor_get(); 79. s->set_framesize(s, FRAMESIZE_QVGA); 80. 81. face_id_init(&id_list, FACE_ID_SAVE_NUMBER, ENROLL_CONFIRM_TIMES);
82.read_face_id_from_flash(&id_list); // Đọc dữ liệu khuôn mặt hiện tại từ đèn
flash trên bo mạch
83.} 84.
85.void rzoCheckForFace() {
86. currentMillis = millis();
87. if (run_face_recognition()) { // chức năng nhận dạng khuôn mặt đã trả về
MẠNG KẾT NỐI VẠN VẬT HỆ THỐNG NHẬN DIỆN KHUÔN MẶT SINH VIÊN
90. openedMillis = millis(); //thời gian relay thoát
91. }
92.if (currentMillis - interval > openedMillis){ // thời gian hiện tại đến thời gian
nhận diện khuôn mặt >5s
93. digitalWrite(relayPin, LOW); //mở relay
94. }
95.} 96.
97.bool run_face_recognition() {
98. bool faceRecognised = false; // mặc định
99. int64_t start_time = esp_timer_get_time();
100. fb = esp_camera_fb_get();
101. if (!fb) {
102. Serial.println("Camera capture failed");
103. return false;
104. } 105.
106. int64_t fb_get_time = esp_timer_get_time();
107. Serial.printf("Get one frame in %u ms.\n", (fb_get_time - start_time) / 1000); // dịng này đã được bình luận
108.
109. image_matrix = dl_matrix3du_alloc(1, fb->width, fb->height, 3);
110. uint32_t res = fmt2rgb888(fb->buf, fb->len, fb->format, image_matrix- >item); 111. if (!res) { 112. Serial.println("to rgb888 failed"); 113. dl_matrix3du_free(image_matrix); 114. } 115. 116. esp_camera_fb_return(fb); 117.
118. box_array_t *net_boxes = face_detect(image_matrix, &mtmn_config); 119.
120. if (net_boxes) {
121. if (align_face(net_boxes, image_matrix, aligned_face) == ESP_OK) {
122.
123. int matched_id = recognize_face(&id_list, aligned_face);
124. if (matched_id >= 0) {
125.Serial.printf("Match Face ID: %u\n", matched_id); 126.faceRecognised = true; // bây giờ hàm sẽ trả về true 127. } else {
128.Serial.println("No Match Found"); 129.matched_id = -1;
130. }
131. } else {
132. Serial.println("Face Not Aligned");
133. } 134. 135. free(net_boxes->box); 136. free(net_boxes->landmark); 137. free(net_boxes); 138. } 139. 140. dl_matrix3du_free(image_matrix); 141. return faceRecognised; 142.} 143. 144.void loop() { 145. rzoCheckForFace(); 146. }
Code trong hàm rzoCheckForFace () trong đoạn code trên có thể được thay đổi thành bất kỳ hàm nào chúng ta yêu cầu khi một khuôn mặt được nhận dạng.
Khi chúng ta flash và chạy Sketch mới này, ‘Khuôn mặt được nhận dạng’ trong màn hình camera giám sát nối tiếp khi một khn mặt phù hợp được tìm thấy.
d)Khởi Động Hệ Thống.
Sketch ở trên kết hợp với một relay hoặc module Mosfet có thể được sử dụng để bật hoặc tắt một thiết bị điện.
Truy cập máy chủ để phát trực tuyến các camera giám sát mạng cục bộ, mở trình duyệt và nhập địa chỉ IP ESP32-CAM, chọn nút bắt đầu để tiến hành giám sát và nhận diện khuôn mặt.
e)Xóa Một Khn Mặt Khỏi Hệ Thống Máy Chủ.
Khởi động Arduino IDE, tạo một sketch mới. #include "esp_camera.h"
#include "fd_forward.h"
MẠNG KẾT NỐI VẠN VẬT HỆ THỐNG NHẬN DIỆN KHUÔN MẶT SINH VIÊN
#include "fr_forward.h" #include "fr_flash.h"
#define ENROLL_CONFIRM_TIMES 5 #define FACE_ID_SAVE_NUMBER 7 static face_id_list id_list = {0};
void setup() {
Serial.begin(115200);
face_id_init(&id_list, FACE_ID_SAVE_NUMBER, ENROLL_CONFIRM_TIMES); read_face_id_from_flash(&id_list); / /Đọc dữ liệu khuôn mặt hiện tại từ đèn flash
trên bo mạch Serial.println("Faces Read"); while ( delete_face_id_in_flash(&id_list) > -1 ) { Serial.println("Deleting Face"); } Serial.println("All Deleted"); } void loop() { } 5) Quy Trình Vận Hành Hệ Thống. a) Cách Thức Hoạt Động.
Hệ thống nhận diện khuôn mặt sinh viên trường Đại Học Kinh Tế Quốc Dân vào giảng đường A2 là hệ thống nhận diện khuôn mặt trực tiếp qua camera quan sát.
Hệ thống nhận diện sử dụng sinh trắc học để định vị các đặc điểm trên khuôn mặt của các bạn sinh viên qua camera quan sát. Sau đó so sánh thơng tin vừa mới nhận diện với dữ liệu lưu trữ tại hệ thống máy chủ để tìm một kết quả phù hợp. Trường hợp khơng tìm thấy kết quả phù hợp hệ thống máy chủ sẽ hiển thị cảnh báo có người lạ vào tịa nhà.
Ngun lý hoạt động của hệ thống:
Phát hiện: nhận dạng đặc điểm trên khn mặt sinh viên.
Phân tích: các dữ liệu sẽ được trích xuất từ các mẫu .
So sánh: các dữ liệu vừa thu được sẽ tiến hành so sánh với dữ liệu lưu trữ trong hệ thống máy chủ.
Kết quả: hệ thống sẽ đưa ra thơng tin có phải là sinh viên trường đại học kinh tế quốc dân hay không.
Lưu trữ: cuối cùng hệ thống sẽ lưu trữ danh sách sinh viên vào giảng đường A2.
Khi các bạn sinh viên di chuyển vào giảng đường A2 lọt vào tầm ngắm của camera quan sát, hệ thống sẽ tự động xác định vị trí khn mặt và thực hiện thuật tốn để trích dẫn các dữ liệu trên khn mặt. Trong quá trình di chuyển vào giảng đường A2 các bạn sinh viên sẽ giúp hệ thống dễ dàng nhận diện khuôn mặt hơn. Sau đây là sơ đồ về quy trình phân tích dữ liệu:
Hình 11: Quy trình phân tích của hệ thống.
Tóm lại, hệ thống sẽ phân tích 68 đặc điểm sinh trắc của một khuôn mặt như khoảng cách giữa 2 mắt, khoảng cách từ trán đến cằm, chiều dài, chiều rộng mặt,… tạo nên “chìa khóa” cho khn mặt các bạn sinh viên và lưu lại trong phần mềm hệ thống dưới dạng một thuật tốn. Mỗi khi có đối tượng, máy sẽ qt và phân tích dữ liệu
MẠNG KẾT NỐI VẠN VẬT HỆ THỐNG NHẬN DIỆN KHUÔN MẶT SINH VIÊN
xem khn mặt này có khớp với thuật tốn đã lưu hay chưa. Tồn quy trình được diễn ra trong vịng dưới 0.2 giây.
b) Quy Trình Vận Hành Hệ Thống Các Máy Chủ .
Hệ thống nhận diện khuôn mặt sinh viên trường Đại Học Kinh Tế Quốc Dân gồm máy chủ (máy chủ 1,máy chủ 2) được kết nối với Sever Chính.
Tại Sever Chính: cài đặt VMS(Sever) và dữ liệu ID khn mặt của sinh viên trường Đại Học Kinh Tế Quốc Dân.
Toàn bộ hệ thống đều được bao phủ Internet.
Hệ thống sử dụng các cáp quang (Fttp) để kết nối với các camera quan sát.
Hình 12: Sơ đồ vận hành hệ thống.
MẠNG KẾT NỐI VẠN VẬT HỆ THỐNG NHẬN DIỆN KHUÔN MẶT SINH VIÊN
CHƯƠNG 5: KẾT LUẬN
1) Những Kết Quả Đạt Được.
Kinh nghiệm rút ra cho bản thân: Q trình xây dựng hệ thống nhận diện khn mặt các bạn sinh viên trường Đại Học Kinh Tế Quốc Dân bằng Arduino giúp em có thêm hiểu biết về việc xây dựng một hệ thống , ứng dụng Internet of Things.
Kết quả đạt được của hệ thống:
Hệ thống hoạt động thành công đã tiết kiệm được rất nhiều thời gian các bạn sinh viên vào tòa nhà A2 học tập và tham gia các hoạt động ngoại khóa.
Ngăn ngừa được rất nhiều kẻ xấu đột nhập vào tòa nhà A2. Khắc phục hồn tồn tình hình học hộ, thi hộ.
2) Hướng Phát Triển Trong Tương Lai.
Hệ thống nhận diện khuôn mặt đang dần hoạt động rất tốt, tuy nhiên mức độ bảo mật thông tin của hệ thống chưa thực sự tốt nên trong thời gian tới em cần khắc phục lỗi này.
Hiện tại, hệ thống mới chỉ đi vào hoạt động tại giảng đường A2. Trong tương lai dự kiến em sẽ phát triển hệ thống rộng hơn tại các giảng đường còn lại và khu vực ký túc xá của trường.