你們好,我是痞子衡,是正經搞技術的痞子。本系列痞子衡給你們介紹的是機器視覺模塊OpenMV-RT初體驗。前端
近些年機器視覺應用一直是個很火的方向,想象一下機器若是能長上「眼睛」,是否是就能夠作一些人類才能作的事情,所以機器視覺是人工智能實現的一個重要基礎。痞子衡當年碩士畢業論文課題就是工業相機圖像處理相關的,算是機器視覺系統的前端核心。遙想十年之前,想要從事機器視覺系統的開發一直是比較複雜的,須要開發者有至關紮實的嵌入式開發基礎,而如今一些機器視覺相關研究小組爲了能讓開發者把更多重心放在應用自己,推出了簡潔易用的機器視覺模塊,藉助這些模塊,即便沒有太多嵌入式經驗,也能夠輕鬆玩機器視覺。今天痞子衡就帶你們一塊兒體驗恩智浦推出的一款輕量級的機器視覺模塊OpenMV-RT:python
今天痞子衡要講的模塊全稱是OpenMV-RT,這是一款基於恩智浦最近主打的i.MXRT超高性能系列MCU的視覺模塊。以下是模塊簡圖,從簡圖裏能夠看出,這款板子設計得很是簡潔,基本除了MCU最小系統以外,僅包含四大部件:640x480數字攝像頭傳感器、九軸姿態傳感器、串行SPI Flash(存放代碼)、SD卡槽(文件系統):git
除此之外,模塊還提供了標準OpenMV接口,可在OpenMV項目(關於OpenMV項目,痞子衡會在後續文章裏細聊)生態裏任意擴展其餘功能模塊:github
Note: 更詳細的模塊介紹可見該模塊設計者Rocky Song發表的微信文章 《基於i.MX RT1060的可編程視覺模塊》編程
首先你須要有一塊OpenMV-RT模塊,不帶SD卡的裸價是399元,鏡頭焦距有6種可選。此模塊爲第14屆全國大學生智能車競賽參賽選手提供過50元專享抵扣。微信
拿到OpenMV-RT模塊後,爲了保證模塊可以正常運行,最好試着本身下載一次i.MXRT固件程序(防止廠商發貨忘記燒錄固件),固件程序工程放在github網站上,源代碼是開源的。ide
若是你不熟悉Git,那就按下圖所示直接下載項目壓縮包(記得Step1必定要作)。若是你熟悉Git,那就直接clone項目,而且checkout到omv_initial_integrate分支。性能
痞子衡在第一節模塊簡圖展現過模塊有一個6-Pin的SWD接口,這個接口即是用於鏈接J-Link仿真器去下載i.MXRT固件程序進外部串行SPI Flash的。可按下圖鏈接模塊與J-Link仿真器:flex
- J-Link.Pin6 (GND) -> 模塊J1.6(GND)
- J-Link.Pin1 (VCC) -> 模塊J1.5(3.3V)
- J-Link.Pin7 (SWC) -> 模塊J1.3(SWC)
- J-Link.Pin9 (SWD) -> 模塊J1.2(SWD)
使用Keil MDK(需v5.20以上)打開固件工程,選中「debug_flexspi」 而後編譯該工程(約4分鐘),最後點擊下載(約2分鐘),固件下載完成後須要給模塊從新上電。網站
- i.MXRT固件工程:\micropython-rocky\ports\prj_keil_rt1060\mpyrt1060.uvproj
由於OpenMV-RT模塊實現了OpenMV IDE的調試監控協議。爲了體驗無需存盤一鍵下載而且監視模塊幀緩衝的功能,以及啓用虛擬串口功能,模塊最好配合OpenMV IDE一塊兒使用。
- OpenMV IDE下載地址: https://openmv.io/pages/download
關於OpenMV-RT模塊的運行,痞子衡將給你們演示一個基於CIFAR-10數據集的物體識別的應用。
OpenMV-RT模塊須要配合SD卡一塊兒使用,模塊當前僅支持在SD上實現文件系統。痞子衡要演示的物體識別的應用預訓練CIFAR-10數據集模型文件須要存放在SD卡里,模型文件包含兩個文件:cifar10.network和cifar10_fast.network。
- 預訓練CIFAR-10數據集模型文件路徑:\micropython-rocky\examples\rocky_test\multi_demos_extract_to_tfcard
先打開OpenMV IDE,而後給OpenMV-RT模塊上電(若是是第一次鏈接),系統可能花較長時間(可能超過1分鐘)來安裝和配置驅動,請耐心等待。當OpenMV IDE左下角狀態發生以下變化時,即代表驅動安裝成功,並已識別出模塊。
使用OpenMV IDE打開物體識別應用的Python源程序(是的,OpenMV-RT支持MicroPython語言,關於其原理痞子衡會在後續文章細聊),這個源程序其實包含了2個應用,一個是基於CIFAR-10的物體識別,另外一個是基於LENet的數字識別。痞子衡想要演示的是物體識別,所以須要將Python源代碼稍做以下修改:
- 物體識別應用主程序:\micropython-rocky\examples\rocky_test\multi_demos_extract_to_tfcard\main.py
#...省略 while (True): pyb.LED(1).off() pyb.LED(2).off() pyb.LED(3).on() pyb.LED(4).off() #If you use RT1052, 'isFull' should be False CIFAR10Test(40000000, isFull = True) # RT1052 does not have enough RAM to run this #LENetTest(40000000)
程序修改完畢後,點擊IDE左下角運行按鈕,OpenMV-RT模塊便開始運行Python程序,你能夠在IDE裏看到攝像頭實時採集窗口。去網上隨便找一張CIFAR-10訓練的10種物體(飛機、汽車、鳥、貓、鹿、狗、蛙、馬、船、卡車)的圖片,痞子衡找了一張鹿的圖片,並放在攝像頭面前,能夠看到採集窗口最上面顯示了識別結果「deer」。
至此,OpenMV-RT模塊初體驗痞子衡便介紹完畢了,掌聲在哪裏~~~