Có nhiều hệ thống nhận dạng người sử dụng chữ ký, dấu vân tay, giọng nói, hình dạng bàn tay, nhận dạng khuôn mặt, v.v. để nhận dạng mọi người, nhưng không có hệ thống nhận dạng khuôn mặt.
Hệ thống nhận dạng khuôn mặt không chỉ có thể được sử dụng cho mục đích an ninh để nhận dạng mọi người ở nơi công cộng mà còn cho mục đích chấm công tại văn phòng và trường học.
Trong dự án này, chúng tôi sẽ xây dựng một hệ thống nhận dạng khuôn mặt sử dụng ESP32-CAM, cũng có thể được sử dụng như một hệ thống an ninh ESP32-CAM bằng cách nhận dạng khuôn mặt của một người không được phép. ESP32-CAM là một mô-đun camera rất nhỏ sử dụng chip ESP32-S. Sử dụng mô-đun ESP32-CAM, chúng tôi có thể xây dựng một hệ thống nhận dạng khuôn mặt mà không cần sử dụng bất kỳ chương trình phức tạp nào và bất kỳ thành phần bổ sung nào.


Mô-đun AI-Thinker ESP32-CAM có chip ESP32-S, camera OV2640 siêu nhỏ và khe cắm thẻ nhớ micro SD. Khe cắm thẻ nhớ Micro SD có thể được sử dụng để lưu trữ hình ảnh chụp từ camera hoặc lưu trữ tệp. Mô-đun ESP32-CAM có thể được sử dụng trong nhiều ứng dụng iot. Nó có thể được sử dụng như một hệ thống phát hiện khuôn mặt trong văn phòng, trường học và các khu vực riêng tư khác, cũng như để giám sát không dây, nhận dạng không dây mã QR và nhiều ứng dụng iot khác.
Các mô-đun ESP32-CAM có thể được lập trình bằng ESP-IDF hoặc Arduino IDE. Mô-đun ESP32-CAM cũng có một số chân GPIO để kết nối với phần cứng bên ngoài. ESP32-CAM không có đầu nối USB, vì vậy để lập trình mô-đun, bạn cần một bo mạch FTDI.


Đặc trưng:
Mô-đun SoC BT Wi-Fi 802.11b/g/n nhỏ nhất
CPU 32-bit công suất thấp cũng có thể phục vụ bộ xử lý ứng dụng
Tốc độ xung nhịp lên đến 160MHz, công suất tính toán tích hợp lên đến 600 DMIPS
Tích hợp 520 KB SRAM, bên ngoài 4MPSRAM
Hỗ trợ UART/SPI/I2C/PWM/ADC/DAC
Hỗ trợ camera OV2640 và OV7670 có đèn flash tích hợp
Hỗ trợ tải hình ảnh qua Wi-Fi
Hỗ trợ thẻ TF
Hỗ trợ nhiều chế độ ngủ
Lwip nhúng và FreeRTOS
Hỗ trợ chế độ hoạt động STA/AP/STA+AP
Công nghệ Smart Config/AirKiss được hỗ trợ
Hỗ trợ nâng cấp chương trình cơ sở cục bộ và từ xa qua cổng nối tiếp (FOTA)
Thông số kỹ thuật:
SPI flash: Mặc định là 32Mbit
Bộ nhớ: 520KB SRAM+4M PSRAM
Hỗ trợ thẻ TF: Tối đa 4G
Giao diện được hỗ trợ: UART, SPI, I2C, PWM
Định dạng đầu ra hình ảnh: JPEG, BMP, thang độ xám
Cổng IO: 9
Phạm vi cung cấp điện: 5V
Thành phần bắt buộc
ESP32-CAM
Lập trình viên FTDI
Sơ đồ mạch điện
Để chế tạo camera an ninh ESP32 CAM, chúng ta chỉ cần mô-đun camera ESP32 và bộ lập trình FTDI để lập trình.


ESP32-CAM không có đầu nối USB, vì vậy bạn cần một trình lập trình FTDI để tải mã lên ESP32-CAM, như thể hiện trong hình trên. Các chân Vcc và GND của ESP32 được kết nối với các chân Vcc và GND của bo mạch FTDI. Tx và Rx của ESP32 được kết nối với Rx và Tx của bo mạch FTDI.
Lưu ý: Ground IO0 trước khi tải mã. IO0 xác định ESP32 có ở chế độ nhấp nháy hay không. Khi GPIO 0 được kết nối với GND, ESP32 ở chế độ nhấp nháy.

Sau khi lập trình ESP32, tôi đã tháo bo mạch FTDI và kết nối mô-đun với nguồn điện 3,3V bằng bộ điều chỉnh 7805. Cài đặt cho luồng video cam ESP32 như sau:

Cài đặt bo mạch ESP32 trên Arduino IDE
Ở đây ESP32-CAM được lập trình bằng Arduino IDE. Để làm được điều này, chúng ta phải cài đặt plug-in ESP32 trên Arduino IDE.
Để cài đặt bo mạch ESP32 vào Arduino IDE của bạn, hãy vào Tùy chọn tệp


Bây giờ hãy sao chép liên kết sau và dán vào trường "Additional Board Manager URLs" như hiển thị bên dưới. Sau đó, nhấp vào nút OK:

Bây giờ đến Hội đồng quản trị công cụ, Giám đốc Hội đồng quản trị

Tìm kiếm ESP32 trong Board Manager và cài đặt "ESP32 của Espressif Systems".

Mã máy chủ web camera ESP32
Chúng tôi đã có một mã mẫu từ ESP32 cam video streaming và nhận dạng khuôn mặt. Mở ví dụ ESP32 bằng cách sử dụng "File" Examples "ESP32" Camera, sau đó mở ví dụ CameraWebServer.

Trước khi tải mã lên, bạn sẽ cần nhập tên Wi-Fi và mật khẩu.
const char* ssid = "Tên WiFi";
const char* Password = "Mật khẩu";
Sau đó định nghĩa mô-đun camera ESP. Trong mã, họ định nghĩa 5 mô-đun camera, vì vậy hãy bỏ chú thích "CAMERA_MODEL_AI_THINKER" và chú thích các mô-đun còn lại.
Bây giờ mã đã sẵn sàng để tải lên.
Để tải mã lên, hãy kết nối bo mạch FDTI với máy tính xách tay của bạn và chọn "ESP32 Wrover Module" làm bo mạch của bạn. Ngoài ra, hãy thay đổi các Cài đặt khác dựa trên hình ảnh này:

Trước khi tải mã lên, hãy nhấn nút đặt lại ESP32 rồi nhấp vào nút Tải lên.
Lưu ý: Nếu bạn gặp lỗi khi tải mã lên, hãy kiểm tra xem IO0 đã được kết nối với GND chưa và bạn đã chọn đúng cài đặt trong menu Công cụ chưa.
Ngắt kết nối chân IO0 và GND sau khi tải mã. Sau đó mở màn hình nối tiếp và thay đổi tốc độ baud thành 115200. Sau đó nhấn nút reset ESP32 và nó sẽ in địa chỉ IP ESP và số cổng trên màn hình nối tiếp như hình dưới đây.

Bây giờ để truy cập luồng camera, hãy điều hướng đến trình duyệt của bạn và nhập địa chỉ IP ESP của bạn. Nó sẽ đưa bạn đến trang phương tiện truyền phát. Để bắt đầu luồng video camera ESP32, hãy nhấp vào nút "Bắt đầu truyền phát" ở cuối trang

Bạn có thể thay đổi chất lượng phát trực tuyến bằng cách thay đổi "độ phân giải" trên trang phát trực tuyến. Bạn cũng có thể nhấp vào hình ảnh bằng cách nhấp vào nút "Get Still", nhưng mã này không có tùy chọn lưu hình ảnh.
Sau khi kiểm tra luồng video, bây giờ chúng ta sẽ kiểm tra chức năng phát hiện và nhận dạng khuôn mặt của camera ESP32. Bật chức năng nhận dạng và phát hiện khuôn mặt từ Cài đặt:


Để thực hiện nhận dạng khuôn mặt, trước tiên bạn cần đăng ký khuôn mặt của mình. Bạn có thể đăng ký khuôn mặt mới bằng cách nhấp vào tùy chọn "Đăng ký khuôn mặt". Phải mất nhiều lần thử để lưu khuôn mặt. Sau khi lưu khuôn mặt, nó sẽ phát hiện khuôn mặt là chủ thể 0, giờ đây có thể được sử dụng làm hệ thống an ninh bằng cách nhận dạng khuôn mặt.
Đây là cách mô-đun camera ESP có thể được cấu hình dễ dàng để phát trực tuyến video và nhận dạng khuôn mặt.
#bao gồm “esp_camera.h”
#bao gồm
// Cảnh báo!! Hãy đảm bảo bạn chọn mô-đun ESP32 Wrover,
// hoặc một bo mạch khác có PSRAM được kích hoạt
// Chọn một mẫu máy ảnh
//# xác định CAMERA_MODEL_WROVER_KIT
//# xác định CAMERA_MODEL_ESP_EYE
//# xác định CAMERA_MODEL_M5STACK_PSRAM
//# xác định CAMERA_MODEL_M5STACK_WIDE
# xác định CAMERA_MODEL_AI_THINKER
#bao gồm “camera_pins.h”
const char* ssid = "Galaxy-M20 ";
const char* Mật khẩu = "ac312124";
startCameraServer() không hợp lệ;
Cài đặt không hợp lệ () {
Số sê-ri. Bắt đầu (115200);
Serial.setDebugOutput(đúng);
Số sê-ri.println ();
cấu hình camera_config_t;
config. ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
cấu hình.pin_d0 = Y2_GPIO_NUM;
cấu hình.pin_d1 = Y3_GPIO_NUM;
cấu hình.pin_d2 = Y4_GPIO_NUM;
cấu hình.pin_d3 = Y5_GPIO_NUM;
cấu hình.pin_d4 = Y6_GPIO_NUM;
cấu hình.pin_d5 = Y7_GPIO_NUM;
cấu hình.pin_d6 = Y8_GPIO_NUM;
cấu hình.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
cấu hình.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
pin_href = HREF_GPIO_NUM; cấu hình.pin_href = href_gPIo_num;
pin_sscb_sda = SIOD_GPIO_NUM;
pin_sscb_scl = SIOC_GPIO_NUM;
cấu hình.pin_pwdn = PWDN_GPIO_NUM;
pin_reset = ĐẶT LẠI_GPIO_NUM;
cấu hình.xclk_freq_hz = 20000000;
cấu hình.pixel_format = PIXFORMAT_JPEG;
// Khởi tạo với thông số kỹ thuật cao để phân bổ trước các bộ đệm lớn hơn
Nếu (psramFound ()) {
config.frame_size = KÍCH THƯỚC KHUNG_UXGA;
config.jpeg_quality = 10;
cấu hình.fb_count = 2;
} khác {
config.frame_size = KÍCH THƯỚC KHUNG_SVGA;
config.jpeg_quality = 12;
config.fb_count = 1;
}
# Nếu được xác định (CAMERA_MODEL_ESP_EYE)
pinMode (13, INPUT_PULLUP);
pinMode(14, ĐẦU VÀO_KÉO);
# trong trường hợp
// Khởi tạo camera
esp_err_t lỗi = esp_camera_init(&config);
Nếu (sai! = ESP_OK) {
Serial.printf("Khởi tạo camera không thành công, lỗi 0x%x", err);
Mặt sau;
}
cảm biến_t * s = esp_camera_sensor_get();
// Cảm biến ban đầu được lật theo chiều dọc và màu sắc hơi bão hòa
nếu (s->id.PID == OV3660_PID) {
s->set_vflip(s, 1); // Lật ngược lại
s->set_brightness(s, 1); // Tăng nhẹ độ sáng
s->set_saturation(s, -2); // Giảm độ bão hòa
}
// Giảm kích thước khung hình để có tốc độ khung hình ban đầu cao hơn
s->set_framesize(s, KÍCH THƯỚC KHUNG HÌNH_QVGA);
# Nếu được xác định (CAMERA_MODEL_M5STACK_WIDE)
s->set_vflip(s, 1);
s->set_hmirror(s, 1);
# trong trường hợp
WiFi.begin(ssid, mật khẩu);
Và (WiFi.status ()! = WL_CONNECTED) {
Trì hoãn (500);
Serial.print(".");
}
Số sê-ri.println ("");
Serial.println("Kết nối WiFi ");
startCameraServer();
Serial.print("Máy ảnh đã sẵn sàng! Sử dụng 'http://");
Serial.print(WiFi.localIP());
Serial.println("' để kết nối ");
}
Vòng lặp không hợp lệ () {
// Đặt mã chính của bạn ở đây và lặp lại:
Trì hoãn (10000);
