一、首先在某东上购买树莓派摄像头
我的买的硬件张这个样子的(CSI接口摄像头):
正视图 后视图
当然我买的不是正版的,价格在50多块钱吧。所以也不算很贵,买回来看看,电路也不算特别的复杂,自己做的话应该也是没有问题的~(注意买回来的摄像头前面都是有一个小的透明薄膜的,但是很影响摄像头的成像效果,用的时候撕掉它,不用的时候可以去掉。)
简单阐述了解CSI接口摄像头参考:http://www.cnblogs.com/lifan3a/articles/5010633.html):
- 全称CMOS Sensor Interface(CSI)
- 前端-配置逻辑接口以便支持大多数通用的可用的CMOS摄像头接口。
- 支持CCIR656视频接口以及传统的摄像头接口。
- 8位数据口,支持方便YCC,YUV,Bayer或者是RGB的数据格式输入。
- 完全可控的8-bit或16-bit数据到32-bit的FIFO进行打包
- 32*32大小的FIFO存储接受到的的图像像素数据,该FIFO可以通过可编程的IO或者是DMA进行读取.
- 后端-提供了直接到eMMA的预处理PrP块接口(PrP和PP组成了MX27图形加速器eMMA,PrP和PP能够用来给视频做预处理和后期处理,例如,放大,缩小,颜色转换)
- 提供sensor的可屏蔽中断源,该中断源也是中断可控的: 开始Frame,结束Frame,Change of Field,FIFO Full
- 提供给外部sensor用的,可配置的主时钟频率
- 由统计数据产生的自动曝光(AE)和自动白平衡(AWB)控制。
二、接下来开始安装驱动使能树莓派的相关模块:
首先使用 ls指令来查看是否加载到了对应的video device设备:
ls -al /etc
所以没有发现我们的设备,接下来要做的是添加摄像头的驱动程序.ko文件和对应的raspiberry B3+的硬件使能问题:
1、添加驱动程序文件进来:
sudo vim /etc/modules
在最后添加如下的代码:
bcm2835-v4l2
这样就完成了在启动过程中加载camera驱动的前提,注意一个问题就是/etc/modules文件的修改权限是super admin所以,记得使用sudo vim /etc/modules.
2、修改Raspberry的启动配置使能项:
sudo raspi-config
得到如下的配置界面:
选择Interfacing Option,选中Select然后Enter进入,如下图所示:
接下来机会问你是否同意使能Pi camera,选择是然后会让你重启,,重启就好了:
选择 “是”
3、重启完之后,我们的基本的操作就完成了,下来来看看/dev下面是否存在摄像头设备的问题:
ls -al /dev/ | grep video
好得,没问题了,找到了我们想要的看到的设备:video0 device
注:可能提示这样的问题(如果在以上工作都完成的情况下,摄像头还是不能正常的使用或者驱动,请先检查硬件的连接的问题,可能是排线没有很好的插稳,或者是摄像头本身的问题。):
mmal mmal_vc_component_create failed to create component 'vc ril camera' (1:ENOMEM)
mmal mmal_component_create_core could not create component 'vc ril camera' (1) mmal Failed to create camera component
mmal main Failed to create camera component
mmal Camera is not detected. Please check carefully the camera module is installed correctly
上面的问题参考这里:http://blog.sina.com.cn/s/blog_e4008c660101hkd9.html
三、下面简单的使用操作树莓派的摄像头:
1、我们使用rapistill指令来截图(当你在运行此指令的时候,树莓派上的指示灯会亮哦~):
raspistill -o image.jpg
采集的效果如下所示:
这里我们看到采集的图片的大小是2592X1944=5038848大约就是500W的像素了。看起来也是非常的清晰啦~确实很满意的啊!!
这里讲一下raspistill命令的相关参数和实验的具体效果:
-v:调试信息查看
-w:图像宽度
-h:图像高度
-rot:图像旋转角度,只支持 0、90、180、270 度(这里说明一下,测试发现其他角度的输入都会被转换到这四个角度之上)
-o:图像输出地址,例如image.jpg,如果文件名为“-”,将输出发送至标准输出设备
-t:获取图像前等待时间,默认为5000,即5秒
-tl:多久执行一次图像抓取
执行下面的指令:
raspistill -o image%d.jpg -rot 180 -w 1024 -h 768 -t 20000 -tl 5000 -v
接着下面就会输出一系列的捕获的信息,
如图片的大小,
图片的总捕获时间,
图像是否旋转,
是否水平反转垂直反转:
下面是最后的捕获的结果:
注:这里解释一下图片的采集数量和-t参数以及-tl参数的相关关系:N_Picture = -t(获取图像前等待时间)/-tl(多久执行一次抓取时间) + 1。所以有20000/5000+1 = 5张图片
2、使用raspivid指令来生成.h246的文件
raspivid -o mykeychain.h264 -t 10000 -w 1280 -h 720
这样就会在当前文件夹下面生成mykeychain.h264的文件:
如果你想改变拍摄时长,只要通过 "-t" 选项来设置你想要的长度就行了(单位是毫秒)。
如果你想改变图像的分辨率,使用 "-w" 和 "-h" 选项将分辨率降为 1280x720等等。
四、使用VLC等来实现http的视屏流传输:
1、首先需要在你的树莓派上面安装VLC的软件
sudo apt-get update
sudo apt-get install vlc --fix-missing
sudo apt-get install vlc
2、启动你的树莓派摄像头
sudo raspivid -o - -rot 180 -t 0 -fps 30|cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8080}' :demux=h264
3、打开你PC机电脑上的VLC软件,选择打开网络串流(Ctrl+N),输入上面指令的端口号以及对应的树莓派的IP地址
(如下图所示我的树莓派的IP地址是192.168.1.129),运行结果如下图所示,当然也发现http的视频流的确比较卡,当然我采用的视频的画质是500W像素的画质,所以视频的质量比较差,当我将视频的画质调节到720*360时,感觉非常的流畅。(@局域网测试环境)
后续在使用Python Opencv来控制调用树莓派的摄像头做些有意思的东西~
完~