一键三连:树莓派视频监控、人脸识别抓拍与上传(附快速安装脚本)

您所在的位置:网站首页 webserver接口调用 一键三连:树莓派视频监控、人脸识别抓拍与上传(附快速安装脚本)

一键三连:树莓派视频监控、人脸识别抓拍与上传(附快速安装脚本)

2023-03-24 05:17| 来源: 网络整理| 查看: 265

距上次研究 树莓派编译构建 OpenCV C++ 项目 之后,我最终完成了一个强大的树莓派 NodeJs 应用—— pilib-capture,可以单程序实现:

远程视频监控

人脸识别抓拍

抓拍后上传

启动方式也很简单,单条指令即可运行:

pilib-capture 程序已经部署到了实际生产环境,用于监控进出人流量

当然实际部署的时候,基于用户隐私考虑,人脸抓拍只做计数,不做存储。

pilib-capture 架构图如下:

采用 USB 摄像头作为视频输入源,比网上流传的主板 CAM 接口摄像头性价比更高。

采用 NodeJS 编写服务器,异步架构,事件驱动,并发量和 HTTP 支持比网上流传的 Python 版本服务器更好。

NodeJS 通过 cpp 绑定直接调用 OpenCV 库,不会损失视频处理的性能。

开放 HTTP 控制端口和 AVI 视频串流端口,浏览器打开网页即可操作。

USB 摄像头调用

在 NodeJS 里,可以用 opencv4nodejs 库调用 OpenCV 提供的摄像头方法 。

类核心定义如下:

构造函数接受设备路径参数,可以是视频文件路径,也可以是 webcam 设备 id。

调用 方法,会返回当前捕获的帧 对象。Mat 即矩阵(matrix),是 opencv4nodejs 里的图形对象,包含所有的图形操作方法。

摄像头调用核心代码:

OpenCV 人脸识别

可以用于树莓派的人脸识别方案有很多,比如 tensorFlow、dlib、OpenCV 等。

我在写 pilib-capturer 的时候,从实际应用场景、系统复杂度和树莓派性能出发考虑,并没有采用神经网络识别模型,而是采用了 OpenCV 自带的训练好的 基于 Haar 特征的人脸识别分类器。

Haar 分类器人脸识别核心代码:

实际测试中,发现 Haar 分类器存在抖动,偶尔会出现一两帧的误识别,把一些相似的图形识别成了人脸。

要解决这个问题,最直观的办法就是 提高分类器准确度,但这并不容易...

所以,在 pilib-capturer 里改用 一阶低通滤波 的方式去抖动。一两帧的误识别属于高频信号,可以被一阶低通滤波很自然地排除掉。

目前支持 (滤波系数) 和 (滤波判断阈值) 两个参数调节滤波效果。

HTTP 控制接口

在 HTTP 的处理上,pilib-capturer 引用了我的另一个 NodeJs 模块:ah-server

ah-server 是一个非常轻量的可扩展的 web 服务器框架,使用体验类似 egg.js。使用框架能力,可以让 HTTP 端口处理轻松一点。

目前 pilib-capturer 只提供了“拍照”接口:。通过这个接口,可以控制程序拍照和立即上传。

接口核心代码如下:

是 ah-sever 的路由控制器基类,扩展这个类就可以访问请求的所有上下文信息。

Avi 视频串流接口

既然树莓派接入了网络,而且连接了 USB 摄像头,那就可以做“远程视频监控”了。最初我做这个功能是为了方便实时调试人脸识别抓拍,但发现完全可以包装成视频串流接口,实现类似“直播”、“远程视频监控”的功能。

当有客户端(比如 VLC 播放器)请求视频串流接口()的时候,pilib-capturer 会启动一个 ffmpeg 进程,用来把摄像头的图片帧封装成 avi 格式,然后以串流的形式返回客户端。客户端收到 AVI 串流,就可以收看“直播”了。

ffmpeg 核心参数如下:

图像上传接口

pilib-capturer 从摄像头识别到人脸后,可以配置成:

上传到指定地址

保存到本地

由 启动参数控制。默认保存目录是本地 ./output,但如果配置成 http 或 https 开头的地址,则会以 POST 请求的方式将抓拍照发送过去。

扩展资料

车牌识别:Haar 特征+Adaboost 原理_阿范同学的博客-CSDN 博客

concefly/ah-server: 轻量可扩展的 web server

视频和视频帧:如何搭建基于 VisionSeed+Raspberry Pi 的实时图传系统?- 知乎



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3