树莓派摄像头(1)-通过命令行简单使用摄像头
本文中初步体验了一下树莓派摄像头的基础玩法,利用命令行实现拍照片、拍视频、监控等基本功能。
硬件安装
把摄像头插到树莓派上。需要将摄像头底下那个蓝色的一面朝向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
联动起来,实现一些更直观的报警效果。