树莓派3B应用篇之视频监控(上)

今天为大家带来树莓派视频监控的上篇。

准备:

(1)装好raspbian系统的树莓派3B(之前的树莓派也是可以的);

(2)一个网络摄像头,淘宝上淘一个低端的、能用的就可以了;我用的才30元,解析率640*480;

(3)相应配件如显示器、通畅的网络、电脑等;我是用的是putty+vnc,没有显示器。

开始:

一、摄像头的调试:

(1)调焦:

买来的低端摄像头一般会配个windows调焦软件,方便你在pc上调好焦,在树莓派上就不用调 了,这个我就不多说了,比较简单。

(2)在raspbian系统下测试拍照与实时视频:

安装拍照软件uvccapture与视频录制软件luvcview:

sudo apt-get install uvccapture
sudo apt-get install luvcview


拍照可以用下面的命令:

uvccapture -B120 -C40 -S30 -x640 -y480 -ozhaopian.jpg

下面是关于uvccapture设置参数的提示:  

Camera Settings:

-B<integer>     Brightness

-C<integer>     Contrast

-S<integer>     Saturation

-G<integer>     Gain 

命令中其他三个参数-x照片宽、-y照片高、-o照片文件名。拍照效果如下:
 
 
 
图1

有一点需要说明,当照片的宽高大于960*720时 ,必须使用使用-m参数进行YUYV方式拍照;

而对于一些摄像头,即便是小分辨率的拍照也需要使用-m参数,如果你所拍摄的照片无法查看, 就在命令中加入-  m参数一般即可解决问题。-m使用很简单,如:

uvccapture -B120 -C40 -S30 -x1280 -y720 -m -ozhaopian.jpg

实时视频可以用下面的命令:
luvcview -s 640x480
  -s参数指定宽高。
图2
    
  可以看到,帧数为8.3fps,可见树莓派的处理效果还是很有限。

二、定时拍照
(1)编写脚本文件:
拍照前面已经说过,可以使用uvccapture软件,为了便于进行定时操作,把命令写入脚本文件  dingshipaizhao.sh。
下面是用nano编辑器创建并编辑脚本的命令:
nano dingshipaizhao.sh
 文件内容如下:
#! /bin/sh
sudo uvccapture -B50 -C50 -S30 -x640 -y480 -m -ozhaopian.jpg
按Ctrl+X退出再按Y,确认路径并保存。  
接下来,用下面的命令赋予脚本执行权限:
sudo chmod +x dingshipaizhao.sh
(2)定时任务:
crontab是一个Linux下的定时执行工具,可以在无需人工干预的情况下运行任务。crontab是内置程序,基本任何版本的Linux都带有这个程序。
crontab命令选项: 
-u 指定一个用户。
-l 列出某个用户的任务计划。
-r 删除某个用户的任务。
-e 编辑某个用户的任务。
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute   hour   day   month   week   command
其中:
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

图3(图片来源于网络)

在以上各个字段中,还可以使用以下特殊字符:

星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

(3)实现定时拍照:

了解了以上知识并做好准备工作,我们就可以实现定时拍照的功能了。

执行以下命令:

crontab -e</span>

在打开的文件尾部添加以下内容:

*/30**** /root/dingshipaizhao.sh</span>
保存后退出,重启后树莓派将会每隔30分钟进行一次拍照。

在拍照完成后,我们可以将图片上传到网络上,或者发送到我们的邮箱上,还可以在微信公众号中去获取它。同样,定时拍摄视频也是可以的,大家可以自己琢磨一下。


(上)篇就写到这了,剩下的内容还有很多,需要分成中、下,我慢慢写。

V4L2的demo capture.c是官方示例程序。 capture.c 程序中的 process_image 函数: capture.c 程序主要是用来演示怎样使用 v4l2 接口,并没有对采集到的视频帧数据做任何实际的处理,仅仅用 process_image 函数表示了处理图像的代码位置。 process_image 函数只有一个参数,就是存储视频帧的内存的地址指针,但是在真正的应用中,通常还需要知道该指针指向的数据的大小。 因此可以修改函数,改成 void process_image ( const void * p, int len ) ,但是每次调用 process_image 的时候,第 2 个参数该传递什么值? 考虑到程序中对 buffer 的定义 struct buffer { void * start; size_t length}; 如果将 buffer.length 作为第 2 个参数传递到修改后的 process_image 函数中,这样做是不正确的。 process_image 需要的第二个参数应该是每帧图像的大小,仔细阅读代码后会发现, buffer.length 并不一定就等于图像帧的大小。 (buffer 的大小,还需要考虑其他的一些因素,比如内存对齐等 )。 capture.c只是一个示例程序,仅仅是演示怎样使用v4l2中最基本的接口。尤其是在main函数中的那几个函数调用,表明了在使用v4l2时的最基本的一个流程,包括 open_device,init_device,start_capturing,mainloop,stop_capturing,uninit_device,close_device。在写程序的时候,可以充分的利用这几个基本模块,把他们分散在不同的代码位置上,灵活的调用,有兴趣的可以看一下gstreamer中v4l2src的源代码或者其他的大型程序的相关部分。 总之一句话,capture.c仅仅是一个演示程序,不要局限于它的代码结构,要灵活的使用
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值