IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    弄一个树莓派摄像头

    logic发表于 2024-09-06 18:54:00
    love 0

    我是一名发动机工程师,虽然听着似乎有点高大上,但工作内容也不过是重复着已有的流程跑完整个试验罢了,并没有什么出彩的东西,任何人来从事这项工作也不过是缺失经验多少的区别。除了不时出现的一些发动机故障,大多数时间都得盯着屏幕上的参数曲线变化,所以工作起来挺枯燥的。无聊的时候就经常脑子里蹦出点想法,比如做个小型监控摄像头。

    我公司的发动机试验是在一个封闭的房间内进行的,人在房间外通过隔音的玻璃窗观察发动机运行情况,同时房间内有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这么强大了,后面尝试一下搓一个专门的程序出来。



沪ICP备19023445号-2号
友情链接