项目编号
X603171| 采集端 ESP32-WROVER-DEV | 视频合成 SimpleVideoServer + MJPEG | 智能识别 豆包多模态视觉大模型
摘要:本文介绍一套面向无人值守场景的人体行为识别系统。系统按「端—云—用」三层组织:以 ESP32 系列 Wi-Fi 摄像头节点作为前端采集单元,节点只负责取帧,把 JPEG 序列图像逐帧推送至服务端 8004 端口;服务端由开源项目 SimpleVideoServer 汇总各节点上传的帧、合成 MJPEG 视频通道后再分发,同时按配置的帧数抽取「连续序列图像」提交给多模态视觉大模型,由模型输出行走、静止、跌倒、跑步等行为结论;识别记录、终端信息与运行参数统一持久化到 MySQL,通过 Bootstrap 构建的 Web 管理端与 web-view 承载的微信小程序完成实时查看、历史检索与参数配置。文末给出整机联调阶段的实测数据。
技术栈速览
| 层次 | 选型 | 版本 / 形态 |
|---|---|---|
| 采集端主控 | ESP32-WROVER-DEV | ESP32 双核、板载 PSRAM,Arduino IDE 开发 |
| 图像传感器 | 摄像头模组 | 方案标注 OV3660,由主控 IO 阵列挂载 |
| 无线通信 | 2.4 GHz Wi-Fi | 站点模式,实测接入热点 8266wifi |
| 视频合成 | SimpleVideoServer | 开源项目,接收逐帧图像并合成 MJPEG 流 |
| 服务端 | jeesite + Spring Boot | Java 技术栈,接口调度与识别任务编排 |
| 数据库 | MySQL | 识别记录、终端信息与配置项 |
| 管理端 | Bootstrap | 响应式后台,五个业务页面 |
| 小程序 | 原生小程序 + web-view | 加载 H5 页面,三个页签 |
| 智能识别 | 豆包多模态视觉大模型 | Doubao-1.5-vision-pro-32k,后台可配置模型名与密钥 |
| 设备通信 | UDP 逐帧上行 + HTTP 接口 | 图像上行与业务查询分流 |
一、项目基本情况
系统按「端—云—用」的结构组织:采集端只负责取帧与上行,服务端负责视频流合成、智能判定与数据持久化,管理与查看端负责呈现与配置。三者之间以两条明确的链路相连,接口边界清晰,任一环节替换都不需要改动其余两部分。
与把识别计算下沉到端侧的方案相比,本设计把全部推理放在服务端:采集节点不承担任何识别运算,因而可以采用成本更低、功耗更小的硬件;同时,视频流由服务端统一合成后对外分发,服务端部署在公网即可实现远程访问,摆脱了依赖内网穿透的限制。
1.1 技术架构
服务端建立在 jeesite 平台之上,采用 Java 与 Spring Boot 实现业务与调度,MySQL 承担数据持久化,管理端界面由 Bootstrap 构建。系统不自行训练识别模型,而是调用多模态视觉大模型:服务端把序列图像与提示词一并提交,模型返回的是自然语言形式的行为结论,而不是单纯的分类标签。
| 层次 | 技术选型 | 主要职责 |
|---|---|---|
| 应用层 | Bootstrap 管理端、微信小程序(web-view 加载 H5) | 实时查看、历史检索与参数配置 |
| 智能分析层 | 豆包多模态视觉大模型(Doubao-1.5-vision-pro-32k) | 由连续序列图像判定人体行为并给出文字结论 |
| 业务服务层 | jeesite + Java + Spring Boot | 接口调度、识别任务编排与配置项管理 |
| 视频合成层 | SimpleVideoServer(开源项目) | 接收各节点逐帧图像,合成 MJPEG 视频流并分发 |
| 数据存储 | MySQL | 识别记录、终端信息与配置项的持久化 |
| 感知采集层 | ESP32 系列 Wi-Fi 摄像头节点(Arduino IDE 开发) | 序列图像采集与逐帧上行 |
1.2 硬件构成
硬件由一个 Wi-Fi 摄像头节点构成:主控负责图像采集调度与无线通信,图像传感器负责连续取帧,二者之间通过数据线直连,不额外占用调试串口。节点的全部对外能力只有一路 Wi-Fi 上行,因此整机结构简单,现场只需保证供电与无线覆盖即可运行。
| 器件 | 型号 / 参数 | 在本系统中的作用 |
|---|---|---|
| 主控模组 | ESP32-WROVER-DEV(ESP32 双核、板载 PSRAM) | 图像采集调度、无线通信与上行控制 |
| 图像传感器 | 摄像头模组(方案标注为 OV3660) | 连续采集可见光序列图像,供模型判定行为 |
| 无线通信 | 2.4 GHz Wi-Fi,站点(STA)模式 | 接入局域网并向服务端逐帧推送图像 |
| 供电与稳压 | Type-C 输入 + AMS1117-3.3 稳压 | 5 V 输入转换为 3V3,供主控与外设使用 |
| 串口下载 | CH340C USB 转串口 + 自动下载电路 | 固件烧录与串口日志输出,DTR / RTS 控制 EN 与 IO0 |
| 状态指示 | LED1 / LED2(S8050 三极管驱动) | 运行状态与串口收发指示 |
注意:口径说明:本项目提供的《项目介绍》文本中主控记为 stm32f103、摄像头记为 OV2640,而项目原理图的文件名为 ESP32-WROVER-DEV、方案导图标注为「esp32cam + ov3660」,开发工具为 Arduino IDE。三者互有出入,本稿以原理图与方案导图为准;硬件实物以演示视频中的实拍画面为据(见图 5),相关口径在《发布说明》中一并留档。
1.3 软件与运行环境
| 软件项 | 说明 |
|---|---|
| 服务端框架 | jeesite 平台 / Java / Spring Boot |
| 数据库 | MySQL |
| 管理端 | Bootstrap 响应式后台,五个业务页面 |
| 小程序 | 原生小程序,以 web-view 控件加载 H5 页面 |
| 智能识别 | 豆包多模态视觉大模型,模型名称与密钥均在后台配置项中维护 |
| 视频合成 | 开源项目 SimpleVideoServer,服务端合成 MJPEG 视频流 |
| 固件开发 | Arduino IDE |
| 网络接入 | 采集节点以站点模式接入,实测热点名称为 8266wifi |
二、系统架构设计
系统自下而上划分为感知采集层、传输与合成层、智能分析层与应用层,层间以明确的接口解耦。下图给出各层的组成与层间关系。
▲ 图 1 系统总体架构图
▲ 图 2 系统功能结构图
从功能边界看,硬件端只负责采集与上行,服务端只负责合成、识别与持久化,管理端与小程序只负责呈现与配置。管理端的五个业务页面与小程序的两个数据页,构成使用者实际接触到的全部入口。
2.1 视频传输与合成链路
采集节点上电后以站点模式接入无线局域网,随后向服务端的 8004 端口持续逐帧推送 JPEG 图像。服务端并不把节点直接暴露给浏览器,而是由 SimpleVideoServer 汇总各节点上传的帧,合成 MJPEG 视频通道后再分发给浏览器与小程序。
这一设计带来两点收益。其一,节点侧无需自行提供 HTTP 服务与视频流——ESP32-CAM 常见的 CameraWebServer 示例在持续推流时开销较大,改为「只管拍照、不停上传」后,端侧负担显著下降;其二,视频流的出口位于服务端,服务端部署在公网即可实现远程访问。
| 链路 | 承载数据 | 方向与方式 |
|---|---|---|
| 图像帧上行 | JPEG 序列图像 | 采集节点 → 服务端,逐帧推送至 8004 端口 |
| 视频流下行 | MJPEG 视频通道 | 服务端 → 浏览器 / 小程序,服务端合成后分发 |
| 业务接口 | 识别记录、配置项 | 管理端 ↔ 服务端,HTTP 请求响应 |
2.2 智能分析与判定规则
识别环节由服务端调用豆包多模态视觉大模型完成。系统并不逐帧调用模型,而是按「连续序列图像」的方式组织输入:参数项 index_list_size 控制一次提交的帧数,实测配置为 2,即每次提交 2 张相互关联的序列图像,由模型结合前后帧的动作变化判断行为。这比单帧分类更能区分「静止」与「跌倒」这类姿态相近但过程不同的状态。
| 参数名称 | 参数项 | 实测值 |
|---|---|---|
| 模型名称 | model_name | doubao-1-5-vision-pro-32k-250115 |
| 模型 key | sk | 已配置(本稿作遮挡处理) |
| 提示词 | tsc | 请帮我分析 2 张关联的序列图片中的人…… |
| 首页显示的记录数 | index_list_size | 3 |
| 是否开始识别 | image_detection_switch | true |
判定规则分三种情形,均可在实测记录中直接观察到:
- 画面内无人员时,返回「无人员在摄像头范围内」;
- 画面内仅有 1 人时,返回具体行为,实测出现「行走」「静止」「跌倒」「跑步」四类;
- 画面内多于 1 人时,返回「监测到多人,无法判断结果」,明确不给出具体行为,避免误判。
值得注意的是,两类边界情形同样作为一条识别记录落库。这样处理的好处是:前端列表不会把「模型主动放弃判定」与「服务未运行」混为一谈,运维人员可以据此区分是识别策略生效还是链路中断。
2.3 硬件系统设计
硬件部分以 ESP32-WROVER-DEV 开发板为主控,板载 Type-C 供电、CH340C USB 转串口、AMS1117-3.3 稳压电路与自动下载电路。自动下载电路由 DTR、RTS 两路信号经三极管网络控制 EN 与 IO0,配合串口工具的时序即可免按键进入下载模式;图像传感器由主控的 IO 阵列挂载,与调试串口互不冲突。
▲ 图 3 硬件系统原理框图
图 4 为本项目原理图的矢量导出件,原始设计采用嘉立创 EDA 绘制,随附 schdoc、json、svg、pdf 四种格式。自左至右依次为 Type-C 输入、CH340C USB 转串口、3.3 V 稳压、自动下载电路与主控模组,另附 LED 状态指示、串口通信指示与两组扩展排针。
▲ 图 4 硬件原理图(ESP32-WROVER-DEV 开发板)
图 5 为采集节点的硬件实物,取自演示视频中的实拍画面:主控板两侧分列排针,摄像头模组经 FPC 座直连,Type-C 数据线接入后板上指示灯点亮,表明供电与固件运行正常;板面丝印可辨认出 ESP32-WROOM 系列模组的标识。图 6 为同一节点的串口联调记录:串口参数为 COM33 / 115200 / 8 / N / 1,日志中按 ssid、pass、server_IP 三段依次输出配网信息,并给出接入后获取的局域网地址与向服务端 8004 端口发起连接的记录。
▲ 图 5 采集节点硬件实物(演示视频画面)
▲ 图 6 采集节点串口联调记录
注意:硬件实物素材说明:项目素材目录未单独提供硬件照片,图 5 系从演示视频的画面中截取并作清晰化处理,像素密度低于常规实拍照片,仅用于说明节点的实际形态;全文未使用任何生成式图像替代实物。
2.4 数据交互时序
▲ 图 7 系统数据交互时序图
时序图给出了一次完整识别过程的消息顺序:节点由上电配网开始,接入后持续逐帧上行图像;服务端一边合成分发视频流,一边按配置的帧数抽取序列图像提交大模型;模型返回行为结论后写入识别记录,前端再通过轮询刷新「最近识别结果」列表。参数管理中的模型名称、提示词与识别开关变更后即时生效,无需重启采集节点。
2.5 数据结构
系统在 MySQL 中维护五类记录,字段均取自管理端的实际列表,可作为二次开发的建表参考。
# 用户记录(用户管理页实测字段) 姓名 电话 更新时间 # 终端记录(终端管理页实测字段) 终端编号 终端名称 安装地址 摄像头SN online 更新时间 # 配置项(参数管理页实测字段) 参数名称 类型 参数项 参数值 备注 更新时间 # 识别记录(历史数据查询页实测字段) 终端编号 终端名称 照片 结果 更新时间
其中「结果」字段存放的正是模型输出的行为结论或边界提示语,与照片字段一一对应,因此任意一条记录都可以回溯到判定当时的现场画面。
三、系统界面展示
管理端按「实时监视为主、记录检索为辅」组织,左侧为固定导航,右侧为内容区。以下界面均取自系统实际运行过程;涉及个人信息的字段已作脱敏处理。
3.1 Web 管理端
管理端基于 jeesite 平台与 Bootstrap 构建,实测访问地址为 127.0.0.1:8889/a/index,左侧导航包含用户管理、终端管理、参数管理、实时数据查询与历史数据查询五个入口。图 8 上部为登录页,下部为登录后的系统主界面。
▲ 图 8 Web 管理端登录页与系统主界面
用户管理页维护使用系统的账号,表格列为姓名、电话与更新时间,实测有 2 条记录。为保护个人信息,本稿已将姓名与电话两列替换为占位文本,表格结构与其余字段保持原样。
▲ 图 9 用户管理界面(姓名与电话已脱敏)
终端管理页记录采集节点的归属信息,表格列为终端编号、终端名称、安装地址、摄像头 SN、在线状态与更新时间。实测 1 条记录:终端编号 ZDBH01、终端名称「摄像头 A」、摄像头 SN 30AEA45EE1A0、状态 online;行内的「打开摄像头」按钮可调出实时视频弹窗,用于在后台直接确认现场画面。
▲ 图 10 终端管理界面
参数管理页是系统唯一的运行期配置入口,表格列为参数名称、类型、参数项、参数值、备注与更新时间。实测 5 条配置项,覆盖模型名称、模型密钥、识别提示词、首页显示的记录数与识别总开关;其中模型密钥值已在图中作遮挡处理。把这些参数外置到数据库,使得现场调整识别策略不需要重新烧录固件。
▲ 图 11 参数管理界面(模型密钥值已遮挡)
实时数据查询页由视频区与结果区两部分组成:上方播放服务端合成的 MJPEG 画面,并给出摄像头编号;下方「行为识别」开关控制识别任务的启停,「最近识别结果」按时间倒序给出若干条最新的判定结论。
▲ 图 12 实时数据查询界面
历史数据查询页是系统的数据主干,表格列为终端编号、终端名称、照片、结果与更新时间,每条记录都附有判定当时的缩略图。实测该页累计 1343 条记录,共 68 页、每页 20 条;样例数据的时间跨度集中在 2026-03-23 00:42:40 至 00:55:01,在同一时段内可以连续观察到「无人员在摄像头范围内 → 静止 → 跌倒」的完整过程,说明序列图像的判定结果在时间上是连贯的。
▲ 图 13 历史数据查询界面
3.2 微信小程序
小程序以 web-view 控件加载 H5 页面的方式实现,底部设实时数据、历史记录、个人中心三个页签。首次进入需填写服务器地址与端口,实测为 192.168.1.7 与 8889;填写后进入账号登录页。
▲ 图 14 微信小程序服务器配置与登录界面
实时数据显示页顶部给出摄像头编号,中部嵌入视频画面,下方以开关控制行为识别,并在「最近识别结果」中按时间倒序列出结论。图 15 左右两屏取自同一次联调:左屏画面中出现两人时给出「监测到多人,无法判断结果」与「行走」,右屏单人场景下给出「跌倒」——正是判定规则中三类情形的直接体现。
▲ 图 15 微信小程序实时数据显示界面
历史记录查询页以卡片形式组织数据,每条卡片给出摄像头编号、时间、识别结果与现场画面,画面中直接叠加了识别结论标签,便于快速核对;个人中心页提供密码修改与退出功能,图中姓名与手机号已作脱敏处理。
▲ 图 16 微信小程序历史记录查询与个人中心界面
3.3 实测数据汇总
| 观测项 | 实测值 |
|---|---|
| 管理端访问地址 | 127.0.0.1:8889/a/index |
| 终端编号 / 终端名称 / 摄像头 SN | ZDBH01 / 摄像头 A / 30AEA45EE1A0(online) |
| 识别记录总量 | 1343 条(共 68 页,每页 20 条) |
| 样例数据时段 | 2026-03-23 00:42:40 — 00:55:01 |
| 识别结论类别 | 行走 / 静止 / 跌倒 / 跑步 / 无人员在摄像头范围内 / 监测到多人,无法判断结果 |
| 模型名称配置值 | doubao-1-5-vision-pro-32k-250115 |
| 序列图像帧数(index_list_size) | 2 |
| 节点串口参数 | COM33 / 115200 / 8 / N / 1 |
| 节点上行端口 | 服务端 8004 端口 |
| 小程序服务器配置 | 192.168.1.7 : 8889 |
| 演示视频时长 | 7 分 12 秒,1994×1080 |
四、系统视频展示
▲ 图 17 系统演示视频封面
演示视频为系统完整运行过程的屏幕录制,时长 7 分 12 秒,分辨率 1994×1080,内容按「方案导图讲解 → Web 管理端五个页面演示 → 小程序配置与演示 → 行为样本验证」的顺序展开。另有一段 51 秒的短片,集中展示四种识别行为对应的画面与判定结果。建议按以下顺序观看,可以最快建立对系统整体的认识。
- 先看方案与架构:对照本稿图 1、图 2 理解四层划分与两条链路的走向;
- 再看 Web 管理端:依次观察用户管理、终端管理、参数管理、实时数据查询与历史数据查询的实际操作;
- 然后看小程序:从服务器地址配置、账号登录,到实时数据显示与历史记录查询;
- 最后看行为样本短片:集中观察行走、静止、跌倒等行为的判定结果与画面叠加标签。
视频提供 B站版、无水印版与水印版三种文件,正文不内嵌视频文件,请将其作为独立的视频稿件发布。
五、获取方法
5.1 交付内容
| 交付内容 | 形式 |
|---|---|
| 硬件实物 | 已完成联调的 Wi-Fi 摄像头采集节点 |
| 程序源码 | ESP32 固件工程、服务端 Java 工程与微信小程序工程 |
| 硬件原理图 | 嘉立创 EDA 源文件及导出的原理图、PCB 文件 |
| 演示视频 | 系统完整运行的演示录像(B站版 / 无水印版 / 水印版) |
| 技术支持 | 远程协助环境搭建、程序调试与小规模修改答疑 |
5.2 获取方式
在站内联系作者
- 在文章评论区留言,或直接发送站内私信;
- 写明需要的项目编号「X603171」以及用途(学习 / 二次开发 / 课程设计);
- 收到后会按用途给出对应的资料组织方式与部署说明。
注意:资料中的服务端工程需要在本地配置 Java、MySQL 与 jeesite 运行环境,采集端固件需要 Arduino IDE 与 ESP32 系列开发板支持包。建议先确认本地环境,再索取资料。
5.3 部署前确认
- 采集节点默认以站点模式接入固定热点(实测名称 8266wifi),现场部署前需改为实际的 Wi-Fi 参数;
- 服务端接收图像的端口(实测 8004)与小程序填写的服务器地址、端口需保持一致;
- 模型名称、密钥与识别提示词均在参数管理页维护,部署到新的场景时应重新标定提示词;
- 参与判定的序列图像帧数(index_list_size)影响判定灵敏度,建议结合现场节奏调整后再上线。
附录 A 串口联调日志摘录
以下日志取自采集节点的串口输出(串口参数 COM33 / 115200 / 8 / N / 1),可直接用于核对节点的配网与连接流程。
wait wifi... wifi_config__ ssid: 8266wifi pass: 123456789 server_IP: 192.168.137.250 wifi_connected Local IP address: 192.168.137.127 Mac is 30AEA4B61130 connect server 192.168.137.250 port is 8004
附录 B 参数管理配置项
参数项 含义 实测值 model_name 模型名称 doubao-1-5-vision-pro-32k-250115 sk 模型密钥 由后台维护,本文不展开 tsc 识别提示词 请帮我分析 2 张关联的序列图片中的人…… index_list_size 首页显示的记录数 3 image_detection_switch 是否开始识别 true
注意:配置项以数据库记录的形式维护,修改后无需重启采集节点即可生效。
附录 C 识别结果判定规则
| 画面情形 | 模型输出 |
|---|---|
| 画面内无人员 | 无人员在摄像头范围内 |
| 画面内仅 1 人 | 行走 / 静止 / 跌倒 / 跑步 |
| 画面内多于 1 人 | 监测到多人,无法判断结果 |
两类边界结论同样写入识别记录表,前端据此区分「模型主动放弃判定」与「链路中断」。
项目编号 X603171。本文所述系统已完成实测验证,相关技术问题可在评论区交流。