我是一名发动机工程师,虽然听着似乎有点高大上,但工作内容也不过是重复着已有的流程跑完整个试验罢了,并没有什么出彩的东西,任何人来从事这项工作也不过是缺失经验多少的区别。除了不时出现的一些发动机故障,大多数时间都得盯着屏幕上的参数曲线变化,所以工作起来挺枯燥的。无聊的时候就经常脑子里蹦出点想法,比如做个小型监控摄像头。
我公司的发动机试验是在一个封闭的房间内进行的,人在房间外通过隔音的玻璃窗观察发动机运行情况,同时房间内有2个球机摄像头,可以通过监控软件控制球机的拍摄角度。但球机毕竟是固定在墙面上的,总有拍不到的死角存在,而这些死角又往往容易出一些问题,比如漏油。
最开始的想法很简单,就是直接买一个监控摄像头,但在家用摄像头品牌里找了一大圈,发现大多都是无线连接的,而且往往都要先联网通过云端,然后再传输到手机端,没有可以直接局域网直连的型号,但试验室做了很好的信号屏蔽,所以这种偷懒的方式被直接否掉了。
这时候,我想起来了吃灰多年的树莓派,因为见到过那种分享到公网上的IP摄像头。搜索资料发现有个成熟的监控串流软件包——motion,可以将树莓派摄像头拍到的画面通过网络串流到其他设备。但是实际安装配置过程中,发现网上的教程有问题,或者说可能过时了,因此记录一下我总结的新版教程。
我翻了一下,CSDN几个网站给的教程都是安装motion并配置,但启动motion后,出现以下报故:
[1:ml1] [NTC] [VID] [Nov 03 22:54:00] v4l2_pixfmt_select: Selected palette Y12
[1:ml1] [ERR] [VID] [Nov 03 22:54:00] v4l2_fps_set: Error setting fps. Return code -1
[1:ml1] [ERR] [VID] [Nov 03 22:54:00] v4l2_mmap_set: Error starting stream. VIDIOC_STREAMON: Invalid argument
[1:ml1] [ERR] [VID] [Nov 03 22:54:00] vid_start: V4L2 device failed to open
这个问题已被反馈,并且github讨论区里也给出了一个成功的方案。这个成功的方案来自于一篇用德语写的博客,我简化一下就是,从Bullseye(树莓派官方系统是基于Debian系统开发的,Bullseye是Debian 11的代号)开始,安装motion还需要额外安装一个相机支持库libcamera。
安装和配置方案如下:
安装motion和libcamera
sudo apt install libcamera-tools libcamera-v4l2 motion -y
修改motion的默认配置
sudo nano /etc/motion/motion.conf
一般情况下,只需改变以下几项即可
# 后台运行,不在终端中显示
daemon on
# 通过浏览器查看监控的端口,可以浏览器访问树莓派ip:端口号查看监控
webcontrol_port 8080
# 取消仅限本地主机连接控制
webcontrol_localhost off
# 串流的端口号,可以通过支持串流的软件查看监控,比如VLC
stream_port 8081
# 取消仅限本地主机串流连接控制
stream_localhost off
# 增大串流画面的帧率,可以修改更大
stream_maxrate 100
如果需要motion开机自启动的话,还需要进行如下设置:
sudo nano /lib/systemd/system/motion.service
将ExecStart=/usr/bin/motion
修改为ExecStart=/usr/bin/libcamerify /usr/bin/motion
,
在最终启动motion之前,还需要注意一点,服务是在motion用户下启动的,但motion用户并没有配置文件里日志保存目录的写入权限,所以还要执行以下操作:
# 删除之前生成的日志,并赋给motion用户权限
sudo find /var/log/motion -delete
sudo mkdir /var/log/motion
sudo chown motion:motion /var/log/motion
最后启动motion:
sudo systemctl enable motion.service
sudo systemctl start motion.service
这时,你应该就可以通过同局域网内的任何一台电脑的浏览器访问 http://树莓派ip:8080
或者使用VLC等软件添加串流http://树莓派ip:8081
来在线查看监控了。
光能实时监控还不够,我还想能够随时截屏,将拍到的画面保存到电脑上,虽然VLC就可以做到了,但现在AI这么强大了,后面尝试一下搓一个专门的程序出来。