|
本帖最后由 pz_cloud 于 2015-6-14 19:26 编辑
这两天赶制一个新项目,需要用上opencv来处理图像。由于要求使用嵌入式设备实现,自然首先想到了树莓派,pi众多开源的资源当然是提供了不少便利,然而尝试过后发现pi的性能对于图像处理实在是存在很大瓶颈。。
我使用的是一代的B+,摄像头720p分辨率下大概10s钟才能刷新一帧,这感人的速度实在让我无所适从。。于是回头寻找别的平台代替,考虑过树莓派2,伽利略,爱迪生以及一些国产板子像pcduino,香蕉派等,要么还是性能不太够,要么板子不够漂亮小巧。。无奈之下原本打算直接基于安卓开发了,毕竟今天的手机即便是比较便宜的型号,相对于那些开发板来说性能也非常强悍了
。然后上tb搜寻比较便宜小巧的安卓设备,就发现了有种叫安卓电视棒的东西,四核1.4ghz+2G ram,真是深得我心啊(。◕ˇ∀ˇ◕)~
其实这种安卓电视棒在几年前还是比较流行的,而国产的亲民价格也是它们很大的一个优势。买回来之后折腾了一阵,各种刷机换系统,然后发现其实这个还可以运行linux的,很早之前就有人在比较老的全志A10板子上移植过linux。现在的板子当然更新换代性能也更强了,但总之说明在这小小的电视棒上运行linux是可行的。整个系统安装过程比较复杂繁琐,由于还涉及到编译内核,这篇文章就不详细介绍了,之后要是有空的话再另开帖子介绍。
最后的效果是,棒子上预装了安卓4.4和ubuntu的双系统,其中linux文件系统是安装在sd卡上而安卓是安装在内置flash,所以在插入sd卡启动的时候会进入linux而不插卡的话就是进入安卓。
---------------------------------------------------------------------------------------------------------------------------------
以下是介绍linux上opencv的使用,这部分对树莓派的debian也是通用的
首先是opencv的安装,最简便的方法当然是通过apt自动安装,登陆树莓派后输入以下指令就行:
[mw_shl_code=bash,true]sudo apt-get install python-opencv libopencv-core-dev[/mw_shl_code]
这里我们是使用python来开发,当然opencv是支持众多语言的,python应该是最简单的一个了。上面的语句只是安装了必要的核心库所以会很快,安装好之后先测试下摄像头硬件是否连接正确:
这里推荐使用一般的USB摄像头而不是树莓派自己的CSI摄像头,因为目前在python的opencv库中还不能直接读取CSI摄像头,使用一般电脑用的普通USB摄像头就够了。为了测试摄像头是否正常我们安装一个软件luvcview
[mw_shl_code=bash,true]sudo apt-get install luvcview[/mw_shl_code]
完成后插入摄像头,进入GUI桌面(命令行下startx),打开模拟终端输入luvcview就行了,正常的话应该会弹出视频的预览窗口。
确认没问题后开始尝试opencv,在桌面新建一个文档,保存为opencv.py,里面输入以下内容:
[mw_shl_code=bash,true]import cv2
camera = cv2.VideoCapture(0)
while True:
img = camera.read()
cv2.imshow('Face',img)[/mw_shl_code]
保存之后在终端输入python “你文件的路径” (没有引号)就可以运行了,这里说一下在GUI桌面下如果觉得输入路径很麻烦可以直接把文件拖进终端窗口,路径就自动生成出来了。
这几行就实现了读取摄像头和显示图像,是不是很方便呢,在获取了图像帧之后可以自行对图像进行各种处理,在opencv中进行图像的特征提取或者人脸识别都非常方便,这些大家可以自己搜索到很多资料。
最后给一个使用opencv检测正方形和圆形的效果视频,显示检测到的图像并给出图像面积,视频中使用windows自带的远程桌面演示,后面手机上的远程桌面是使用安卓VNC 。这里说明一下由于演示的时候是用wifi传输远程桌面所以会显得比较卡顿,事实上外接显示器的话还是挺流畅的。
http://v.youku.com/v_show/id_XMTI2MTkxNzAzNg==.htm
|
|