ESP32 / ESP32S3与OV2640 / OV5640摄像头的应用程序,可将JPEG图像记录到SD卡上的AVI文件中,并以MJPEG流的形式回放到浏览器。AVI格式允许录像以正确的帧率在媒体播放器上播放。如果安装了麦克风,还会创建WAV文件并存储在AVI文件中。
该应用程序支持:
ESP32无法支持所有功能,因为它会耗尽堆空间。为了获得更好的功能和性能,请使用新的ESP32S3摄像头板之一,例如Freenove ESP32S3 Cam、ESP32S3 XIAO Sense。
这是一个复杂的应用程序,一些用户在应用程序报告警告时提出问题,但这是应用程序通知用户他们的设置存在问题,只有用户才能解决。请注意,一些克隆板的规格与原版不同,例如PSRAM大小。请只针对实际错误(ERR消息、未处理的库错误或崩溃)提出问题,或建议改进或增强功能。谢谢。
版本9.9.3的变更:
该应用程序可以进行运动检测或延时录像。应用示例包括安全摄像头、野生动物监 测、火箭飞行监测、FPV车辆控制。Max Imagination的这个教程展示了如何使用该代码的早期版本构建WiFi安全摄像头,以及后续关于如何安装和使用该应用程序的视频。
将一组JPEG保存为单个文件比保存为单独文件更快,也更易于管理,特别是对于小图像尺寸。实际速率取决于SD卡的质量和大小以及图像的复杂度和质量。一个标称为Class 6的无名4GB SDHC卡比真正的Sandisk 4GB SDHC Class 2卡慢3倍。以下录制速率是在AI Thinker OV2640板上使用新格式化的Sandisk 4GB SDHC Class 2卡,设置为最高JPEG质量和最高时钟速率下实现的。
[录制速率表格]
ESP32S3(使用搭载ESP32S3 N8R8模块的Freenove ESP32S3 Cam板)运行该应用程序的速度约为ESP32的两倍,主要是由于PSRAM速度更快。除UXGA(最大10fps)外,它可以以OV2640的最大帧率录制所有帧大小,包括音频。
ESP32 Cam模块有4MB的PSRAM(ESP32S3上为8MB),用于缓冲摄像头帧和构建AVI文件,以最小化SD文件写入次数,并通过与SD卡扇区大小对齐来优化写入。回放时,AVI从SD读入多个扇区大小的缓冲区,并作为定时的单个帧发送到浏览器。SD卡使用MMC 1线模式,因为这几乎与MMC 4线模式一样快,并释放了引脚4(连接到板载灯)和引脚12,后者可用于例如PIR。
AVI文件使用日期时间格式YYYYMMDD_HHMMSS命名,并添加帧大小、FPS录制速率、持续时间(秒),例如20200130_201015_VGA_15_60.avi,存储在每日文件夹YYYYMMDD中。如果包含音频,文件名以_S结尾。如果有遥测数据,文件名以_M结尾。 ESP32时间从NTP服务器或连接的浏览器客户端设置。
将github文件下载到Arduino IDE草图文件夹,去掉应用程序文件夹名称中的-master
。
如果使用arduino core v3.x编译,请至少使用v3.0.3,其中包含网络修复。
除非使用默认设置之一,否则使用appGlobals.h
中的CAMERA_MODEL_
选择所需的ESP-CAM板:
CAMERA_MODEL_AI_THINKER
CAMERA_MODEL_ESP32S3_EYE
选择ESP32或ESP32S3 Dev Module板,并启用PSRAM编译,使用以下分区方案:
Minimal SPIFFS (...)
8M with spiffs (...)
注意:如果遇到编译错误,需要使用Boards Manager在IDE中更新arduino-esp32
核心库到最新的v2.x或v3.x版本
注意:如果遇到错误:Startup Failure: Check SD card inserted
或Camera init error 0x105
,通常是摄像头板选择问题
注意:如果遇到错误:Camera init error 0xffffffff
,是因为一些摄像头板只有2MB PSRAM,不足以运行此应用程序。
首次安装时,应用程序将以WiFi AP模式启动 - 连接到SSID:ESP-CAM_MJPEG_...,以允许通过192.168.4.1
上的网页输入路由器和密码详细信息。配置数据文件(除密码外)将自动创建,当有互联网连接时,应用程序网页将自动从GitHub下载到SD卡的**/data**文件夹。
后续对应用程序或**/data文件夹文件的更新可以使用OTA Upload选项卡进行。也可以使用Edit Config选项卡上的Reload /data按钮或使用WebDAV客户端从GitHub重新加载/data**文件夹。 @ldijkman 描述了一种替代安装过程,详见此处。
浏览器功能仅在 Chrome 上进行了全面测试。
录像可以通过摄像头自身 检测到的动作触发,或者通过将特定引脚保持高电平(松开时由内部下拉电阻保持低电平)来触发,例如使用有源高电平的运动传感器,如 PIR 或 RCWL-0516 微波雷达。 此外,还可以使用网页上的开始录像按钮手动请求录像。
要回放录像,使用回放和文件传输侧边栏按钮选择日期文件夹,然后选择所需的 AVI 文件。 选择 AVI 文件后,按开始回放按钮回放录像。 开始串流按钮只显示摄像头的实时视频流。
然后可以将录像上传到 FTP 或 HTTPS 服务器,或下载到浏览器中,在媒体应用程序(如 VLC)中回放。
还提供了延时摄影功能,可以与动作捕捉同时进行。延时文件的格式为 20200130_201015_VGA_15_60_T.avi
可以通过使用主网页动态修改应用程序的操作,大部分应该是不言自明的。
连接:
http://[主机名]
而不是 IP 地址。要更改录像参数:
分辨率
是每帧的像素大小帧率
是所需的每秒帧数质量
是 JPEG 压缩的级别,影响图像大小。SD 存储管理:
通过网页查看应用程序日志,使用显示日志选项卡显示:
通过编辑配置选项卡访问更多配置详情,该选项卡显示以下按钮:
WiFi: 其他 WiFi 和网络服务器设置。
运动: 参见摄像头运动检测部分。
外围设备,例如:
请注意,ESP32 摄像头模块上没有足够的空闲引脚来允许使用所有外部传感器。可以使用的引脚(有一些限制)是:3、4、12、13、33。
还可以使用 ESP32-IO_Extender 存储库。
ESP32S3 Freenove 板可以通过其空闲引脚支持上述所有外围设备。 ESP32S3 XIAO Sense 板的空闲引脚较少,但比 ESP32 多。
板载 LED:
其他: SD、电子邮件、电报等管理。
当启用或禁用某个功能时,应使用保存按钮使更改永久生效,并使用重启 ESP按钮重启 ESP。
可以通过摄像头自身使用 motionDetect.cpp
文件检测运动来生成 AVI 录像。
从摄像头获取任意大小的 JPEG 图像,并对 N 张图像中的 1 张进行实时采样,将其解码为非常小的灰度位图图像,与前一个样本进行比较以检测运动。小尺寸提供平滑处理以去除伪影并减少处理时间。
对于运动检测,使用 1/2 的高采样率。当检测到运动时,检查运动停止的频率降低到 1/10,以便可以以较小的开销捕获 JPEG。检测时间毫秒表显示了从 OV2640 摄像头检索帧并进行解码和分析的典型时间(以毫秒为单位)。
默认启用摄像头运动检测,要禁用请在运动检测和录像侧边栏按钮中取消勾选启用运动检测。
<img align=right src="https://yellow-cdn.veclightyear.com/0a4dffa0/5007cc4f-a89b-4453-a740-8b318456e76e.png" width="200" height="200">摄像头索引页面提供了其他选项,其中:
运动灵敏度
设置运动检测的阈值,越高越敏感。显示运动
如果启用并按下开始串流按钮,将显示运动检测的图像以进行校准。显示灰度图像,红色像素表示运动。最小帧数
是要捕获的最小帧数,如果少于此数量,文件将被删除。ESP32 和 ESP32S3 都支持 I2S 麦克风,如 INMP441。PDM 麦克风(如 MP34DT01)仅在 ESP32S3 上支持。音频录制在 ESP32S3 上运行良好,但在 ESP32 上不可行,因为它会显著降低帧率。
音频格式为 16 位单声道 PCM,采样率为 16kHz。I2S 麦克风需要 3 个空闲引脚,PDM 麦克风需要 2 个空闲引脚(I2S SCK 引脚必须设置为 -1)。引脚值(XIAO Sense 预定义)和使用麦克风选择器在配置网页的外围设备按钮下设置。
网页上有一个麦克风增益滑块。值越高,增益越高。选择0取消麦克风。
OV5640 的引脚排列与为 OV2640 设计的板子兼容,但电源电压对内部 1.5V 稳压器来说太高,因此除非使用散热器,否则摄像头会过热。
出于录像目的,OV5640 应仅与 ESP32S3 板一起使用。由于内存限制,FHD
以上的帧大小应仅用于静态图像。
OV5460 在 ESP32S3 上最高帧大小的可录制帧率为:
帧大小 | FPS |
---|---|
QXSGA | 4 |
WQXGA | 5 |
QXGA | 5 |
QHD | 6 |
FHD | 6 |
P_FHD | 6 |
OV3660尚未经过测试。
要启用MQTT,在编辑配置->其他选项卡下,填写以下字段:
要连接的MQTT服务器IP
MQTT主题路径前缀
MQTT用户名
和MQTT用户密码
启用MQTT
如果配置不为空且ping成功,MQTT将自动连接。
它会在/status频道向MQTT代理发送消息,如录制开启/关闭、移动检测开启/关闭等。
主题:homeassistant/sensor/ESP-CAM_MJPEG_904CAAF23A08/status -> {"MOTION":"ON", "TIME":"10:07:47.560"}
您还可以在/cmd频道发布控制命令来控制摄像头。
主题:homeassistant/sensor/ESP-CAM_MJPEG_904CAAF23A08/cmd -> dbgVerbose=1;framesize=7;fps=1
由@alojzjakob贡献,另见https://github.com/alojzjakob/EspSee
允许通过路由器端口转发,在单个动态IP下访问多个摄像头。另一个限制是避免使用DDNS,因为在给定的路由器上很难或不可能设置。 您将能够轻松构建包含JSON发送到服务器/网站的数据的摄像头列表。
要启用外部心跳,在编辑配置->其他选项卡下,填写以下字段:
心跳接收器域名或IP
(例如www.espsee.com)心跳接收器URI
(例如/heartbeat/)心跳接收器端口
(ssl用443,非ssl用80,或您的自定义端口)心跳接收器认证令牌
(如果您使用EspSee,它将为您的用户帐户提供认证令牌)启用外部心跳服务器
心跳将每30秒(默认)发送一次。它会向定义的域名/URI(例如www.mydomain.com/my-esp32cam-hub/index.php)发送POST请求,包含JSON正文,其中包含您可能需要的特定应用程序的有用信息。
如果您使用EspSee,它会向定义的域名/URI(例如https://www.espsee.com/heartbeat/?token=[your_token])发送POST请求,包含JSON正文,其中包含有关您的摄像头的有用信息,允许该网站将其连接到您的用户帐户并提供一种轻松访问您的摄像头的方式,无需DDNS。
如果您想从同一外部IP(路由器后)访问多个摄像头,可能需要进行端口转发并相应设置EspSee摄像头条目的端口。
要通过互联网远程访问应用程序,请在路由器上为HTTP端口的浏览器设置端口转发,例如:
在远程设备上,输入URL:your_router_external_ip:10880
要获取your_router_external_ip
值,可以使用:https://api.ipify.org
为ESP摄像头设备设置静态IP地址。
为了安全起见,应在访问设置侧边栏按钮中定义认证设置。
由于ESP32的性能和内存限制,此功能在ESP32S3摄像头板上使用效果更好。
在摄像头录制期间可以捕获环境和运动数据等遥测数据(例如来自GY-91 板上的BMP280和MPU9250)。它存储在单独的CSV文件中,以便在电子表格中呈现。CSV文件以相应的AVI文件命名。还会创建一个与相应AVI文件同名的字幕(SRT)文件。CSV和SRT文件会随相应的AVI文件一起上传或删除。下载时,AVI、CSV和SRT文件会打包成一个zip文件。如果SRT文件与AVI文件在同一文件夹中,媒体播放器将显示遥测数据字幕。
用户需要在telemetry.cpp
文件中添加所需传感器的代码。包含GY-91板的简单示例。
要开启遥测记录,请在外围设备按钮下选择使用遥测记录
选项。数据收集频率由遥测收集间隔(秒)
设置。
注意:如果使用Adafruit传感器库,esp-camera库存在冲突。
只启用Telegram或SMTP电子邮件中的一个。
使用IDBot获取您的聊天ID。
使用BotFather创建Telegram机器人并获取机器人令牌。
在编辑配置页面的其他选项卡下,粘贴Telegram聊天标识符
和Telegram机器人令牌
,然后选择使用Telegram机器人
。
您可能希望将机器人设为私密。
请注意,由于TLS,此功能会使用大量堆空间。
Telegram机器人现在将接收来自应用程序的移动警报,显示录制的帧,并带有包含相关录制(最大50MB)命令链接的标题,可以下载和播放。
<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/49050e2b-1c88-4808-9319-0a44bd8bd619.png" width="500" height="500">提供安装摄像头的设备的远程控制,例如用于FPV等的遥控车辆。 最好与ESP32-S3一起使用,以获得更好的帧率和控 制响应。
要启用,在编辑配置页面的外围设备下,选择启用远程控制
。
这将显示一个额外的配置按钮RC配置。
按下RC配置按钮可以定义以下引脚:
转向可以通过舵机控制提供,也可以通过单独控制左右侧电机的履带转向提供。
流媒体视图现在左上角会有一个红色按钮。按下此按钮可显示/隐藏叠加的转向和电机控制。可以使用摄像头视图按钮切换到全屏。有线车辆也可以通过HW-504型操纵杆控制。可以记录摄像头视图(如果启用了麦克风和遥测,也可以记录)。 事先应禁用移动检测。
机器学习AI可用于进一步判断是否在发生移动检测时保存录制,方法是分类帧中的对象是否感兴趣,例如人类、动物类型、车辆等。
由于内存使用和内置AI加速支持,仅在ESP32S3上可行。
该接口设计为与Edge Impulse AI平台打包为Arduino库的用户模型一起工作。
更多详情请参见motionDetect.cpp
。
使用96x96灰度或RGB图像,并使用以下传输学习神经网络设置训练模型:
此选项卡允许访问其他ESP32-CAM_MJPEG2SD摄像头设备的Web界面。要显示此选项卡,在编辑配置页面的其他下,选择显示摄像头集线器选项卡
。
在选项卡中,输入另一台摄像头的IP地址并按下添加IP按钮,将显示一个显示该摄像头图像的屏幕,并在图像上叠加其IP地址。对每个需要监控的摄像头重复此操作。点击图像可打开该摄像头的网页。
按图像上的X图标可删除该IP地址。按全部删除按钮可删除所有IP地址。按刷新按钮可用每个摄像头的最新图像更新每个屏幕。
IP地址存储在浏览器本地存储中,而不是应用程序本身。
由于ESP32的性能和内存限制,此功能在ESP32S3摄像头板上使用效果更佳。
远程NVR可以捕获独立于网页浏览器的流。要启用这些流,在编辑配置->运动选项卡下,选择:
在/sustain?video=1启用视频流
用于MJPEG流在/sustain?audio=1启用音频流
用于WAV流(需要事先设置麦克风)。在/sustain?srt=1启用字幕流
用于SRT流(需要事先设置遥测,否则只会输出时间戳)。然后保存并重启。
如果启用了多个流,需要使用中间工具进行同步处理,例如go2rtc(但它暂时?不处理字幕)。有关go2rtc配置示例,请参见ESP32-CAM_Audio。如果在流式传输期间发生录制,录制将优先进行,流可能会出现卡顿。
包含了一个简单的WebDAV服务器。可以使用WebDAV客户端(如Windows文件资源管理器)访问和管理SD卡内容。在文件夹的地址栏中输入<ip地址>/webdav
,例如192.168.1.132/webdav
对于Android、MacOS、Linux,请参见webDav.cpp
文件。
ESP可用于捕获小物体的一系列照片,控制步进电机驱动的转盘,使用ESP摄像头拍摄低分辨率图像,或使用ESP远程控制的DSLR相机拍摄高分辨率图像。捕获的图像可用于生成3D模型。
要启用此功能,在编辑配置页面的外围设备下,选择启用摄影测量
。
这将显示一个额外的配置按钮PG配置。按下此按钮将显示控制摄影测量过程的选项。
有关更多信息,请参见photogram.cpp
。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号