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