• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

【RT-Thread作品秀】基于ART-PI的數(shù)字圖像處理與識(shí)別

2021/01/29
1262
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

CAMERA_2020-12-20_18-26-58.schdoc

共2個(gè)文件

一.概覽

       本人雖然是電子信息技術(shù)專(zhuān)業(yè)出身,在畢業(yè)后從事的是偏軟件的工作,大多數(shù)是PC軟件的開(kāi)發(fā),但一直以來(lái),閑暇時(shí)間會(huì)利用STM32做些小的作品。對(duì)于RT-Thread這國(guó)內(nèi)的物聯(lián)網(wǎng)操作系統(tǒng),其實(shí)早有耳聞,期間也參加過(guò)深圳的一次RT-Thread線(xiàn)下交流活動(dòng),所以對(duì)于RT-Thread是有所了解而未實(shí)際應(yīng)用的程度。
借著此次RT-Thread大賽的機(jī)會(huì),我想將PC的一些圖像處理圖像識(shí)別算法放到art-pi試跑一下看看效果如何,所以本次參賽將會(huì)使用art-pi獲取OV7670的圖像來(lái)做像處理和圖像識(shí)別。

二.開(kāi)發(fā)環(huán)境

硬件PC、ART-PI、OV7670、RGB_LCD
RT-Thread版本:rt-thread4 .0.3,art-pi adk 1.1.0
開(kāi)發(fā)工具及版本:立創(chuàng)EDA,RT-Studio,SecureCRT

三.RT-Thread使用情況概述
線(xiàn)程:創(chuàng)建圖像處理線(xiàn)程用于通過(guò)DCMI獲取OV7670的圖像,圖像處理后完顯示在LCD上
信號(hào)量:用于DCMI圖像獲取,當(dāng)捕捉完一幀圖像后,釋放信號(hào)量給圖像處理線(xiàn)程。
驅(qū)動(dòng):使用了drv_dcmi驅(qū)動(dòng)并參考drv_ov2640移植drv_ov7670驅(qū)動(dòng)

四.實(shí)現(xiàn)功能展示

通過(guò)攝像頭采集圖像進(jìn)行圖像識(shí)別,然后將結(jié)果顯示在LCD屏幕上。

五.硬件框架

本次的硬件核心由ART-PI、OV7670、LCD三部分組成:
ART-PI:stm32H750作為控制核心部分,采集圖像源數(shù)據(jù)、處理圖像源生成處理結(jié)果、將處理結(jié)果送到LCD顯示
OV7670:作為圖像源,提供320*240的RGB565圖像
LCD:實(shí)時(shí)顯示圖像源圖像和顯示處理結(jié)果

六.軟件流程圖

1.    硬件初始化:時(shí)鐘、I2C、DCMI、SDRAM、LTDC
2.    進(jìn)入圖像處理線(xiàn)程,啟動(dòng)拍照并等待拍照完成信號(hào)量
3.    完成拍照釋放拍照完成信號(hào)量
4.    得到圖像后,進(jìn)行圖像處理與圖像識(shí)別
5.    將圖像識(shí)別結(jié)果在LCD上顯示
6.    回到步驟2

七.圖像識(shí)別功能介紹

通過(guò)DCMI驅(qū)動(dòng)獲取OV7670的分辨率為320*240的RGB565原始圖像。RGB565每個(gè)像素使用用下圖的方式存儲(chǔ),每個(gè)像素占用2個(gè)字節(jié)。所以每幀320*240的圖像所需內(nèi)存為320*240*2=153600字節(jié)。

 

實(shí)際上,我們?cè)谶@次項(xiàng)目中并不需要使用到彩色特征,所以先將RGB565轉(zhuǎn)換為灰色度?;叶葓D其實(shí)就是每個(gè)像素占用一字節(jié),用0-255值來(lái)形容一個(gè)像素的灰度值。因此320*240所占用的內(nèi)存為76800字節(jié)。
RGB565轉(zhuǎn)灰度圖公式如下: Gray = R*0.299 + G*0.587 + B*0.114

提取的灰度圖后,我們還需要再進(jìn)行一次二值化處理,因此設(shè)定一個(gè)閾值,當(dāng)灰色像素大于這個(gè)閾值我們將它改為255,低于這個(gè)值變成0。這樣就得到一幀只有0和225值的圖像。

得到二值化圖像后,我們便可以尋找要識(shí)別物體了。在此使用九宮格的方式提取連通分量,原理其實(shí)很簡(jiǎn)單,就是在九宮格里尋找連在一起的像素,如果能找到便將該像素便將該像素的坐標(biāo)(位于X行,y列)寫(xiě)入到鏈表里。如此循環(huán),直到找完所有像素。

完成連通分量的提取后便是特征提取了,我們還是采用九宮格分割法,將取得的圖像平均分割為9個(gè)區(qū)域,再計(jì)算9個(gè)區(qū)域中值為255像素的個(gè)數(shù)。通過(guò)這一步算法,我們得到了9組特征數(shù)據(jù)。

本次用了兩種特征提取方式:
1. 通過(guò)水平與垂直方向的穿越數(shù)找出部分?jǐn)?shù)字
以數(shù)字0和7為例,在1/2寬度處,0和7穩(wěn)定的得到垂直穿越數(shù)是2.而在1/2高度,0的水平穿越數(shù)是2,7的水平穿越數(shù)是1.
 

2. 在圖像的水平和垂直的中間切分成四塊,根據(jù)四個(gè)部分不同像素比例找出其他數(shù)字。以2和3為例 ,在右下角部分,3的每一行都會(huì)有像素點(diǎn),而2會(huì)缺幾行。因此2的像素更少?gòu)亩鴧^(qū)分2和3。

 

最終檢測(cè)效果如下圖:

八.比賽感悟       

       雖然標(biāo)題是比賽感悟,實(shí)際上比賽并不是我的目的。RT-Thread我知道它更久了,但是一直沒(méi)有去更進(jìn)一步使用RT-Thread。這次比賽讓我深入了解了RT-Thread的生態(tài)系統(tǒng),給我的感覺(jué)真的太驚喜了。RT-Thread平臺(tái)擁有豐富的組件,完善的各種外設(shè)驅(qū)動(dòng),通過(guò)官方的RT-Studio基本上做到入手即用了。
       當(dāng)時(shí)拿到ART-PI,通過(guò)RT-Thread SETTING進(jìn)行勾選,再使用CubeMX選擇外設(shè),生成引腳初始化代碼后。我本次項(xiàng)目的軟件基本平臺(tái)已經(jīng)完成了,我只需要專(zhuān)注于我的應(yīng)用層開(kāi)發(fā)便可以了,這真的是太便利了。
       通過(guò)本次比賽,讓我對(duì)RT-Thread獲得相當(dāng)大的好感,我想未來(lái)硬件項(xiàng)目當(dāng)中,我會(huì)毫不猶豫的選擇RT-Thread代替其他實(shí)時(shí)操作系統(tǒng)

 

  • CAMERA_2020-12-20_18-26-58.schdoc
    下載
    描述:攝像頭轉(zhuǎn)換板
  • RT_Thread比賽文檔提交.docx
    下載
    描述:RT_Thread比賽文檔提交

相關(guān)推薦