有許多人識別系統(tǒng)使用簽名、指紋、語音、手部幾何、人臉識別等來識別人,但除了人臉識別系統(tǒng)。
人臉識別系統(tǒng)不僅可以用于安全目的來識別公共場所的人員,還可以用于辦公室和學(xué)校的考勤目的。
在這個(gè)項(xiàng)目中,我們將使用 ESP32-CAM 構(gòu)建一個(gè)人臉識別系統(tǒng),該系統(tǒng)還可以通過識別未經(jīng)授權(quán)的人的面部來作為 ESP32-CAM 安全系統(tǒng)。ESP32-CAM 是一款非常小的攝像頭模組,采用 ESP32-S 芯片。使用 ESP32-CAM 模塊,我們可以構(gòu)建一個(gè)人臉識別系統(tǒng),而無需使用任何復(fù)雜的編程和任何額外的組件。
ESP32-CAM簡介
AI-Thinker ESP32-CAM 模組配備 ESP32-S 芯片、超小尺寸 OV2640 攝像頭和 micro SD 卡插槽。Micro SD 卡插槽可用于存儲(chǔ)從相機(jī)拍攝的圖像或存儲(chǔ)文件。這款 ESP32-CAM 模塊可廣泛用于各種物聯(lián)網(wǎng)應(yīng)用。它可以用作辦公室、學(xué)校和其他私人區(qū)域的人臉檢測系統(tǒng),也可以用作無線監(jiān)控、二維碼無線識別和許多其他物聯(lián)網(wǎng)應(yīng)用。
ESP32 -CAM模塊可以使用 ESP-IDF 或Arduino IDE進(jìn)行編程。ESP32-CAM 模塊也有幾個(gè) GPIO 引腳用于連接外部硬件。ESP32-CAM 沒有 USB 連接器,因此要對模塊進(jìn)行編程,您需要一個(gè) FTDI 板。
特征:
最小的 802.11b/g/n Wi-Fi BT SoC 模塊
低功耗32位CPU,也可服務(wù)于應(yīng)用處理器
高達(dá) 160MHz 時(shí)鐘速度,綜合計(jì)算能力高達(dá) 600 DMIPS
內(nèi)置 520 KB SRAM,外置 4MPSRAM
支持OV2640和OV7670相機(jī),內(nèi)置閃光燈
支持圖片Wi-Fi上傳
支持TF卡
支持多種睡眠模式
支持STA/AP/STA+AP操作模式
支持 Smart Config/AirKiss 技術(shù)
支持串口本地和遠(yuǎn)程固件升級(FOTA)
SPI 閃存:默認(rèn) 32Mbit
內(nèi)存:520KB SRAM+4M PSRAM
支持TF卡:最大。4G
支持接口:UART、SPI、I2C、PWM
圖像輸出格式:JPEG、BMP、灰度
IO端口:9
供電范圍:5V
所需組件
ESP32-CAM
FTDI 程序員
電路原理圖
要構(gòu)建ESP32 CAM 安全攝像頭,我們只需要 ESP32 攝像頭模塊和 FTDI 編程器對其進(jìn)行編程。
ESP32-CAM 沒有 USB 連接器,因此您需要 FTDI 編程器將代碼上傳到 ESP32-CAM,如上圖所示。ESP32 的 Vcc 和 GND 引腳與 FTDI 板的 Vcc 和 GND 引腳相連。ESP32 的 Tx 和 Rx 與 FTDI 板的 Rx 和 Tx 相連。
注意:在上傳代碼之前,將 IO0 接地。IO0 決定 ESP32 是否處于閃爍模式。當(dāng) GPIO 0 連接到 GND 時(shí),ESP32 處于閃爍模式。
對 ESP32 進(jìn)行編程后,我卸下了 FTDI 板,并使用 7805 穩(wěn)壓器將模塊連接到 3.3V 電源。ESP32 cam 視頻流的設(shè)置如下所示:
在 Arduino IDE 上安裝 ESP32 Board
這里 ESP32-CAM 是使用 Arduino IDE 編程的。為此,我們必須在 Arduino IDE 上安裝 ESP32 插件。
要在您的 Arduino IDE 中安裝 ESP32 板,請轉(zhuǎn)到File》 Preferences
現(xiàn)在復(fù)制下面的鏈接并將其粘貼到“ Additional Board Manager URLs ”字段中,如下圖所示。然后,單擊“確定”按鈕:
現(xiàn)在轉(zhuǎn)到工具》董事會(huì)》董事會(huì)經(jīng)理
在 Board Manager 中搜索 ESP32 并安裝“ESP32 by Espressif Systems”。
ESP32 攝像頭網(wǎng)絡(luò)服務(wù)器代碼
我們已經(jīng)有一個(gè)來自ESP32 cam 視頻流和人臉識別的示例代碼。使用File 》 Examples 》 ESP32 》 Camera打開 ESP32 示例,然后打開 CameraWebServer 示例。
在上傳代碼之前,您需要輸入您的 Wi-Fi 名稱和密碼。
const char* ssid = “WiFi 名稱”;
const char* 密碼 = “密碼”;
之后定義ESP 攝像頭模塊。在代碼中,他們定義了 5 個(gè)攝像頭模塊,因此取消注釋“CAMERA_MODEL_AI_THINKER”并注釋其余模塊。
現(xiàn)在代碼已準(zhǔn)備好上傳。
要上傳代碼,請將 FDTI 板連接到您的筆記本電腦并選擇“ ESP32 Wrover Module ”作為您的板。另外,根據(jù)此圖片更改其他設(shè)置:
在上傳代碼之前,按下 ESP32 重置按鈕,然后點(diǎn)擊上傳按鈕。
注意:如果您在上傳代碼時(shí)遇到錯(cuò)誤,請檢查 IO0 是否連接到 GND,并且您在工具菜單中選擇了正確的設(shè)置。
上傳代碼后斷開 IO0 和 GND 引腳。然后打開串口監(jiān)視器并將波特率更改為 115200。然后按下 ESP32 重置按鈕,它將在串口監(jiān)視器上打印 ESP IP 地址和端口號,如下所示。
現(xiàn)在要訪問攝像機(jī)流,導(dǎo)航到您的瀏覽器并輸入您的 ESP IP 地址。它將帶您到流媒體頁面。要啟動(dòng) ESP32 cam 視頻流,請單擊頁面底部的“開始流”按鈕
您可以通過更改流媒體頁面上的“分辨率”來更改流媒體質(zhì)量。您也可以通過單擊“獲取靜止”按鈕單擊圖片,但此代碼沒有保存圖片的選項(xiàng)。
在測試視頻流之后,現(xiàn)在我們將測試ESP32 cam 人臉檢測和識別功能。從設(shè)置中打開人臉識別和檢測功能:
首先要進(jìn)行人臉識別,您需要注冊人臉。您可以通過單擊“注冊面孔”選項(xiàng)注冊新面孔。需要多次嘗試才能保住面子。保存人臉后,它會(huì)將人臉檢測為主題 0,現(xiàn)在可以通過識別人臉將其用作安全系統(tǒng)。
因此,這就是 ESP 攝像頭模塊可以輕松配置用于視頻流和面部識別的方式。
#include “esp_camera.h”
#include
// 警告!!!確保您選擇了 ESP32 Wrover 模塊,
// 或另一個(gè)啟用了 PSRAM 的板
// 選擇相機(jī)型號
//#define CAMERA_MODEL_WROVER_KIT
//#define CAMERA_MODEL_ESP_EYE
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE
#define CAMERA_MODEL_AI_THINKER
#include “camera_pins.h”
const char* ssid = "銀河-M20";
const char* 密碼 = "ac312124";
無效 startCameraServer();
無效設(shè)置(){
序列號.開始(115200);
Serial.setDebugOutput(true);
序列號.println();
camera_config_t 配置;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sscb_sda = SIOD_GPIO_NUM;
config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;
//用高規(guī)格初始化以預(yù)分配更大的緩沖區(qū)
如果(psramFound()){
config.frame_size = FRAMESIZE_UXGA;
config.jpeg_quality = 10;
config.fb_count = 2;
} 別的 {
config.frame_size = FRAMESIZE_SVGA;
config.jpeg_quality = 12;
config.fb_count = 1;
}
#如果定義(CAMERA_MODEL_ESP_EYE)
pinMode(13,INPUT_PULLUP);
pinMode(14, INPUT_PULLUP);
#萬一
// 相機(jī)初始化
esp_err_t err = esp_camera_init(&config);
如果(錯(cuò)誤!= ESP_OK){
Serial.printf("相機(jī)初始化失敗,錯(cuò)誤 0x%x", err);
返回;
}
sensor_t * s = esp_camera_sensor_get();
//初始傳感器垂直翻轉(zhuǎn),顏色有點(diǎn)飽和
if (s->id.PID == OV3660_PID) {
s->set_vflip(s, 1);//翻轉(zhuǎn)回來
s->set_brightness(s, 1);//稍微提高亮度
s->set_saturation(s, -2);//降低飽和度
}
//降低幀大小以獲得更高的初始幀速率
s->set_framesize(s, FRAMESIZE_QVGA);
#如果定義(CAMERA_MODEL_M5STACK_WIDE)
s->set_vflip(s, 1);
s->set_hmirror(s, 1);
#萬一
WiFi.begin(ssid, 密碼);
而(WiFi.status()!= WL_CONNECTED){
延遲(500);
Serial.print(".");
}
序列號.println("");
Serial.println("WiFi 連接");
startCameraServer();
Serial.print("相機(jī)準(zhǔn)備好了!使用'http://");
Serial.print(WiFi.localIP());
Serial.println("'要連接");
}
無效循環(huán)(){
// 把你的主要代碼放在這里,重復(fù)運(yùn)行:
延遲(10000);
}
?
評論
查看更多