李 聰,黃成章,安成斌
(華北光電技術(shù)研究所,北京 100015)
高性能的DSP6455芯片在紅外圖像處理中得到了很好的運(yùn)用,但是在實(shí)際工程中,整個(gè)紅外圖像處理系統(tǒng)十分復(fù)雜,項(xiàng)目耗時(shí)久。而圖像處理算法的調(diào)試工作是在整個(gè)系統(tǒng)搭建后才能進(jìn)行,最后調(diào)試算法的時(shí)間非常有限,嚴(yán)重影響項(xiàng)目的效率和進(jìn)度[1]。傳統(tǒng)的仿真都是在MATLAB上進(jìn)行,完全不依賴硬件,由于實(shí)時(shí)性和硬件資源等問題,仿真效果和實(shí)際效果可能相差很多。
為了解決這個(gè)問題,設(shè)計(jì)了一種基于DSP6455的紅外圖像處理仿真平臺(tái),該平臺(tái)主要組成是DSP和上位機(jī)。上位機(jī)的作用是通過千兆以太網(wǎng)和DSP連接,按照一定的幀頻發(fā)送圖像至DSP,由于常用的圖像處理平臺(tái)架構(gòu)都是FPGA+DSP,其中FPGA主要完成一些圖像的預(yù)處理工作,所以上位機(jī)除了發(fā)送圖像外,還要對(duì)圖像進(jìn)行簡(jiǎn)單的預(yù)處理(二值化、直方圖等),以及對(duì)DSP處理結(jié)果的回傳顯示,從而更接近實(shí)際紅外系統(tǒng)的真實(shí)效果。DSP端采用兩塊DSP6455芯片設(shè)計(jì),其中DSP1負(fù)責(zé)網(wǎng)絡(luò)通信傳輸圖像,DSP0用來對(duì)圖像進(jìn)行處理,驗(yàn)證實(shí)際紅外圖像處理算法。通過該平臺(tái),只要預(yù)先采集某些場(chǎng)景的紅外圖像,就可以完成算法的仿真驗(yàn)證工作。
仿真平臺(tái)的硬件組成如圖1所示,采用TI公司的兩片TMS320C6455芯片,峰值處理能力為2×8000MIPS。DSP之間的互聯(lián)采用新型串行點(diǎn)到點(diǎn)高速傳輸協(xié)議Serial RapidIO協(xié)議[2],四個(gè) 1×串行高速 IO(Serial RapidIO)(或一個(gè) 4×):消息傳遞,支持 DirectIO,最高通信速率為3.125G×4 bps。采用256 kb(32 kB)L1P程序緩存(專用),256 kb(32 kB)L1D數(shù)據(jù)緩沖器,16 Mb(2096 kB)L2 緩存器。同時(shí)具備千兆網(wǎng)接口,十分方便用于和上位機(jī)進(jìn)行通信。DSP外掛128MByte×2 DDRII內(nèi)存,這些存儲(chǔ)容量可用于大量的數(shù)據(jù)存儲(chǔ),適合大圖像的處理。
圖1 硬件平臺(tái)
該系統(tǒng)軟件平臺(tái)主要包括兩部分,第一部分是上位機(jī)軟件平臺(tái),第二部分是DSP軟件平臺(tái)。
2.2.1 上位機(jī)軟件平臺(tái)
上位機(jī)軟件平臺(tái)主要是MFC+OpenCV。MFC(Microsoft Foundation Classes )微軟基礎(chǔ)類庫是一個(gè)微軟公司提供的類庫,以C++形式封裝了Windows API,并包含一個(gè)應(yīng)用程序框架,以減少應(yīng)用程序開發(fā)人員的工作量。其中包含大量的Windows句柄封裝類和很多Windows的內(nèi)建控件和組件的封裝類[3]。本系統(tǒng)設(shè)計(jì)用MFC編程實(shí)現(xiàn)上位機(jī)通過TCP發(fā)送圖像至DSP1。
OpenCV是一個(gè)基于C/C++語言的開源圖像處理函數(shù)庫,其代碼都經(jīng)過優(yōu)化,可用于實(shí)時(shí)處理圖像,具有良好的可移植性。
2.2.2 DSP軟件平臺(tái)
主要包括DSP/BIOS、CSL、NDK和DDK。
DSP/BIOS是一個(gè)簡(jiǎn)易的嵌入式操作系統(tǒng),主要是為需要實(shí)時(shí)調(diào)度、同步以及主機(jī)與目標(biāo)系統(tǒng)通訊和實(shí)時(shí)監(jiān)測(cè)等應(yīng)用而設(shè)計(jì)的。DSP/BIOS 系統(tǒng)本身僅占用很少的資源,并且是可以剪裁的,它只把直接或間接調(diào)用的模塊和API鏈接到應(yīng)用目標(biāo)文件中。
CSL(芯片支持庫)提供了一個(gè)用于配置和控制片上外設(shè)的C語言接口。它有各個(gè)分立的模塊組成,并被編譯成庫文件。
NDK(Network Development Kit):為了加速DSP的網(wǎng)絡(luò)化進(jìn)程,TI結(jié)合其C6000系列推出了TCP/IP NDK開發(fā)包采用緊湊的設(shè)計(jì)方法,實(shí)現(xiàn)了利用極少資源支持TCP/IP。
DDK是TI為簡(jiǎn)化驅(qū)動(dòng)設(shè)計(jì)開發(fā)為TMS320系列DSP及其EVM板等提供的驅(qū)動(dòng)程序開發(fā)套件。該套件為TMS320C6000系列中外圍器件提供完整的標(biāo)準(zhǔn)化驅(qū)動(dòng)程序模型,使得驅(qū)動(dòng)程序可以很方便的移植到其他應(yīng)用中,大大提高驅(qū)動(dòng)程序開發(fā)的效率。
本系統(tǒng)設(shè)計(jì)的目標(biāo)是能夠完成任意分辨率,小于等于50 Hz幀頻的紅外圖像的傳輸,并且要求系統(tǒng)能實(shí)時(shí)處理圖像處理算法。如圖2所示,實(shí)現(xiàn)流程是上位機(jī)通過網(wǎng)絡(luò)(TCP/IP)將提前采集到的視頻圖像按照一定的幀頻,逐幀發(fā)送至負(fù)責(zé)通信的DSP1芯片,DSP1接收到圖像后將圖像傳至DSP0,DSP0將傳來的圖像通過處理后,將結(jié)果回傳至DSP1,DSP1再將結(jié)果傳至上位機(jī),這樣就完成了一個(gè)圖像處理算法驗(yàn)證仿真流程。
圖2 系統(tǒng)流程圖
實(shí)現(xiàn)這些功能主要包括:上位機(jī)與DSP之間網(wǎng)絡(luò)傳輸用于傳輸圖像和回傳結(jié)果,上位機(jī)MFC編程實(shí)現(xiàn)界面化控制傳輸圖像和對(duì)圖像的預(yù)處理,DSP網(wǎng)絡(luò)編程和任務(wù)分配用于實(shí)現(xiàn)與上位機(jī)之間實(shí)時(shí)傳輸圖像并完成算法仿真。
上位機(jī)與DSP通過網(wǎng)絡(luò)連接,網(wǎng)絡(luò)協(xié)議選擇為TCP/IP。TCP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。當(dāng)客戶和服務(wù)器彼此交換數(shù)據(jù)前,必須先在雙方建立一個(gè)TCP連接,之后才能傳輸數(shù)據(jù)。TCP提供超時(shí)重發(fā),丟棄重復(fù)數(shù)據(jù),檢驗(yàn)數(shù)據(jù),流量控制等功能,保證數(shù)據(jù)能從一端傳到另一端[4]。實(shí)現(xiàn)TCP/IP協(xié)議一般通過socket編程,網(wǎng)絡(luò)上的兩個(gè)程序通過一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)連接的一端稱為一個(gè)socket[5]。兩個(gè)端口分別稱為客戶端和服務(wù)器端。在編程前必須設(shè)定兩個(gè)端口是客戶端還是服務(wù)器端。本系統(tǒng)將上位機(jī)設(shè)為服務(wù)器端,將DSP1設(shè)為客戶端。
上位機(jī)端的網(wǎng)絡(luò)是用套接字(socket)編程。VC++的MFC提供了兩個(gè)Socket類,即CAsyncSocket類和CSocket類。CAsyncSocket類在較低級(jí)別上封裝了WinSock API函數(shù),可以使用面向?qū)ο蟮姆绞竭M(jìn)行Socket編程,函數(shù)是非阻塞的,函數(shù)調(diào)用后立即返回并反饋信息,支持異步操作。
上位機(jī)主要功能是人機(jī)交互以及網(wǎng)絡(luò)編程,第一步就是初始化并開啟監(jiān)聽窗口,所有初始化的操作都由OnInitDialog完成,包括初始化網(wǎng)絡(luò),初始化菜單,初始化圖像及幀頻。采用時(shí)鐘驅(qū)動(dòng)的方式實(shí)現(xiàn)功能以下功能:
按照NDK的機(jī)制,將用于實(shí)現(xiàn)上述功能的驅(qū)動(dòng)函數(shù)整合在HAL.LIB中,用C語言或匯編語言實(shí)現(xiàn)。這些驅(qū)動(dòng)函數(shù)的函數(shù)名和參數(shù)結(jié)構(gòu)屬于NDK的標(biāo)準(zhǔn)API,由上層協(xié)議棧及NDK控制層規(guī)定其需要實(shí)現(xiàn)的功能。驅(qū)動(dòng)函數(shù)的內(nèi)部實(shí)現(xiàn)與具體的硬件環(huán)境有關(guān),需要自行編制。
對(duì)網(wǎng)絡(luò)初始化完成后就要socket編程實(shí)現(xiàn)TCP/IP協(xié)議,本系統(tǒng)設(shè)計(jì)將DSP設(shè)為客戶端。
step1:創(chuàng)建socket:stcp=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
step2:設(shè)置服務(wù)器端端口信息:包括端口(與服務(wù)器端一致),ip地址。
step3:建立連接:connect(stcp,(PSA)&sin1,sizeof(sin1)。
除學(xué)習(xí)科目外,學(xué)院在課程設(shè)置的其他方面也對(duì)學(xué)生提出了相應(yīng)的要求和規(guī)范。例如:積極鼓勵(lì)學(xué)生參加各種類型的學(xué)術(shù)會(huì)議以及與本學(xué)科專業(yè)相關(guān)的大型會(huì)議,參加會(huì)議可跟隨導(dǎo)師,也可自行參加。在學(xué)術(shù)討論上,學(xué)生可以與導(dǎo)師提前聯(lián)系溝通,在時(shí)間允許的情況下,可進(jìn)行同“師門”的學(xué)術(shù)研討與匯報(bào)等。
step4:接收?qǐng)D像數(shù)據(jù),要設(shè)置為阻塞模式:recv(stcp,temp,length,MSG_WAITALL );
step5:接收成功后利用SRIO發(fā)送至負(fù)責(zé)處理算法的DSP0。
step6:將處理結(jié)果發(fā)送至DSP1。
step7:DSP1通過TCP將處理結(jié)果回傳至上位機(jī)。
DSP端程序主要是通過任務(wù)將整個(gè)程序串聯(lián)起來。
DSP1主要任務(wù):
①網(wǎng)絡(luò)初始化及配置(TASK0):該任務(wù)由DSP/BIOS靜態(tài)創(chuàng)建,是網(wǎng)絡(luò)傳輸任務(wù)的主線程,主要完成網(wǎng)絡(luò)初始化、網(wǎng)絡(luò)參配置。配置完成后啟動(dòng)NDK調(diào)度器。
②網(wǎng)絡(luò)接收(TASK1):該任務(wù)負(fù)責(zé)接收服務(wù)器發(fā)送的預(yù)處理結(jié)果,并將接收的數(shù)據(jù)發(fā)送至DSP0。
③中斷(HWI):接收完成后發(fā)送DOORBELL中斷。
④結(jié)果回傳任務(wù)(TASK2):接收DSP0回傳的處理結(jié)果并發(fā)送至上位機(jī)。
DSP0主要任務(wù):
①DOOEBELL中斷服務(wù)函數(shù)
②處理任務(wù)(TASK0);接收到的圖像預(yù)處理數(shù)據(jù)進(jìn)行處理并發(fā)送DSP1處理結(jié)果。
本文設(shè)計(jì)的仿真平臺(tái)基于640×512分辨率、50 Hz幀頻的紅外圖像,數(shù)據(jù)源為16bits,只要預(yù)先采集某些場(chǎng)景的紅外圖像,在滿足系統(tǒng)帶寬的情況下就可以對(duì)紅外圖像實(shí)時(shí)算法仿真。TCP帶寬決定上位機(jī)能否在滿足系統(tǒng)實(shí)時(shí)性的情況下發(fā)送圖像用于算法仿真。紅外單幀檢測(cè)算法用于驗(yàn)證仿真平臺(tái)的實(shí)時(shí)性和算法仿真性能的評(píng)估。
工程建立后利用jperf-2.0.0工具對(duì)DSP與上位機(jī)之間網(wǎng)絡(luò)連接進(jìn)行測(cè)速,jperf-2.0.0是一種網(wǎng)絡(luò)性能測(cè)試工具,可以測(cè)量TCP最大可帶寬。分別設(shè)置TCP傳輸緩存和L2Cache大小,TCP網(wǎng)速如表1所示。
表1 網(wǎng)絡(luò)性能
結(jié)果可知在TCP Transmit Buffer Size為最大8192和L2Cache Size最大為256k時(shí),網(wǎng)速最快可以達(dá)到400Mb/s,完全滿足圖像傳輸帶寬要求。
本文仿真的紅外單幀檢測(cè)算法主要分為四部分,如圖3所示。首先是將原始圖像分別進(jìn)行中值濾波、形態(tài)濾波和匹配濾波,都是采用3×3的濾波器。將得到的3個(gè)結(jié)果分別賦予適應(yīng)環(huán)境的閾值就可以得到候選目標(biāo),將候選目標(biāo)進(jìn)行融合和剔除就可以得到算法實(shí)際的檢測(cè)結(jié)果。此算法流程圖如3所示。
圖3 算法流程圖
將采集好的紅外圖像有上位機(jī)發(fā)送至DSP進(jìn)行算法仿真,實(shí)際效果如圖4所示。
圖4 原始圖像
圖5 仿真后結(jié)果
為了驗(yàn)證仿真平臺(tái)的實(shí)時(shí)性,在該仿真平臺(tái)中實(shí)現(xiàn)紅外單幀檢測(cè)的算法,同時(shí)在Intel Core i7-2600 3.4 GHz,4G內(nèi)存的PC機(jī)上,基于MATLAB實(shí)現(xiàn)同樣的算法進(jìn)行對(duì)比,分別測(cè)試算法處理一幀以及TCP傳輸一幀圖像所需要的事件。分析結(jié)果如表2所示。因此本仿真平臺(tái)可以實(shí)施處理分辨率為640×512、50幀頻的紅外視頻流。采用該仿真平臺(tái)可以實(shí)現(xiàn)20倍的加速比,為實(shí)時(shí)處理紅外圖像、算法硬件調(diào)試提供有利保障。
表2 仿真及傳輸時(shí)間
通過上位機(jī)與DSP之間網(wǎng)絡(luò)通信,DSP之間級(jí)聯(lián),充分利用上位機(jī)資源,使硬件仿真變得方便靈活,算法調(diào)試更早進(jìn)行,從而縮短項(xiàng)目研發(fā)周期。今后還要繼續(xù)優(yōu)化并改善軟件框架,提高算法可移植性。
參考文獻(xiàn):
[1] WANG Ke,MA Li,et al.Real-time simulation platform for airborne image processing engine[J].Journal of System Simulation,2011,23(9):1832-1836.(in Chinese)
王科,馬麗,等.機(jī)載圖像處理引擎實(shí)時(shí)仿真平臺(tái)[J].系統(tǒng)仿真學(xué)報(bào),2011,23(9):1832-1836.
[2] LIANG Ji,JIN Hengke,XU Weimin.Design and implementation of high performance interface based on rapidIO[J].Computer Application And Software,2009,26(7):43-45.(in Chinese)
梁基,金亨科,徐煒民,等.基于RapidIO 的高性能接口的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2009,26(7):43-45.
[3] YAO Lingtian.Proficient in MFC programming[M]. Beijing:Post & Telecom,2007.(in Chinese)
姚領(lǐng)田.精通MFC 程序設(shè)計(jì)[M]. 北京:人民郵電出版社,2007.
[4] Kevin R Fall,W Richard Stevens. TCP/IP Illustrated. Machinery Industry Process[M].Beijing:China Machine Press, 2016.(in Chinese)
Kevin R Fall,W Richard Stevens.TCP/IP詳解[M].吳英,張玉,譯.北京:機(jī)械工業(yè)出版社,2016.
[5] SONG Jingbin.Linux network programming[M].2nd.ed.Beijing:Tsinghua University Process,2014.(in Chinese)
宋敬彬. Linux網(wǎng)絡(luò)編程[M].2版.北京:清華大學(xué)出版社,2014.