STEAM通信与流媒体玩转树莓派

树莓派摄像头(1)-通过命令行简单使用摄像头

2020-03-02  本文已影响0人  全栈顾问

本文中初步体验了一下树莓派摄像头的基础玩法,利用命令行实现拍照片、拍视频、监控等基本功能。

硬件安装

把摄像头插到树莓派上。需要将摄像头底下那个蓝色的一面朝向USB接口那个方向,不要插反了。等到安装完毕了,确保连接好各个硬件之后再开电源,千万记得不要热插拔摄像头。

配置

登录到树莓派,添加摄像头驱动。

sudo vi /etc/modules
# 在文件最后添加
bcm2835-v4l2
sudo raspi-config

选择Interfacing Options,选择Camera,选择<Yes>。确定后需要重启,重启的时候会发现摄像头的小灯会亮1下(之前不亮)。

通过下面的命令检查摄像头是否正常。

ls -al /dev/ | grep video

基本操作

先记住一个用来从树莓派上下载文件的命令scp,方便查看后面拍摄的照片和视频。

# 将树莓派上image.jpg文件拷贝到当前目录
scp pi@192.168.1.16:/home/pi/image.jpg .

使用命令行拍照片:

raspistill -o image.jpg

使用命令行拍10s的视频:

raspivid -o vv.h264 -t 10000

参数:

-? 列出所有参数
-o 输出到指定文件,如果文件名"-"代表标准输出(stdout)
-rot 旋转角度

参考:https://www.raspberrypi.org/documentation/usage/camera/raspicam/raspistill.md

参考:https://www.raspberrypi.org/documentation/usage/camera/raspicam/raspivid.md

用VLC做网络摄像头

sudo apt update
sudo apt upgrade

sudo apt install -y vlc

raspivid -o - -t 0 -n -w 640 -h 480 | cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8160}' :demux=h264

参数-n说明了不显示预览窗口。随后vlc作为服务器,将流媒体送到树莓派的8160端口。同一网络下的任意其他装有VLC的设备,就可以通过访问树莓派的IP地址和8160端口(例如:http://192.168.1.16:8160)来播放摄像头拍摄的内容。

如果出现报错信息:

VLC is not supposed to be run as root.

vi /usr/bin/vlc
# search for "geteuid" and replace it with "getppid"

延迟比较严重,大概有5s左右。

用Motion做监控

Motion是Linux下一款轻量级的监控软件。在日常工作模式下,Motion可以提供网络摄像头的功能。当拍摄过程中画面发生变动时,Motion可以保存动作发生时的图片和视频。

安装和基础配置

sudo apt-get install motion

修改Motion的配置文件/etc/motion/motion.conf,更改下面几个值为:

stream_localhost off
stream_maxrate 30
framerate 15 # 默认值是2,看起来会延迟很严重
stream_port 8081 # 端口号

需要注意的是target_dir选项,默认值为/var/lib/motion。这是Motion存储文件的目标文件夹。所存储文件包括了运动捕捉产生的图片或视频。用户motion必须对该目标文件夹有写入权限。同时留意,流媒体的默认端口是8081。

修改/etc/default/motion,更改守护进程的设置:

start_motion_daemon=yes

进行监控

启动motion

# 默认是控制台模式启动,后台启动的话加 -b
sudo motion 

在同一局域网下的其他电脑上,用浏览器打开192.168.1.13:8081,可以直接看到即时拍摄的流媒体。另外,可以到树莓派上的/var/lib/motion目录下查看录制好的视频。

监控运动物体

通过motion可以实现当监控到有运动物体时,截取图片。

output_pictures best # 将off改为best,还可以选first和center

启动motion,拍摄从静止到运动的场景,例如:挥挥手,然后到/var/lib/motion目下看看有没有生成包含运动物体的图片。

监控到运动物体时报警

监控到运动物体手工检查并不实用,我们更希望能够报警

首先,在/home/pi/project/try-motion目录下面新建一个文件motionpic.py

from sys import argv

filename = argv[1]
f = open('motion.log', 'a')
f.write(filename)
f.write('\r\n')

然后修改/etc/motion/motion.conf文件:

on_picture_save python3 /home/pi/project/try-motion/motionpic.py %f

当监控到运动物体时,就会记录到/home/pi/project/try-motion/motion.log文件中。

其实,以此代码为基础,我们可以实现很多监控报警场景,例如可以和树莓派的GPIO联动起来,实现一些更直观的报警效果。

参考:https://motion-project.github.io

上一篇下一篇

猜你喜欢

热点阅读