当前位置: 首页 > news >正文

如何使用ESP32-CAM构建一个人脸识别系统

有许多人识别系统使用签名、指纹、语音、手部几何、人脸识别等来识别人,但除了人脸识别系统。

  人脸识别系统不仅可以用于安全目的来识别公共场所的人员,还可以用于办公室和学校的考勤目的。

  在这个项目中,我们将使用 ESP32-CAM 构建一个人脸识别系统,该系统还可以通过识别未经授权的人的面部来作为 ESP32-CAM 安全系统。ESP32-CAM 是一款非常小的摄像头模组,采用 ESP32-S 芯片。使用 ESP32-CAM 模块,我们可以构建一个人脸识别系统,而无需使用任何复杂的编程和任何额外的组件。

  ESP32-CAM简介

  AI-Thinker ESP32-CAM 模组配备 ESP32-S 芯片、超小尺寸 OV2640 摄像头和 micro SD 卡插槽。Micro SD 卡插槽可用于存储从相机拍摄的图像或存储文件。这款 ESP32-CAM 模块可广泛用于各种物联网应用。它可以用作办公室、学校和其他私人区域的人脸检测系统,也可以用作无线监控、二维码无线识别和许多其他物联网应用。

  ESP32 -CAM模块可以使用 ESP-IDF 或Arduino IDE进行编程。ESP32-CAM 模块也有几个 GPIO 引脚用于连接外部硬件。ESP32-CAM 没有 USB 连接器,因此要对模块进行编程,您需要一个 FTDI 板。

  特征:

  最小的 802.11b/g/n Wi-Fi BT SoC 模块

  低功耗32位CPU,也可服务于应用处理器

  高达 160MHz 时钟速度,综合计算能力高达 600 DMIPS

  内置 520 KB SRAM,外置 4MPSRAM

  支持UART/SPI/I2C/PWM/ADC/DAC

  支持OV2640和OV7670相机,内置闪光灯

  支持图片Wi-Fi上传

  支持TF卡

  支持多种睡眠模式

  嵌入式 Lwip 和 FreeRTOS

  支持STA/AP/STA+AP操作模式

  支持 Smart Config/AirKiss 技术

  支持串口本地和远程固件升级(FOTA)

  规格:

  SPI 闪存:默认 32Mbit

  内存:520KB SRAM+4M PSRAM

  支持TF卡:最大。4G

  支持接口:UART、SPI、I2C、PWM

  图像输出格式:JPEG、BMP、灰度

  IO端口:9

  供电范围:5V

  所需组件

  ESP32-CAM

  FTDI 程序员

  电路原理图

  要构建ESP32 CAM 安全摄像头,我们只需要 ESP32 摄像头模块和 FTDI 编程器对其进行编程。

  ESP32-CAM 没有 USB 连接器,因此您需要 FTDI 编程器将代码上传到 ESP32-CAM,如上图所示。ESP32 的 Vcc 和 GND 引脚与 FTDI 板的 Vcc 和 GND 引脚相连。ESP32 的 Tx 和 Rx 与 FTDI 板的 Rx 和 Tx 相连。

  注意:在上传代码之前,将 IO0 接地。IO0 决定 ESP32 是否处于闪烁模式。当 GPIO 0 连接到 GND 时,ESP32 处于闪烁模式。

  对 ESP32 进行编程后,我卸下了 FTDI 板,并使用 7805 稳压器将模块连接到 3.3V 电源。ESP32 cam 视频流的设置如下所示:

  在 Arduino IDE 上安装 ESP32 Board

  这里 ESP32-CAM 是使用 Arduino IDE 编程的。为此,我们必须在 Arduino IDE 上安装 ESP32 插件。

  要在您的 Arduino IDE 中安装 ESP32 板,请转到File》 Preferences

  现在复制下面的链接并将其粘贴到“ Additional Board Manager URLs ”字段中,如下图所示。然后,单击“确定”按钮:

  现在转到工具》董事会》董事会经理

  在 Board Manager 中搜索 ESP32 并安装“ESP32 by Espressif Systems”。

  ESP32 摄像头网络服务器代码

  我们已经有一个来自ESP32 cam 视频流和人脸识别的示例代码。使用File 》 Examples 》 ESP32 》 Camera打开 ESP32 示例,然后打开 CameraWebServer 示例。

  在上传代码之前,您需要输入您的 Wi-Fi 名称和密码。

  const char* ssid = “WiFi 名称”;

  const char* 密码 = “密码”;

  之后定义ESP 摄像头模块。在代码中,他们定义了 5 个摄像头模块,因此取消注释“CAMERA_MODEL_AI_THINKER”并注释其余模块。

  现在代码已准备好上传。

  要上传代码,请将 FDTI 板连接到您的笔记本电脑并选择“ ESP32 Wrover Module ”作为您的板。另外,根据此图片更改其他设置:

  在上传代码之前,按下 ESP32 重置按钮,然后点击上传按钮。

  注意:如果您在上传代码时遇到错误,请检查 IO0 是否连接到 GND,并且您在工具菜单中选择了正确的设置。

  上传代码后断开 IO0 和 GND 引脚。然后打开串口监视器并将波特率更改为 115200。然后按下 ESP32 重置按钮,它将在串口监视器上打印 ESP IP 地址和端口号,如下所示。

  现在要访问摄像机流,导航到您的浏览器并输入您的 ESP IP 地址。它将带您到流媒体页面。要启动 ESP32 cam 视频流,请单击页面底部的“开始流”按钮

  您可以通过更改流媒体页面上的“分辨率”来更改流媒体质量。您也可以通过单击“获取静止”按钮单击图片,但此代码没有保存图片的选项。

  在测试视频流之后,现在我们将测试ESP32 cam 人脸检测和识别功能。从设置中打开人脸识别和检测功能:

  首先要进行人脸识别,您需要注册人脸。您可以通过单击“注册面孔”选项注册新面孔。需要多次尝试才能保住面子。保存人脸后,它会将人脸检测为主题 0,现在可以通过识别人脸将其用作安全系统。

  因此,这就是 ESP 摄像头模块可以轻松配置用于视频流和面部识别的方式。

#include “esp_camera.h”


#include





// 警告!!!确保您选择了 ESP32 Wrover 模块,


// 或另一个启用了 PSRAM 的板





// 选择相机型号


//#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();





无效设置(){


序列号.开始(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;


//用高规格初始化以预分配更大的缓冲区


如果(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);


#万一





// 相机初始化


esp_err_t err = esp_camera_init(&config);


如果(错误!= ESP_OK){


Serial.printf("相机初始化失败,错误 0x%x", err);


返回;


}





sensor_t * s = esp_camera_sensor_get();


//初始传感器垂直翻转,颜色有点饱和


if (s->id.PID == OV3660_PID) {


s->set_vflip(s, 1);//翻转回来


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("相机准备好了!使用'http://");


Serial.print(WiFi.localIP());


Serial.println("'要连接");


}





无效循环(){


// 把你的主要代码放在这里,重复运行:


延迟(10000);


}

相关文章:

如何使用ESP32-CAM构建一个人脸识别系统

有许多人识别系统使用签名、指纹、语音、手部几何、人脸识别等来识别人,但除了人脸识别系统。 人脸识别系统不仅可以用于安全目的来识别公共场所的人员,还可以用于办公室和学校的考勤目的。 在这个项目中,我们将使用 ESP32-CAM 构建一个人脸识…...

JavaWeb分页条件查询参数特殊字符处理

问题背景 在项目开发过程中,基本都会有列表条件查询,例如用户管理会有通过用户姓名模糊查询用户,课程管理会有课程名称模糊查询课程等等。 而查询过程中如果用户在界面上输入一些特殊字符,例如:%_等等,这…...

ubuntu18服务安装

一、JDK安装 将jdk解压缩到该目录 /opt/ sudo tar -zxvf jdk-8u261-linux-x64.tar.gz -C /opt/ #重命名 cd /opt sudo mv jdk-8u261-linux-x64 jdk_8 修改环境变量 sudo vi ~/.bashrc #在文件最后追加以下文本 #进入编辑器后输入以下指令: #1. G //将光标移到最后一…...

这些使用工具大推荐,现在知道不晚

1.Snip Snip是一款截图软件,它突出的优点就是可以制作滚动截图。 例如:对整个网页进行截图,使用Snip即可轻松获取,无需处理水印。 2.Sleep Cycle 快节奏、高压力的生活导致我们越来越晚睡觉,睡眠质量越来越差。 想提…...

【Java|golang】1048. 最长字符串链

给出一个单词数组 words ,其中每个单词都由小写英文字母组成。 如果我们可以 不改变其他字符的顺序 ,在 wordA 的任何地方添加 恰好一个 字母使其变成 wordB ,那么我们认为 wordA 是 wordB 的 前身 。 例如,“abc” 是 “abac”…...

Hive基础和使用详解

文章目录 一、启动hive1. hive启动的前置条件2. 启动方式一: hive命令3. 方式二:使用jdbc连接hive 二、Hive常用交互命令1. hive -help 命令2. hive -e 命令3. hive -f 命令4. 退出hive窗口5. 在hive窗口中执行dfs -ls /; 三、Hive语法1.DDL语句1.1 创建数据库1.2 两…...

c/c++:栈帧,传值,传址,实参传值给形参,传地址指针给形参

c/c:栈帧,传值,传址,实参传值给形参,传地址指针给形参 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c的话, 我所知道的周边的会c的同学&…...

玩元宇宙血亏后 蓝色光标梭哈AI也挺悬

蓝色光标2022年年度报告出炉,巨亏21.75 亿元,其中20.38亿亏损因商誉、无形资产及其他资产减值造成,而在实际亏损业务中,元宇宙占比不小。 蓝色光标在元宇宙领域的布局,主要通过三家子公司实施,分别为蓝色宇…...

生物---英文

标题 前言必学场景词汇及用法鸟类昆虫类哺乳类爬行类情境常用单词鸟类虫类哺乳类两栖类与爬行类分类与动物相关的习语前言 加油 必学场景词汇及用法 鸟类 1bird [b[插图]d] n.鸟bird’s-eye-view[ˈb[插图]dzaɪˌvju]adj.鸟瞰图的a bird’s-eye view鸟瞰a flock of bird…...

ENVI 国产高分2号(GF-2)卫星数据辐射定标 大气校正 影像融合

1.数据 高分2号卫星数据,包含: MSS-1\2多光谱数据,4m分辨率; Pan-1\2全色波段数据,0.8m分辨率。 2.处理软件 ENVI5.3 国产插件下载地址:ENVI App Store (geoscene.cn) 首先下载插件文件; …...

操作系统考试复习——第二章 进程控制 同步与互斥

进程控制一般是由OS中的原语来实现的。 大多数OS内核都包含了两大方面的功能: 1.支撑功能:1)中断处理 2)时钟管理 3)原语操作(原语操作就是原子操作。所谓原子操作就是一个操作中所有动作要不全做要不全不做) 2.资源管理功能:1)进程管理…...

mac gitstats查看git提交记录

一、介绍: 进一步来讲,Gitstats它是一个git仓库分析软件,它可以检查仓库并生成历史数据的统计信息。可以帮助你查看git仓库的提交状态,根据不同维度分析计算,并自动生成数据图表。 官网介绍:http://gitst…...

电脑系统错误怎么办?您可以看看这5个方法!

案例:电脑出现系统错误该如何解决? 【这几天长时间使用我的电脑,导致它的系统出现了错误。有没有小伙伴知道如何解决电脑系统出错的问题?求一个能快速解决的方法。】 电脑系统出现错误是使用电脑时难免会遇到的问题之一&#xf…...

九款顶级AI工具推荐

ChatGPT OpenAI开发的最强对话系统 地址:chat.openai.com ChatGPT能够在同一个会话期间内回答上下文相关的后续问题。其在短时间内引爆全球的原因在于,在网友们晒出的截图中,ChatGPT不仅能流畅地与用户对话,甚至能写诗、撰文、编…...

StringRedisTemplate-基本使用

StringRedisTemplate继承自RedisTemplate,在这里说明一下,当我们使用RedisTemplate往redis中存储java对象的时候,他会顺带着将该java对象的字节码文件也同时存进了内存中,这是为了实现自动反序列化Autowired private StringRedisTemplate red…...

ansible自动运维——ansible使用临时命令通过模块来执行任务

大家好,这里是天亮之前ict,本人网络工程大三在读小学生,拥有锐捷的ie和红帽的ce认证。每天更新一个linux进阶的小知识,希望能提高自己的技术的同时,也可以帮助到大家 另外其它专栏请关注: 锐捷数通实验&…...

python 之数据类型(四)

1、字符串(String) 使用双引号或者单引号中的数据,就是字符串 注:python中使用三引号时允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其它特殊符号 a a c g print(a)运行结果: a c g1、下标 …...

洛谷P1345 无向图最小割点数

题意: 给出一副有 n n n个点, m m m条边的无向图,求出这副图的最小割点数 题意: 首先对于有向图,求他的最小割边,只需要令每条边的容量为 1 1 1,求出起点到终点的最大流就是最小割边数了。 容…...

适合程序员阅读的有用书籍:

几本适合程序员阅读的有用书籍: 1.《计算机程序设计艺术》(The Art of Computer Programming)是由Donald E. Knuth撰写的一系列著作,是计算机科学领域的经典之作。该系列著作共分为三卷,分别介绍了算法和计算机程序设计的基础知识和技巧。 …...

MySQL: 自动添加约束、更改(删除)表名和字段、删除表

目录 自动添加表的属性: 向表内插入数据: 查看表中的数据: 查看表结构: 查看表的详细结构: 更改表名和字段: 更改表名: 更改字段数据类型: 修改字段名: 添加字段…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦&#xff0…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...

spring Security对RBAC及其ABAC的支持使用

RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...