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

九款顶级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: 自动添加约束、更改(删除)表名和字段、删除表
目录 自动添加表的属性: 向表内插入数据: 查看表中的数据: 查看表结构: 查看表的详细结构: 更改表名和字段: 更改表名: 更改字段数据类型: 修改字段名: 添加字段…...

基于微博评论的细粒度的虚假信息识别软件
任务 目标:能检测单模态的虚假信息就可以,是个软件就可以 参考文章:基于多模态深度融合的虚假信息检测 Multi-modal deep fusion for false information detection 思路 多模态指的是多种不同类型的数据,比如图像、文本、音频等。虚假信息识别软件可以从这些不同类型的数据…...

Android 11.0 系统systemui状态栏下拉左滑显示通知栏右滑显示控制中心模块的流程分析
1.前言 在android11.0的系统rom定制化开发中,在系统原生systemui进行自定义下拉状态栏布局的定制的时候,需要在systemui下拉状态栏下滑的时候,根据下滑坐标来 判断当前是滑出通知栏还是滑出控制中心模块,所以就需要根据屏幕宽度,来区分x坐标值为多少是左滑出通知栏或者右…...

ROS学习第三十二节——xacro构建激光雷达小车
https://download.csdn.net/download/qq_45685327/87718396 在前面小车底盘基础之上,添加摄像头和雷达传感器。 0.底盘实现 deamo02_base.xacro <!--使用 xacro 优化 URDF 版的小车底盘实现:实现思路:1.将一些常量、变量封装为 xacro:property比如…...

中厂,面试就问了4道题,凉了!
你好,我是田哥 所谓的金三银四,已变成铜三铁四了。很多人基本上莫有面试机会,更可惜的是机会有了,却没有把握住。 加入我知识星球:免费做简历优化、简历包装、模拟面试... 今天早上,一个朋友和我说面试中被…...

22.轮播模块
学习要点: 1.轮播模块 本节课我们来开始了解 Layui 的内置模块:轮播模块。 一.轮播模块 1. 轮播模块,即跑马灯等轮播交互场景,先来看下基本设置; <div id"test" class"layui-carousel&qu…...

MYSQL命令小总结
一、创建查看 1.输入cmd,打开控制器,输入如下,打开MYSQL C:\Users\ASUS> mysql -u root -p 2.查看已有数据库 mysql> show databases; 3.建立数据库 4.使用数据库 use englishword;5.建立表单 CREATE TABLE user ( id INT primar…...

Java常见开发工具和Object类
Java是一种面向对象的编程语言,被广泛应用于各种应用程序和软件开发中。在Java开发过程中,使用一个好的开发工具可以大大提高开发效率和代码质量。Eclipse是一个功能强大、灵活易用的Java集成开发环境(IDE),被广泛使用…...

Linux 配置YUM源(FTP方式获取软件源、使用阿里云yum源、同时使用本地源与在线源)YUM获取安装包并生成YUM软件仓库
YUM介绍 YUM(yellow dog updater modified) 基于RPM包构建的软件更新机制 自动解决依赖关系 yum软件仓库集中管理软件包 RPM软件包的来源 centos发布的RPM包集合第三方组织发布的RPM包集合用户自定义的RPM包集合 软件仓库的提供方式 FTP服务:…...

Java版工程行业管理系统源码-专业的工程管理软件-提供一站式服务
Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显示…...

养老保障金查询系统【GUI/Swing+MySQL】(Java课设)
系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址:https://download.csdn.net/download/qq_50954361/87700421 更多系统资源库…...