基于motion和树莓派CSI摄像模块的实时视频监控系统(含内网穿透)
本文最后更新于 2024年5月7日 凌晨
用现有的树莓派加上CSI摄像模块,就可以搭建起一套廉价的视频监控系统。
设备清单
Raspberrypi4B+
CSI摄像模块
互联网连接(可选)
注意事项
- CSI摄像头可以不用买官方的版本,官方卖100来块还不如直接去买个米家监控来的方便,第三方的CSI摄像头只需20元左右,便宜实惠。
- 如果没有在外浏览摄像头的需求,可以忽略内网穿透部分。
- 摄像头的排线一定要插在开发板的CAMERA接口上,且卡扣一定要锁死。
- 插拔摄像头先断电,否则会对摄像头造成不可逆伤害。
正式开始
连接并启用摄像头模块
将开发板断电,将CSI模块插进CAMERA接口中。
在系统配置中启用对摄像头的支持(默认关闭)
Raspbian系统
请见 https://linux.cn/article-3650-1.html
其他系统
这里以树莓派爱好者基地自编译的 Debian-Pi-Aarch64 为例 (项目地址:https://github.com/openfans-community-offical/Debian-Pi-Aarch64)
1
sudo vim /boot/config.txt
找到以下字段,将
1
start_x=1
取消注释
然后执行
1
2sudo reboot #重启系统
vcgencmd get_camera #检查摄像头连接情况如果得到
1
supported=1 detected=1
则摄像头连接成功,默认的视频位置在 /dev/video0
安装motion
终端输入
1
sudo apt install motion -y
修改motion的默认配置文件
1
sudo vim /etc/default/motion
具体配置文件作用见下表格
选项 Range/Values Default 说明 auto_brightness Values: on,off Default: off 让motion自动调节视频的的亮度,只适用于不带有自动亮度调节的摄像机 brightness Values: 0-255 Default: 0 (disabled) 调整摄像机的亮度 saturation Values: 0 - 255 Default: 0 (disabled) 调整摄像机的颜色饱和度 hue Values: 0 - 255 Default: 0 (disabled) 调整摄像机的色调 contrast Values: 0-255 Default: 0 (disabled) 调整摄像机的对比度 daemon Values: on,off Default: off 以守护进程在后台运行。这个选项只能放在motion.conf,不能放在 thread config file emulate_motion Values: on, off Default: off 即使没有运动物体也要保存图像 ffmpeg_output_movies Values: on, off Default: off 是否保存视频 ffmpeg_bps Values: 0 - 9999999 Default: 400000 视频比特率 ffmpeg_variable_bitrate Values: 0, 2 - 31 Default: 0 (disabled) 动态比特率,如果开启这个功能ffmpeg_bps将被忽略,0为关闭,2为最好质量,31为最差质量 ffmpeg_duplicate_frames Values: on, off Default: on 为了达到每秒的帧数要求,会复制一下帧填充空白时间,关掉这个功能后每个帧都紧接下一个帧,看起来像快进 ffmpeg_output_debug_movies Values: on, off Default: off 调试模式,只看到变化的图像 ffmpeg_video_codec Values: mpeg4, msmpeg4, swf, flv, ffv1, mov, ogg, mp4, mkv, hevc Default: mpeg4 视频格式 framerate Values: 2 - 100 Default: 100 (no limit) 帧速率,每秒多少帧 frequency Values: 0 - 999999 Default: 0 (Not set) 频率协调 Hz,(不清楚作用) lightswitch Values: 0 - 100 Default: 0 (disabled) 忽略光照强度改变引起的变化 locate_motion_mode Values: on, off, preview Default: off 给运动物体用方框标出 locate_motion_style Values: box, redbox, cross, redcross Default: box 标记风格 max_movie_time Values: 0 (infinite) - 2147483647 Default: 3600 最大视频时间 minimum_frame_time Values: 0 - 2147483647 Default: 0 最小帧间隔,设置为0表示采用摄像头的帧率 minimum_motion_frames Values: 1 - 1000s Default: 1 捕捉持续至少指定时间的运动帧 movie_filename Values: Max 4095 characters Default: %v-%Y%m%d%H%M%S 视频的文件名 ffmpeg_timelapse Values: 0-2147483647 Default: 0 (disabled) 间隔时间,拍摄延时视频 ffmpeg_timelapse_mode Values: hourly, daily, weekly-sunday, weekly-monday, monthly, manual Default: daily 延时拍摄模式 timelapse_filename Values: Max 4095 characters Default: %v-%Y%m%d-timelapse 延时拍摄的文件名 output_pictures Values: on,off,first,best,center Default: on 是否保存图片和模式设置 output_debug_pictures Values: on,off Default: off 图片调试模式,只输出运动物体 picture_filename Values: Max 4095 characters Default: %v-%Y%m%d%H%M%S-%q 图片文件名 picture_type Values: jpeg,ppm Default: jpeg 图片类型 post_capture Values: 0 - 2147483647 Default: 0 (disabled) 运动在持续多少帧之后才被捕捉 pre_capture Values: 0 - 100s Default: 0 (disabled) 输出图像包括捕捉到运动的前几秒 quality Values: 1 - 100 Default: 75 jpg图像的质量 quiet Values: on, off Default: off 安静模式,检测到运动不输出哔 rotate Values: 0, 90, 180, 270 Default: 0 (not rotated) 旋转图像角度 stream_auth_method Values: 0,1,2 Default: 0 网页监控身份认证方法:0-无,1-基本,2-MD5 stream_authentication Values: username:password Default: Not defined 网页监控用户名和密码 stream_limit Values: 0 - 2147483647 Default: 0 (unlimited) 限制帧的数量 stream_localhost Values: on, off Default: on 是否只能本地访问网络摄像头 stream_maxrate Values: 1 - 100 Default: 1 限制网络摄像头帧速率 stream_port Values: 0 - 65535 Default: 0 (disabled) 网络摄像头端口 stream_quality Values: 1 - 100 Default: 50 网络摄像头传输质量 switchfilter Values: on, off Default: off 过滤器开关,过滤器用来区分真正的运动和噪声 target_dir Values: Max 4095 characters Default: Not defined = current working directory 视频和图片的保存路径 videodevice Values: Max 4095 characters Default: /dev/video0 摄像头设备名 height Values: Device Dependent Default: 288 图像高度,范围跟摄像机相关 width Values: Device Dependent Default: 352 图像宽度,范围跟摄像机相关 process_id_file Values: Max 4095 characters Default: Not defined 保存PID的文件,推荐/var/run/motion.pid database_busy_timeout Values: 0 .. positive integer Default: 0 数据库等待超时时间,毫秒 启动motion
1
sudo motion
修改配置文件之后,重启motion
1
sudo killall -SIGHUP motion
然后浏览器进入 http://<你的树莓派主机IP>:8081
就可以看见你摄像头的画面了
内网穿透实现任意地点访问
在云服务器部署frp服务端,在你的终端设备运行frp客户端。设置映射关系后,就可以做到任意地点访问,还可绑定自定义域名。网上教程过多,这里不再阐述。
基于motion和树莓派CSI摄像模块的实时视频监控系统(含内网穿透)
http://blog.auro.moe/Software/rpi-video-monitor/