之前就在一些论坛上看到过树莓派相关的技术贴,一直没机会玩,碰巧在今年公司圣诞节活动上得到了一块raspberry pi 3 model b开发版,配齐了显示器、摄像头、云台等配件,想先从机器视觉入手做些小项目。配置raspberry的时候踩到了一些坑,下面详细介绍一下从拆箱到能运行opencv获取视频流的过程。
##安装系统
raspberry pi 3 model b很小巧,只有巴掌大小,最基本的套餐只有板子,其他的配件都不带。电源部分需要自己配一个安卓充电器和数据线,用之前安卓手机的就可以;存储部分需要准备一张sd卡,一样从原来的安卓手机上拆。接下来就是烧录系统,跟着官网的document做,首先从官网下载RASPBIAN STRETCH WITH DESKTOP系统,文件1.6G,建议用utorrent下载。下载好系统后,制作启动盘,我用的是mac,所以下载Etcher。Etcher的使用很简单,跟着官方使用方法3步就可以把系统烧到sd卡中,然后上电启动,raspberry就可以正常运行了。
##触屏校正
建议买一块带触摸功能的屏幕,没有键盘的时候还能进行简单的点击操作,装个虚拟键盘可以打字。屏幕是淘宝的3.5寸HDMI电阻屏,附上淘宝链接,里面可以找到具体的屏幕参数。在没有安装驱动之前,显示的分辨率和触屏功能都是有问题的,首先要安装驱动,链接里也有详细说明,这里贴一下。
1 | sudo rm -rf LCD-show |
这步搞完,屏幕的触摸功能依然不好用,左右是颠倒的,点击左边选择的却是右边,需要进行校正。运行xinput_calibrator工具,屏幕四个角会出现十字,按顺序点击,就搞定了触屏校正。具体的参考见给树莓派装上触摸屏,跟着指示做,亲测有效。
到此,你的树莓派已经可以正常的显示桌面,和正常操作触摸功能了。
##摄像头安装及监控程序安装
摄像头也是淘宝的,附上链接摄像头,为了之后能跟踪运动物体,建议连云台一起买了。这款摄像头是usb接口的,即插即用,可以使用lsusb查看设备,如果有“Bus 001 Device 004: ID 1908:2310 GEMBIRD”就说明设备已经连接了。
接下来就是装一款获取视频流的软件,试试摄像头好不好用,最开始我安装的motion,非常卡!!建议安装另一款软件mjpg-streamer,安装这玩意也是费了九牛二虎之力。说说中间遇到的问题,首先去github复制mjpg-streamer项目,然后make,目前一切正常。然而执行./start.sh就报Init v4L2 failed !! exit fatal错误,开始查了半天说是不支持YUV编码,那改启动脚本,加上-y参数使用YUV编码,改完之后是这样
1 | #start.sh |
此时应该好了吧?!再执行还他么不行,继续报Init v4L2 failed !! exit fatal i: init_VideoIn failed。又查了半天才知道是v4l2没有加载到linux内核,执行
1 | sudo modprobe bcm2835-v4l2 |
再次执行启动文件,就ok了。后来又修改了一下/etc/modules-load.d/modules.conf文件,把 bcm2835-v4l2加上去,这样就保险了。
程序启动后出现下面的命令说明启动正常,访问ip:8080/stream.html,就可以获取实时图像了,速度很快。
1 | MJPG Streamer Version.: 2.0 |
##opencv安装
接下来安装opencv,还是先去github下载opencv和opencv_contrib,然后新建个build文件夹,执行cmake编译
1 | cmake -D CMAKE_BUILD_TYPE=RELEASE \ |
完事正式编译opencv,使用make -j4命令,然后执行到80%多就死机了,每次都是执行了个把小时,真是无语。。。后来发现4核一起会死机!直接make毛事没有,最终编译了过去。附上参考贴。
摄像头和opencv都准备好了,可以用opencv试试获取实时视频流,写个python脚本
1 | import cv2 |
执行之后就可以获取实时视频流了。
##总结
环境准备是个大坑,每个人遇到的问题都不一样,这时候就知道了google的好处。不过好歹是把基本环境搭建了起来,之后看看用opencv做点小项目玩玩,有新进展将继续更新。