从本文开始,将逐步实现一个小型的家庭监控系统,可以实现实时视频监控和历史监控调取的功能。

主要硬件组件包括树莓派、camera、android前端设备。

实现思路为,树莓派上电,即开启视频录制功能,每3min存储一次视频文件到本地。树莓派一端提供历史视频文件和实时视频流的推送。移动端通过网络接口请求历史文件或实时视频流面。具体的实现分四篇文章进行介绍,分别是:硬件准备及picamera使用

树莓派定时转存文件功能及HTTP服务器准备

树莓派nginx部署及rtmp服务器搭建

Android移动端视频获取及播放

本篇主要介绍树莓派摄像头硬件环境搭建和使用picamera进行视频抓取。

本次采用的硬件是树莓派3+官方摄像头模块。

环境搭建

1、将摄像头模块通过CSI接口连接到树莓派

监控云服务器配置参数 家用监控云端服务器_ide

官方建议插拔摄像头时,要保证板子处于掉电状态。否则会损坏摄像头。

连接后上电树莓派,使能摄像头。sudo raspi-config --> Interfacing Options --> Camera --> Enable

然后输入

raspistill -o image.jpg

如果能够显示图片,表示摄像头可以正常使用。

2、安装picamera

如果你用的是树莓派 Raspbian系统,很可能已经安装过驱动。进入python工作环境,导入picamera,如果没有提示错误,表示picamera已经安装好了。pdx

@ubuntu:~$ python
Python 2.7.12 (default, Nov 20 2017, 18:23:56)
[GCC 5.4.0 20160609] on linux2
Type 'help', 'copyright', 'credits' or 'license' for more information.
>>> import picamera
否则需要手动安装
$ sudo apt-get update
$ sudo apt-get install python-picamera python3-picamera
初识picamera

picamera的操作其实很简单,先贴一个官方的例子,实现将图片抓取到文件from time import sleep

from picamera import PiCamera
camera = PiCamera()
camera.resolution = (1024, 768)
camera.start_preview()
# Camera warm-up time
sleep(2)
camera.capture('foo.jpg')
然后是一个抓取视频到文件的例子
import picamera
camera = picamera.PiCamera()
camera.resolution = (640, 480)
camera.start_recording('my_video.h264')
camera.wait_recording(60)
camera.stop_recording()

可以看到短短几行代码就实现了想要的功能。如果是单纯的视频和图片抓取的话,只用PiCamera这个类就足够了。而事实上,常用的也就五个类:PiCamera:最常用的类,提供了基础的获取图片和视频流的方法,构造的同时初始化摄像头。

PiVideoFrameType:定义了一些表示帧格式的常量

PiVideoFrame:储存了视频帧中的相关数据。建议通过属性名称来访问其中的数据。

PiResolution:存储分辨率

PiFramerateRange:存储帧率的上下限

其中后三个继承自namedtuple,所以建议直接用属性名称访问数据,而不用下标操作。

可以说针对每一种常用操作,picamera均给出了相应的接口和实例,而且操作并不复杂。文档非常清晰,这里就不废话了。

以上对开发环境进行了准备。下一篇将开始实现视频录制功能以及本地网络服务器。