【前言】

看着阴暗的角落里吃灰噎到嗓子眼的树莓派,一起陪伴的时光历历在目,往事逐渐涌上心头,每每触及此处,内心总会升腾起阵阵怜悯之情...

我这有两个设备,一个是积灰已久的树莓派,另一个是积灰已久的USB摄像头。

我们今天用这两个设备做一个拍摄监控方案(非视频录制),然后将拍摄好的图片合成视频进行观看。

主要用到的技术有:树莓派/linux操作,crontab,python,ffmpeg。

【系列目录】

  1. 树莓派驱动usb摄像头(非官方摄像头模块)
  2. 树莓派加载外接USB硬盘
  3. 树莓派拍摄获取素材程序
  4. 树莓派定时任务编写
  5. 将素材图片合成视频

【实现过程】

树莓派驱动usb摄像头(非官方摄像头模块)

首先我们要保证树莓派可以识别usb摄像头设备,使用命令:

lsusb

可以看到usb设备列表第一个即 海康威视1080p usb摄像头,说明我们的摄像头设备被正确识别,如果无法识别,则要排除设备故障或想办法安装设备驱动程序。

我们使用fswebcam应用来驱动usb摄像头模块

sudo apt-get install fswebcam
sudo apt-get install mplayer

简单输入拍照命令测试下

fswebcam -r 1920*1080 --delay 3 --skip 10 1.jpg

我们把树莓派上的 1.jpg 下载下来进行查看,成功拍摄到了画面!

我们在使用fswebcam时,增加了几个参数,下面介绍这几个参数的作用:

参数 作用
-r 1920*1080 拍摄图片分辨率
--delay 3 延时3s后拍摄(给摄像头自动对焦的时间,否则会模糊,这个经常拍照的可以理解吧)
--skip 10 作用同上,拍摄时其实会拍摄好多帧,我们跳过前10帧以保证清晰度

树莓派加载外接USB硬盘

我们计划编写一个程序来长时间捕捉摄像头画面,那么就需要一个比较大的存储空间来存放我们拍摄的图片,我们从小角落找到一个同样“积灰已久”的固态硬盘。

windows下使用过的硬盘,推荐格式化成FAT32格式,该格式是兼容Linux系统文件格式的,NTFS格式兼容性不是特别好,可能读写会出问题。

当然直接用linux fdisk命令格式化成 ext2/3/4 也是可以的,但是后续在windows环境下读写又是新问题,如果硬盘不是准备永久挂载在linux系统下使用,还是建议用FAT32格式使用。

windows10/11 下已经不提供格式成 FAT32 的入口,我们可以下载奥梅分区助手快速格式化成想要的格式。

使用命令查看固态硬盘是否被识别

lsusb

可以看到,第二个usb设备便是我们的usb固态硬盘设备了(M.2硬盘放到了USB硬盘盒进行外接)

使用 fdisk 命令查看硬盘属性

fdisk -l

使用 mount 挂载硬盘设备,将磁盘挂载到 /mnt/sda1 路径下

虽然网上有很多教程说配置一个配置文件(具体配置我就不说了),然后让设备开机自动挂载,但我个人极不推荐,修改配置文件开机自动挂载虽然貌似一劳永逸,但在硬盘设备发生变更时,大概率因为忘记同步修改配置文件,会造成无法启动系统的严重故障,折腾不说还可能需要重装系统解决...其实启动不频繁情况下,手动装载也不费事。

mount /dev/sda3 /mnt/sda1

然后使用 df 命令查看存储占用详情

df

可以看到硬盘成功挂载。

树莓派拍摄获取素材程序

我们编写一个短小的python脚本来实现以下几点小功能:

  • 据时间归档目录
  • 调用api执行拍照,并按时间戳命名
import os
import time if __name__ == '__main__':
path = '/mnt/sda1'
# path = 'E:\code\Project.Python\CameraShoot'
folder = f'{path}/{time.strftime("%Y%m%d")}' if not os.path.exists(folder):
os.mkdir(folder) # 拍照
os.system(
f'fswebcam -r 1920*1080 --delay 3 --skip 10 {folder}/{time.strftime("%Y%m%d%H%M%S")}.jpg'
)

树莓派定时任务编写

我们使用 linux 环境下的 crontab 编写定时任务,来定时执行拍照任务(初步定每分钟拍一张)

crontab -e
* * * * * python /7tiny/camera_shoot.py

采用定时任务,每分钟自动调度执行我们写好的python脚本,来进行拍照任务的执行

等待一段时间后,便可拿到拍摄素材...

将素材图片合成视频

我们先简单从树莓派上下载下来拍摄好的图片,在 windows 上简单合成一个视频,完成我们的任务目标,后期可以根据需要在树莓派上自动合成。

我们用 ffmpeg 软件将图片合成为视频。

首先下载 ffmpeg 软件的 exe 版本(windows),linux上可直接下载linux版。

然后将解压后 ffmpeg 的 exe 目录添加到环境变量,方便我们执行命令。

将树莓派上的图片下载下来。

下载下来的图片我们是默认使用时间戳来命名图片的,因为ffmpeg只能从 0 - n 顺序识别图片,无法识别时间戳这种命名,因此,我这里自己编写了一个工具将图片名称替换成了 0 - n.jpg。

有需要的同学可以在文末获取到工具源码及下载地址。

重命名好后,我们执行命令压缩图片为 mp4 文件。

ffmpeg -r 10 -f image2 -i %d.jpg -vcodec libx264 -pix_fmt yuv420p out.mp4

同样我们介绍下使用的几个参数:

参数 作用
-r 10 视频为每秒10帧,可以根据需要调整,10帧就是10张图片
%d 从0开始在当前目录递增寻找图片
-vcodec libx264(windows兼容)
-vcodec libx265(体积更小,windows默认不支持) 视频压缩参数
-pix_fmt yuv420p 视频编码格式(windows下播放兼容)

执行后,我们便可查看到图片被拼接成为 mp4 格式的视频。

【总结】

本文通过短小的代码片段初步使用树莓派+usb摄像头进行环境捕捉,在此基础上,可以进行很多额外的场景扩展及使用优化。

【源码地址】

重命名工具源码及编译后绿色程序:

https://github.com/sevenTiny/SevenTinyToolBox/blob/main/tools/SevenTinyToolBox.RenameWithNumber.exe

用树莓派USB摄像头做个监控的更多相关文章

  1. python3 树莓派 + usb摄像头 做颜色识别 二维码识别

    今天又啥也没干 我完蛋了哦  就是没办法沉下心来,咋办....还是先来条NLP吧.. 七,凡事必有至少三个解决方法 对事情只有一个方法的人,必陷入困境,因为别无选择. 对事情有两个方法的人也陷入困境, ...

  2. 【智能无线小车系列十】通过USB摄像头实现网络监控功能

    如果仅有静态图像可能还不足以满足我们的需求,我们可能会需要用到实时的监控功能.这里介绍一款小应用:motion.motion的功能可强大了,不仅可以将监控的画面通过视频传输,实时展现,更为强大的是,m ...

  3. Home Assistant系列 -- 接入手机摄像头做实时监控和人脸识别

    准备一部废旧(土豪忽略,主要是穷)的.摄像头还是好的手机做监控设备,(Android 和iPhone都行)当Home Assistant 获得实时的视频流后,可以接入各种图像处理组件完成人脸识别,动作 ...

  4. 树莓派USB摄像头与camera模块对比

    http://www.cnblogs.com/weixinforspurs/p/5575962.html ——————————————————————————————————————————————— ...

  5. 录音-树莓派USB摄像头话筒

    实测可用: sudo arecord --duration=10 --device=plughw:1,0 --format=cd aaa.wav sudo arecord --duration=10 ...

  6. 树莓派 B+ Yeelink实现图像监控

     树莓派 B+  Yeelink实现图像监控 数值传感器请参考  : http://blog.csdn.net/xiabodan/article/details/39084877 1 安装摄像头 ...

  7. DIY远程移动图像监测(tiny6410+USB摄像头+motion+yeelink+curl)

    看到有博客上采用motion搭建移动图像监测系统,感觉很强大,但大多缺少远程监测能力,大多局限于局域网.OK,笔者手头刚好有一个30W像素的USB摄像头,那么借用yeelink服务,也来DIY一把,哈 ...

  8. 一个DELPHI操作USB摄像头类

    最近在使用Usb摄像头做了个项目,其中写了一个操作usb摄像头类分享给大家 {*******************************************************} { } ...

  9. 树莓派3 之 USB摄像头安装和使用

    需求 如果你想在树莓上拍照或者录影,你可以安装树莓派的摄像头(有点贵).如果你不想要为摄像头模块花费额外的金钱,那有另外一个方法,就是你常见的USB 摄像头.你可能已经在PC上安装过了.我买的如图的这 ...

随机推荐

  1. echarts中boundaryGap属性

    boundaryGap:false boundaryGap:true 代码处: xAxis: { type: "category", data: ["06-01" ...

  2. docker搭建cordova 11环境

    cordova@11 依赖环境: Java_jdk@1.8.0 Nodejs@12.22.9 android-sdk Build-tools 28 API 28 apache-ant@1.10.12 ...

  3. [ SOS ] 版本控制工具 笔记

    https://www.cnblogs.com/yeungchie/ soscmd 创建工作区 soscmd newworkarea $serverName $projectName [$path] ...

  4. C++---继承和派生

    继承和派生 在C++中, 代码重用是通过继承机制来实现的 继承, 就是在一个已经存在的类的基础上, 再建议一个新类 从已经有的类派生出新的类, 派生类就继承了基类的特征, 包括成员和方法 继承可以完成 ...

  5. cali1e4a9cee8dc这是什么东西?

    //我们查下k8s node节点,发现很多类似 cali7c620a7a67b 这样的类似网络设备的东西.//这些是什么呢?//k8s集群节点ht10,node网络情况.[root@ht10 cali ...

  6. Django中数据传输编码格式、ajax发送json数据、ajax发送文件、django序列化组件、ajax结合sweetalert做二次弹窗、批量增加数据

    前后端传输数据的编码格式(contentType) 提交post请求的两种方式: form表单 ajax请求 前后端传输数据的编码格式 urlencoded formdata(form表单里的) ja ...

  7. Blazor 发布WebAssembly使用Brotli 压缩提升初次加载速度

    使用Brotli提高网站访问速度 在优化网站打开速度上,我们有很多的方法,而其中一个就是减少诸如Javascript和CSS等资源文件的大小,而减少文件大小的方法除了在代码上下功夫外,最常用的方法就是 ...

  8. C++五子棋(四)——走棋原理及权值计算

    原理 计算 计算每个落子点的**"权值"**,找到权值最大的落子点 对于每个空白点,分别计算周围的八个方向 不妨以该空白点作为参照原点,以水平向右作为X轴正方向,以竖直向下为Y轴正 ...

  9. grpc流模式-go实现

    目录 1. 什么是数据流 2. grpc的四种数据流 2.1 简单模式 2.2 服务端数据流模式 2.3 客户端数据流模式 2.4 双向数据流 3. 上代码 3.1 代码目录 3.2 编写stream ...

  10. HttpRunner的PB序列化工具类解决方案(python3)

    背景 年初的时候团队内落地了HttpRunner3框架,简单介绍下:HttpRunner 是一款由python开发的面向 HTTP(S) 协议的开源通用测试框架,用例脚本为 YAML/JSON 格式, ...