raspberry初始篇

  之前就在一些论坛上看到过树莓派相关的技术贴,一直没机会玩,碰巧在今年公司圣诞节活动上得到了一块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
2
3
4
5
6
7
8
9
sudo rm -rf LCD-show

git clone https://github.com/goodtft/LCD-show.git

chmod -R 755 LCD-show

cd LCD-show/

sudo ./MPI3508_480_320-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
2
3
#start.sh

./mjpg_streamer -i "./input_uvc.so -y" -o "./output_http.so -w ./www

此时应该好了吧?!再执行还他么不行,继续报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
2
3
4
5
6
7
8
9
10
11
12
MJPG Streamer Version.: 2.0
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 640 x 480
i: Frames Per Second.: -1
i: Format............: YUYV
i: JPEG Quality......: 80
i: TV-Norm...........: DEFAULT
o: www-folder-path......: ./www/
o: HTTP TCP port........: 8080
o: HTTP Listen Address..: (null)
o: username:password....: disabled
o: commands.............: enabled

##opencv安装
  接下来安装opencv,还是先去github下载opencvopencv_contrib,然后新建个build文件夹,执行cmake编译

1
2
3
4
5
6
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..

完事正式编译opencv,使用make -j4命令,然后执行到80%多就死机了,每次都是执行了个把小时,真是无语。。。后来发现4核一起会死机!直接make毛事没有,最终编译了过去。附上参考贴

  摄像头和opencv都准备好了,可以用opencv试试获取实时视频流,写个python脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import cv2
clicked = False
def onMouse(event,x,y,flags,param):
global clicked
if event == cv2.EVENT_LBUTTONUP:
clicked = True
cameraCapture=cv2.VideoCapture(0)
cv2.namedWindow('My Window')
cv2.setMouseCallback('My Window',onMouse)
print 'showing camera feed, Click window or press any key to stop'
success,frame = cameraCapture.read()
while success and cv2.waitKey(1)==-1 and not clicked:
cv2.imshow('My Window',frame)
success,frame = cameraCapture.read()
cv2.destroyWindow('My Window')
cameraCapture.release()

执行之后就可以获取实时视频流了。

##总结
  环境准备是个大坑,每个人遇到的问题都不一样,这时候就知道了google的好处。不过好歹是把基本环境搭建了起来,之后看看用opencv做点小项目玩玩,有新进展将继续更新。

-------------本文结束感谢您的阅读-------------

本文标题:raspberry初始篇

文章作者:小建儿

发布时间:2018年01月07日 - 21:01

最后更新:2018年01月08日 - 20:01

原始链接:http://yajian.github.io/raspberry初始篇/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。