(大的彩色图为摄像头的原始数据;左边灰色的视频是灰度化、缩放以后的视频,用来检测人脸信息,以提高效率;下边的人脸图片是检测到人脸信息后,截取人脸信息和后台比较然后回显)
项目地址:https://github.com/15225845996/rtsp-face
功能描述
1)浏览器实时播放摄像头信息
2)实时人脸检测(圈出视频中的人脸)
3)根据人脸位置截取人脸,与后台交互获取人脸信息并回填
4)定义可过期的Map,实现滤重(一秒内可能会有很多帧同一个人的人脸信息请求)
参考项目(参考rtsp浏览器播放):https://gitee.com/lllyl2012/rtspDemo
准备工作
安装FFmpeg(视频转码,浏览器不支持rtsp协议),并在PATH下配置环境(项目中会调用CMD命令)
1)官网(http://ffmpeg.org)下载后解压到任意目录,并将bin目录配置在PATH中即可
2)CMD运行:ffmpeg 不报错即可
项目介绍
1)项目结构
2)调用ffmpeg推流到指定的controller,由ConvertVideoPakcet实现ApplicationRunner接口,并在项目启动完成时运行run方法实现。
#命令示例:将指定rtsp地址的视频 推送到指定controller
ffmpeg -rtsp_transport tcp -i "rtsp://admin:[email protected]:554/Streaming/Channels/101" -q 0 -f mpegts -codec:v mpeg1video -s 800x600 http://localhost/rtsp/receive
3)将接收(RtspController接收)到的流通过WebSocket推送到客户端。
4)客户端使用jsmpeg.min.js解码并输出到 canvas 元素 实现动态播放
5)改造jsmpeg.min.js 结合opencv.js实现动态人脸识别,具体见代码(jsmpeg.min.js 中的 CanvasRenderer.prototype.render)
总结:
动态识别人脸信息可根据需求灵活调整
优化方案:在硬件不变的情况下,可根据需求灵活调整。
如考勤场景,只需要检查入口范围,但是一般情况下摄像头获取到的影像要比入口大的多,所以可以根据实际场景将获取到的图片截取到只有入口大小,然后在根据情况缩放一下在检测(要保证缩放后也可以看清楚人脸),流畅度会有一个提升(因为参与校验的数据量变小了)