你需要了解树莓派中摄像头的使用

嵌入式技术

1372人已加入

描述

树莓派的配件还是比较丰富的,其中摄像头更是最长用的配件之一了,做拍照,视频,图像识别等等都会用到。树莓派的摄像头分两类,一类是USB型的,这个比较通用,但是也有兼容性问题。另一种就是树莓派专用的CSI接口的摄像头了,今天我们就来一起学习一下树莓派官方摄像头如何使用。

树莓派官方的摄像头已经配置并安装好了PFC软排线,我们只需要把排线插入到树莓派3B+的CSI接口上,注意需要把接口黑色部分提起,然后插入排线,最后压紧即可。此外随摄像头还配备了一个调节焦距用的旋钮。

摄像头

接下来就可以对树莓派上电了,默认情况下树莓派是没有打开摄像头选项的,需要我们手动打开。

进入树莓派后,在终端窗口中执行"sudo raspi-config",配置树莓派,选择5 Interfacing options。

摄像头

此时就进入了树莓派的功能配置界面了,"P1 Camera"就是摄像头选项了,选中后确认。

摄像头

系统会提示是否使能摄像头功能,这里选择是即可,之后会提示重新启动,重启完成后摄像头就可以使用了。

在终端窗口中,使用"raspistill -t 2000 -o image.jpg"进行拍照,其中"-t 2000"是延时2秒,"-o image.jpg"是保存图像名称。

此时看到拍摄图像的主题小玩偶图像有些发虚,这时就用到了之前提到的调焦距的小工具了,使用该工具调节焦距。

经过调节后,焦距准确,玩偶图像也清晰多了。

摄像头

此时我们拷贝出图像到windows系统,查看图像详细信息,此时就可以看到照片的详细数据了。
从详细信息中可以开到,照片的分辨率为3280*2464,两者的乘积为8081920,也就是所谓的800万像素了。
从相机型号中可以看到摄像头用的模组为imx219,这也是树莓派摄像头2.x版本使用的模组了。
对于摄像头的应用,除了拍照这种静态图像外,最常用的还是捕获动态图像,或者是录制视频了。

在树莓派这个平台上,比较常用的视频工具有三个,motion、mjpg和vlc。他们通常都是以/dev/video0这个设备设备节点来进行视频采集的,使用"ls /dev"命令查看一下设备列表。

摄像头

并没有发现video0这个设备,这是因为树莓派中的camera module是放在/boot/目录下以固件的形式加载的,不是一个标准的v4l2的摄像头ko驱动,所以加载起来之后会找不到/dev/video0的设备节点。究其根本,这个驱动是在底层的,v4l2这个驱动框架还没有加载,所以要在/etc/modules里面添加一行bcm2835-v4l2(是4L2,不是412,小写的L)。使用"vi /etc/modules"编辑modules文件。

摄像头

在最后一行增加"bcm2835-v4l2",保存后退出。这句话意思是在系统启动之后会加载bcm2835-v4l2这个模块,这个模块在树莓派系统的/lib/modules/xxx/xxx/xxx下面,添加之后重启系统。

摄像头

重启之后,就会在/dev/下面发现video0设备节点了。此时之前提到的三个视频工具就都可以使用了。
经过笔者测试,motion虽然配置较为简单,但是视频卡顿严重,几乎不可用;mjpg效果就好很多了,比较流畅,但是需要自行编译;最简单的就是用vlc,经过简单的设置就可以实现非常流畅的视频监控功能了,接下来就使用vlc来搭建。
首先是安装vlc,在终端窗口中使用如下命令:
sudo apt-get install vlc
安装完成后,使用如下命令启动监控:

raspivid -o - -t 0 -w 1280 -h 720 -fps 25|cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8088}' :demux=h264 &> /dev/null

摄像头

然后在windows上开启vlc播放器。

摄像头

在菜单中点击"媒体->打开网络串流",在"网络标签中的网络协议URL"中输入http://192.168.31.253:8088,点击播放就可以了。

此时VLC播放器就可以播放流媒体视频了。


附:命令行解析
raspivid是树莓派视频捕获命令,参数"-o -"表示捕获视频后输出到标准输出,"-t 0"指定捕获时长位一直捕获,"-w 1280"指定视频宽度,"-h 720"指定视频高度,"-fps 25"指定帧速率。
"|cvlc"表示通过管道raspivid捕获的视频传递给vlc播放器,"-vvv" 输出调试信息,"stream:///dev/stdin "从标准输入获取视频流。"--sout"串流输出,'#standard{access=http,mux=ts,dst=:8088}'输出参数为标准输出,输出类型为http,封装类型为ts,目标端口为8088。":demux=h264"编码格式为h.264, "&> /dev/null"标准输出丢弃。
 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分