1. 程式人生 > >嵌入式視覺淺談(一)

嵌入式視覺淺談(一)

       最近閒來無事,吃雞之餘折騰了幾天樹莓派,在跑過幾次影象識別等Demo之後頓時對嵌入式機器視覺產生濃厚的興趣。趁現在有時間調研了一下嵌入式視覺的發展歷程,在這裡簡單記錄一下自己這幾天的探索。

        嵌入式處理器有很多種:MCU,DSP,FPGA,SoC,FPGA+SoC,DSP+SoC等。就嵌入式視覺而言,最好的硬體平臺還是FPGA+SoC,比如Zynq系列的Z7000系列,Altera 的Cyclone V系列(好像用人的比較少)。既可以利用FPGA實現一些簡單的預處理,還可以在SoC上執行Linux,利用很多現有的機器視覺庫,比如OpenCV, Halcon等,嗯!站在巨人的肩膀上。而且有一款非常火的深度學習計算棒Movidius可以支援相容Linux和x86平臺,提供API加速影象識別過程。

        其實在這之前想有一個想法是,執行作業系統是不是會額外消耗CPU資源?所以能不能直接利用Opencv庫設計程式在ARM核的處理器上裸機執行?其實也不是不可以,但是隻能用OpenCV 1.0的庫函式,因為OpenCV2.x及後續的版本逐漸取消了C介面,一些高階的影象處理函式基本都是基於C++或者Python實現的,而且基於ARM核的一些處理器的開發環境(KEIL,Atmel Studio,CCS等)基本都是以C語言為主的,編譯起來都是個問題。

        當然,如果對於產品功能要求沒那麼高,比如只要實現一維或者二位編碼讀取的話,可以選擇低端的ARM核架構處理器。有幾個例子:一個是呼叫zbar庫在STM32上實現條碼讀取,網上例子很多,比如

二維碼開源庫ZBar STM32F429 移植。另一個是Atmel官方在SAM4S_WPIR_RD開發套件平臺上使用OpenCV1.0實現條碼讀取。

        再來說說DSP架構特點。TI推出了與OpenCV相容的ImgLib,而且函式介面也都保持一致,這一點上DSP還是費勁了心思,個人感覺用途不大。因為Opencv一直在整合最新的演算法進去,而TI的ImgLib似乎更新比較慢。而且,TI的達芬奇處理器在火了一段時間之後終於還是沉默了,開發流程太繁瑣。

       FPGA呢,其實進適合做一些簡單的預處理,比如伽馬校正等。如果在FPGA上搭建軟核實現影象遍歷演算法的話流程比較長,在這一點上還不如FPGA加DSP或ARM。

       最後,簡單介紹一下OpenMV。OpenMV是一個影象感測器與處理器整合在一起的開源智慧硬體,可以整合在小型機器人專案中。該硬體的處理器採用ARM Cortex M7架構的STM32F765VI處理器,而且開發者基於microPython(http://docs.openmv.io/library/index.html)的硬體函式庫以及常用的影象識別函式庫,創客們可以像呼叫opencv一樣使用該函式庫實現影象識別。

    PS:第一次發博文,想到什麼敲什麼,回頭有機會再整理整理。

    --------參考文獻-----------

1. http://shervinemami.info/embeddedVision.html