機器視覺與嵌入式如何結合?

今年剛研一,方向是機器視覺,現成的項目做一個手提式三維掃描儀(當然是跟著師兄做)。同時本人對嵌入式(偏硬體)也非常感興趣,請問將這兩者結合起來該怎樣學習?以後的的發展會怎樣?


改 :不好意思弄錯了 machine version 不是 Computer Version 。

------------------------------------計算機視覺 (computer vision ) 又稱 CV ,其中要有 Intel 的OpenCV

開放計算機,當然還有很多其它的 就不解釋了

割-------------------------

那我的例子來說吧

我今年剛剛好畢業於一個普通的學校,畢業設計做的就是這個方向;

當初選題的時候就那一個人老師的課題做一下,因為本身是嵌入式方向的計算機科學專業的,老師課題是關於圖像處理,我就剛剛好結合一下。

先給一個答案,做出的結果真的不好,手機回復就不貼圖了。

硬體:

核心mcu arm9 s3c2410嵌入式的應該知道這款吧

板子外圍介面都有,USB,串口,網口,sd卡槽等

web camera (USB介面)

nand Flash 64M

軟體版本:

boot: uboot1.2

Linux kernel:2.6.26

文件系統:yaffs

編譯器:arm-gcc-linux 4.3.2

文件系統製作工具:busybox

以上是構建Linux系統軟體

--------

OpenCV 2.8.2 源代碼

cmake 工具

編譯圖像處理依賴庫 所需

--------

宿主機

Ubuntu 12.04(tftp server)

這都是前期的準備

進入正題: 我的課題是《the real-time image processing system based on embedded arm Linux》

具體 bootloader 製作 Linux kernel 交叉編譯 文件系統製作 我在大三時候嵌入式專業課就搞好了,只不過後來因為要加上Linux V4L(Video for Linux) 又重新做了一遍。不會的網上有很多資料。ps:最好加上USB掛在U盤的相關驅動

具體 到 opencv的交叉編譯,首先一定要和文件系統相同版本的編譯器來compile;cmake 有相關選項 編譯選項有很多選上需要的,arm 不支持的不要選,不然編譯會報錯(我就編了兩天 ,編出來了可依賴庫文件)

--------------------------先寫這麼多,晚上接著跟#----------

不好意思,由於這幾天比較忙就沒空跟帖 所以今天晚上就抽個空論文看了一遍,繼續寫了。。。

針對於@張岱珅 說的問題 是我記錯了,cmake是用的2.8.10的 OpenCV使用的是2.4版本(目前最新3.0左右吧),不好意思。

至於@chen jason @Kaixiang Wang 多線程的問題實際在我這次實現中 更多的注重ARM嵌入式Linux 移植 OpenCV so文件是否在已有的演算法上可行,說實話結果並不是很好。

好了,各位大神的支教就說到這了,具體到立體標定,三維識別和建模的相關演算法, 有興趣的同學可以深究,目前演算法OpenCV源代碼中有Example是給出的。

--------------------------------------------割---------------------------------------

接下來接著說 移植 OpenCV Library 到 embedded Linux

特地找了個Cmake-gui編譯的時候的圖,一般都是terminal下cmake就好了,但是gui看著比較直觀,不難看出編譯源文件的時候選用的是arm-linux-gcc和arm-linux-g++(切記版本一定要和製作FS的時候一致)

configure 時 一般都是建立好 OpenCV的build目錄和lib的生成目錄,還有一些編譯選項 ,例如 WITH_CUDA WITH_TIFF 等等

Generate 生成OpenCV的Makefile以後 就可以進入到build的目錄下 make 源碼 make install生成.so 和.a文件了。(這個過程還是需要點時間的,所以最好確保編譯選項選的合適,否則反反覆復也比較折騰的)

這個時候編譯好的庫文件有多種方法可以讓ARM板子上Linux使用(列3中)

1,copy to U盤 ,板子如果可以有USB介面,可以mount U盤即可,再把U盤mount到Linux /lib下

2,NFS 同樣通過這個可以mount到/lib下

3,Linux根文件系統在製作的時候我們一般留有 一個 -rwx的/tmp目錄,tftp將這些 庫文件copy到板子上,在/tmp 目錄下建立 /tmp/lib 將 /lib 目錄下的原來的庫文件 copy to /tmp/lib,再將 OpenCV的庫文件copy to /tmp/lib 最後 mount /tmp/lib 到/lib 這樣就可以保證Linux可以使用OpenCV的庫文件了

以上一般都是自己學習研究過程的做法,如果是APP層到kernel 都比較成熟的話 可以將kernel uImage 和 fs 和 APP 同時打包 一同燒錄到board 上就可以了, 即整個系統分為 boot + 打包的img

------------------------------------------------------------------------------------------------------------

以上基本上可以說 你可以運行需要OpenCV 的第三方庫的軟體 需要環境已建立

APP層就可以有多種多樣的,對於ARM9上的APP那就不好說了,正如 @chen jason說的一樣,這個跑起來就是基本上是萎的

拿一個例子來說吧

stereo_calibration:攝像頭標定

當然 編譯也當然要在宿主機上編譯(當然現在有的board可以帶編譯器) compiler版本要準確 -I 加上OpenCV的include -L OpenCV所需庫文件和其他的庫文件 編譯生成的文件 應該就是可以再board上跑的

這個應該很熟悉的 :LEFT000

:RIGHT000

執行成功後生成攝像頭內外參數文件,intrinsics.yml,extrinsics.yml 兩個文件,在立體匹

配的參數輸入

stereo_math 這個源文件也需要和stereo_clib同樣編譯 將以上的camera的內外參

intrinsics.yml,extrinsics.yml 放到改可執行文件的相同目錄下

先看我們需要match 的兩個圖

--------------------------------------------------------------Left:------------------------------------------------------------------

--------------------------------------------------------------------Right--------------------------------------------------------

結果::::::結果:::::結果::::

深度圖:視差圖

明顯這個雜訊和誤差不是一般的大

這個原因有很多種:最容易想到的是攝像頭不怎麼好,當時用的就是普通的web camera,還有標定的時候我看到動了位置和距離(大家應該都了解 Linux2.6.26內核是不支持同時打開1個以上的camera的:因為內核就只允許初始化一個camera dev),所以我就一個攝像頭拍完,USB介面取下來,另一個插上去 ,雖然插拔過程中沒有動過攝像頭,但是可能也有少許有的吧

這個match過後還會生成一個 point.xyz的文件,這個應該都知道幹嘛的吧 ,就是 PCL(point cloud library) 點雲庫 工業機器人上應該用的比較多,也就是說xyz文件就是當前算出來的立體空間的三維坐標,也就是可以模擬出來三維空間。

至於OpenCV大概就是這樣,雖然吐圖像效果可以說是沒有,但是至少arm還是可行的,到時是arm晶元當然是越高檔越好。

至於這個項目:當初老師說最終還是走gpu CUDA,目標是坐在多旋翼無人機上,進行地理勘測的。這個arm給我試試看來著;我畢業後也沒有在追過,我也就是興趣愛好探究一下,希望對大家有點幫助,多謝各位大神指教,恕不邀自來,O(∩_∩)O哈哈~


機器視覺方面的開發板很多,硬體結構一般都不複雜,嵌入式的最小系統和相機模塊都得買,說是偏硬體其實還是在搞軟體,在arm上做機器視覺最大的問題是效率不高, 一般情況不要用現成的庫,自己根據實際情況寫演算法比較好。


糾正一下下面的回答

計算器視覺被稱為Computer Vision又稱CV,代表的開源庫是OpenCV,而機器視覺被稱為Machina Vision,其實是兩個不的概念和領域。

代表的有Halcon、康耐視、NI等等


硬體性能上:i5+中高端顯卡&>tk1&>樹莓派&> 2440之類 (dsp,fpga沒有接觸不作評論)


推薦閱讀:

當前,在圖像處理領域,哪個方向比較火?或者比較好做?
GitHub 上有哪些比較好的計算機視覺/機器視覺的項目?
MXNet 的代碼要怎麼讀?
為什麼在一堆字母「T」里找「I」比在一堆字母「I」里找「T」要難?
機器學習、數據挖掘 如何進階成為大神?

TAG:計算機視覺 | 機器視覺 | 嵌入式開發 |