霍凌峰
(河北工程大學(xué),河北邯鄲,056000)
嵌入式數(shù)字圖像處理系統(tǒng)不僅計(jì)算性能不斷提高,而且功能也越發(fā)完備豐富[1]。在當(dāng)前國(guó)內(nèi)外的各個(gè)研究領(lǐng)域中,嵌入式數(shù)字圖像處理均具有廣泛的應(yīng)用場(chǎng)景?,F(xiàn)今大多數(shù)的數(shù)字圖像處理系統(tǒng)基本上都是通過(guò)計(jì)算機(jī)、圖像采集卡和相應(yīng)的圖像處理件來(lái)實(shí)現(xiàn),它的性能受到多方面的影響如計(jì)算機(jī)總線工藝的制約,CPU的體系架構(gòu)的制約,印刷電路工藝的的制約等[2]。
根據(jù)嵌入式系統(tǒng)的功能需求以及嵌入式系統(tǒng)的性能需求,創(chuàng)龍科技使用雙核ARMCortex-A15 處理器和浮點(diǎn)雙核DSP 處理器進(jìn)行集成,構(gòu)成了AM5728 芯片。本文采用AM5728 芯片作為開(kāi)發(fā)平臺(tái),ARM 處理器負(fù)責(zé)圖像的采集與顯示,DSP處理器完成圖像的算法處理.該系統(tǒng)通過(guò)GStreamerAPI 連接各組件,擁有較高的計(jì)算性能,同時(shí)具有兼容性強(qiáng),穩(wěn)定性高的特點(diǎn),同時(shí)在功能擴(kuò)展上具有充足的靈活性。
系統(tǒng)硬件結(jié)構(gòu)如圖1所示,ARM 處理器接收USB 攝像頭傳輸?shù)膱D像數(shù)據(jù),通過(guò)GStreamerAPI 同時(shí)傳輸?shù)絃CD顯示屏和IVA-HD 處理器,IVA-HD 處理器將圖像編解碼處理后,系統(tǒng)通過(guò)OpenCL 調(diào)用DSP 對(duì)圖像進(jìn)行算法處理[3]。處理好的圖像經(jīng)ARM 處理器直接在HDMI 顯示屏上顯示。通過(guò)以上過(guò)程,圖像數(shù)據(jù)既可在LCD 顯示屏上直接顯示,又可同時(shí)在系統(tǒng)算法處理完成后在HDMI 顯示屏上顯示,同時(shí)DSP 作為圖像算法處理的專(zhuān)用處理器,提高了圖像處理的速度和精度。本文所設(shè)計(jì)的視頻采集、編解碼、算法處理、顯示以及存儲(chǔ)等功能都基于GStreamer的使用才得以實(shí)現(xiàn)。Gstreamer 是一個(gè)多媒體框架,其可以在Windows操作系統(tǒng)或Linux 操作系統(tǒng)上跨平臺(tái)使用,多媒體處理的各個(gè)步驟需要被該框架通過(guò)應(yīng)用程序以管道(Pipeline)這種方式串聯(lián)起來(lái),進(jìn)而達(dá)到我們想要的效果[4]。串聯(lián)的各個(gè)步驟通過(guò)插件的方式來(lái)實(shí)現(xiàn),這樣一來(lái),Gstreamer的應(yīng)用打打提高了各項(xiàng)功能呢的擴(kuò)展性。我們所使用的TL-5728 與GStreamer 所搭建的視頻編解碼框架具有清晰地結(jié)構(gòu)及靈活的可擴(kuò)展性能。目前在嵌入式系統(tǒng)中,視頻的編解碼通常是由處理器內(nèi)的DSP 處理器來(lái)協(xié)助完成的,相比于傳統(tǒng)的軟解碼,這種方法在編解碼速度和性能上都有了極大地提升,但是由于DSP的運(yùn)行特點(diǎn),它在編解碼過(guò)程中會(huì)占用過(guò)多的片上通信帶寬,這就使得核間通信效率降低[5]。所以在本系統(tǒng)中,我們選擇的AM5728 處理器集成了IVA-HD 多媒體硬編解碼加速引擎,在該引擎內(nèi)部有七個(gè)針對(duì)不同編解碼格式的不同引擎,同時(shí),每個(gè)引擎都擁有單獨(dú)的數(shù)據(jù)存儲(chǔ)器。
圖1 系統(tǒng)硬件結(jié)構(gòu)示意圖
在開(kāi)發(fā)計(jì)算機(jī)程序時(shí),不管是編寫(xiě)還是編譯和調(diào)試軟件,都可以在計(jì)算機(jī)上直接完成,包括最終的程序也可以直接在計(jì)算機(jī)上運(yùn)行。與計(jì)算機(jī)程序開(kāi)發(fā)不同的是,對(duì)于嵌入式開(kāi)發(fā)來(lái)說(shuō),我們一開(kāi)始的嵌入式設(shè)備的系統(tǒng)是空白的,我們需要在主機(jī)上為系統(tǒng)構(gòu)建基本的軟件系統(tǒng),并將編寫(xiě)好的軟件燒寫(xiě)到設(shè)備中。除此之外,由于嵌入式設(shè)備的高集成性,其本身具備的資源不能夠用來(lái)開(kāi)發(fā)軟件,因此我們需要通過(guò)交叉開(kāi)發(fā)模式來(lái)完成軟件的開(kāi)發(fā),既編輯和編譯軟件在主機(jī)上完成,程序的運(yùn)行和測(cè)試在目標(biāo)機(jī)上完成。因此我們?cè)谇度胧降拈_(kāi)發(fā)過(guò)程中,不僅需要一塊功能齊全的開(kāi)發(fā)板,同時(shí)也需要有一個(gè)PC 主機(jī)。
通常來(lái)說(shuō),嵌入式系統(tǒng)由四個(gè)部分組成,分別為引導(dǎo)加載程序,系統(tǒng)內(nèi)核文件,根文件系統(tǒng)和應(yīng)用程序。系統(tǒng)的啟動(dòng)過(guò)程需要通過(guò)上述四個(gè)部分來(lái)完成。首先是引導(dǎo)加載程序的執(zhí)行,以此對(duì)CPU 和其外部設(shè)備進(jìn)行初始化處理,接著系統(tǒng)內(nèi)核文件被調(diào)用使系統(tǒng)完成初始化過(guò)程,然后根文件系統(tǒng)會(huì)被掛載到內(nèi)核上,這個(gè)系統(tǒng)負(fù)責(zé)的是一些必要模塊的加載活動(dòng),最后自啟動(dòng)應(yīng)用程序會(huì)運(yùn)行。
虛擬機(jī)顧名思義是一臺(tái)虛擬的計(jì)算機(jī),其中的虛擬系統(tǒng)指的是通過(guò)虛擬機(jī)軟件在實(shí)際的計(jì)算機(jī)中,借用實(shí)際計(jì)算機(jī)的硬件資源,模擬出一臺(tái)具有完整硬件功能的虛擬計(jì)算機(jī)。該虛擬計(jì)算機(jī)系統(tǒng)相對(duì)于實(shí)際的計(jì)算機(jī)系統(tǒng)來(lái)說(shuō)是完全獨(dú)立的。通過(guò)虛擬機(jī)軟件,可在一臺(tái)現(xiàn)有的物理計(jì)算機(jī)上模擬出另一臺(tái)或多臺(tái)虛擬的計(jì)算機(jī)。用戶可在同一臺(tái)計(jì)算機(jī)上安裝多個(gè) Linux 或 Windows 發(fā)行版,提高工作效率。
本論文安裝的虛擬機(jī)軟件 VMware 版本為 14.1.1。適用安裝環(huán)境:Windows 7 64bit、Windows 10 64bit。
經(jīng)過(guò)篩選,我選擇了Ubuntu4.04.03,讓其成為我進(jìn)行嵌入式開(kāi)發(fā)的主機(jī)系統(tǒng)。Ubuntu 現(xiàn)今常用的嵌入式開(kāi)發(fā)主機(jī)系統(tǒng),它是基于Linux的一種開(kāi)源桌面操作系統(tǒng),該操作系統(tǒng)具有在Linux 環(huán)境下常用的軟件工具,其特點(diǎn)在于使用便捷,面向?qū)ο蠼缑嬗押玫忍攸c(diǎn)。我們經(jīng)常需要安裝多種多樣的開(kāi)發(fā)工具以便在Linux 環(huán)境下完成嵌入式開(kāi)發(fā),而Ubuntu 具有豐富的軟件庫(kù),同時(shí)開(kāi)發(fā)工具的安裝也相對(duì)簡(jiǎn)單,因此,對(duì)于嵌入式開(kāi)發(fā)環(huán)境的搭建來(lái)說(shuō)也比較簡(jiǎn)單快捷。在設(shè)計(jì)系統(tǒng)時(shí),軟件設(shè)計(jì)是最復(fù)雜,最主要也是最費(fèi)時(shí)的,同時(shí)軟件設(shè)計(jì)也直接影響到整個(gè)系統(tǒng)的正常運(yùn)行。根據(jù)之前的分析,我們需要的軟件操作系統(tǒng)在圖形用戶界面應(yīng)當(dāng)友好,并且需要具有穩(wěn)定性、安全性、高效性、簡(jiǎn)單操作性、強(qiáng)移植性等特點(diǎn)。
嵌入式系統(tǒng)主要分為嵌入式 Linux和嵌入式專(zhuān)用系統(tǒng)兩類(lèi)。根據(jù)對(duì)比我選擇了嵌入式Linux 系統(tǒng)來(lái)完成本文系統(tǒng)的開(kāi)發(fā)。綜上所述,本文選擇了Ubuntu 作為該嵌入式系統(tǒng)的操作系統(tǒng)。Ubuntu 是基于GNOME 桌面環(huán)境的Linux 操作系統(tǒng),具有開(kāi)源性。它在桌面應(yīng)用的普及上具有巨大的貢獻(xiàn)。對(duì)于普通的Linux 系統(tǒng)來(lái)說(shuō),Ubuntu的系統(tǒng)具有較高的易用性,在提高開(kāi)發(fā)效率的同時(shí)又極大地方便了用戶的操作。
由于嵌入式系統(tǒng)的硬件資源受限,常常需要在PC 平臺(tái)上建立交叉編譯環(huán)境。針對(duì) AM5728的開(kāi)發(fā)設(shè)計(jì),本文采用TL 提供的交叉編譯工具鏈,該交叉編譯工具的版本為gcc-6.2.1。在嵌入式系統(tǒng)中可執(zhí)行的二進(jìn)制文件需要由源文件轉(zhuǎn)變過(guò)來(lái),而這個(gè)轉(zhuǎn)變需要經(jīng)歷編譯、鏈接和重定位這三個(gè)過(guò)程。本文系統(tǒng)開(kāi)發(fā)過(guò)程中使用gcc 編譯器來(lái)完成上述轉(zhuǎn)變過(guò)程。gcc 編譯器是由GNU 推出的多平臺(tái)編譯器,其功能強(qiáng)大且可以將 C 語(yǔ)言、匯編語(yǔ)言程序以及目標(biāo)程序編譯鏈接成可執(zhí)行文件。根據(jù)本文使用的硬件平臺(tái),系統(tǒng)的交叉編譯工具鏈為arm-linux-gcc-6.2.1。
SecureCRT 是一款終端仿真程序,其不僅支持SSH 協(xié)議,同時(shí)也支持Telnet 和rlogin 協(xié)議,是在windows 系統(tǒng)下登錄unix的軟件,同時(shí)也可登錄Linux 服務(wù)器主機(jī)。SecureCRT 是一款理想的系統(tǒng)調(diào)試工具軟件。通過(guò)該軟件,我們可以通過(guò)串口或者網(wǎng)口鏈接主機(jī)系統(tǒng)和嵌入式系統(tǒng),可以傳輸加密文件,既可在命令行中運(yùn)行也可在瀏覽器中運(yùn)行,其具有應(yīng)用性強(qiáng),實(shí)用性強(qiáng)等特點(diǎn)。
在本論文中,我們主要通過(guò)SecureCRT 調(diào)試工具通過(guò)串口來(lái)對(duì)評(píng)估板系統(tǒng)信息進(jìn)行查看,對(duì)評(píng)估板系統(tǒng)進(jìn)行調(diào)試等。
系統(tǒng)程序流程如圖2所示,ARM 處理器接收到USB 攝像頭采集到的圖像,接收完畢后,將圖像分別傳輸?shù)絃CD顯示屏和IVA-HD 處理器。IVA-HD 處理器包含一套圖像的編解碼算法,將接收到的圖像進(jìn)行編解碼處理,處理完后的圖像去除了內(nèi)部的時(shí)間冗余和空間冗余信息,提高了系統(tǒng)的傳輸運(yùn)算效率。編解碼完成后圖像儲(chǔ)存并等待下一步處理。系統(tǒng)通過(guò)OpenCL 調(diào)用DSP 處理器讀取上述存儲(chǔ)的圖像,DSP 調(diào)用設(shè)置好的算法對(duì)圖像進(jìn)行算法處理,處理完成后將圖像返回給ARM端。ARM 處理器接收到上述返回的圖像后,將圖像發(fā)送到HDMI 顯示屏顯示。經(jīng)過(guò)測(cè)試,該系統(tǒng)程序在運(yùn)行過(guò)程中可以實(shí)現(xiàn)ARM端和DSP端的并行處理,大大提高了系統(tǒng)的處理速度和精確度。
圖2 系統(tǒng)程序流程圖
圖3 實(shí)物圖
圖4 GStreame 管道示意圖
系 統(tǒng) 使 用GStreamerAPI 創(chuàng) 建Pipeline, 并 使 用v4l2src、vpe(視頻處理引擎)、 ducatih264enc(H.264編 碼 器)、tee、udpsink、kmssink( 基 于 KMS/DRM的視頻接收器)、filesink 等插件鏈接到Pipeline,實(shí)現(xiàn)ARM端從V4L2 視頻設(shè)備節(jié)點(diǎn)獲取YUV 視頻流、視頻顯示、調(diào)用IVA-HD 進(jìn)行H.264 視頻硬件編碼、視頻保存、通過(guò)UDP網(wǎng)絡(luò)傳輸視頻等功能。
本系統(tǒng)支持display、save、dis-save 和udp 四種功能模式,具體說(shuō)明如下:
(1)display:視頻采集、顯示。(2)save:視頻采集后,進(jìn)行H.264 編碼并保存。(3)dis-save:視頻采集、顯示后,進(jìn)行H.264 編碼并保存。(4)udp:視頻采集后,進(jìn)行H.264編碼并通過(guò)UDP 網(wǎng)絡(luò)傳輸?shù)浇邮斩诉M(jìn)行解碼與顯示。
系統(tǒng)使用GStreamerAPI 通過(guò)ARM端從USB 攝像頭獲取MJPEG 格式視頻流,并調(diào)用IVA-HD 將視頻硬件解碼為NV12 格式,然后通過(guò)OpenCL 調(diào)用DSP端對(duì)NV12 格式圖像進(jìn)行Sobel(邊緣檢測(cè))算法處理,再將經(jīng)過(guò)處理的圖像在顯示屏中實(shí)時(shí)顯示,同時(shí)每隔1s 將最新的原始圖像以及經(jīng)過(guò)處理的圖像保存到本地存儲(chǔ)文件中。
Sobel 算法是邊緣檢測(cè)的一階算法,是一個(gè)離散性差分算子,它的用處是用于對(duì)圖像亮度函數(shù)的近似值的運(yùn)算[6]。對(duì)圖像的任何一點(diǎn)使用Sobel 算子,就會(huì)得到該點(diǎn)對(duì)應(yīng)的灰度矢量或法向量。Sobel 算子由2 組3×3的矩陣構(gòu)成,分別為橫向及縱向,將兩個(gè)矩陣分別與圖像作平面卷積運(yùn)算,就可分別得出橫向和縱向的亮度差分近似值[7]。如果以A 代表原始圖像,Gx 及Gy 分別代表經(jīng)橫向及縱向邊緣檢測(cè)的圖像灰度值,如式(1)、(2)所示。
在得到G的數(shù)值后就可以進(jìn)行閾值的比較,就是將定好的閾值與計(jì)算得到的定值進(jìn)行比較,梯度G 大于閾值的點(diǎn)就可以認(rèn)為該點(diǎn)為邊緣點(diǎn),同時(shí)將該點(diǎn)的值置為255,否則為置為0[8]。在中心像素梯度的計(jì)算過(guò)程中,與中心鄰近的像素點(diǎn)有更大的權(quán)值[9]。Sobel 算子既有邊緣檢測(cè)的功能又具有一定的平滑和降噪效果[10]。
為了驗(yàn)證系統(tǒng)的穩(wěn)定性與實(shí)時(shí)性,論文分別做了圖像采集、顯示與處理的功能測(cè)試以及時(shí)延測(cè)試。圖5(a)為采集到的原始圖像,圖5(b)為經(jīng)過(guò)邊緣檢測(cè)處理后的圖像。使用模塊采集PC 機(jī)顯示屏的在線秒表圖像,經(jīng)過(guò)AM5728 處理后再將圖像進(jìn)行顯示。PC 機(jī)顯示畫(huà)面與評(píng)估板顯示畫(huà)面的時(shí)間差,即為時(shí)延。進(jìn)行多次測(cè)試,時(shí)延結(jié)果取其平均值。通過(guò)時(shí)延測(cè)試發(fā)現(xiàn),該系統(tǒng)在對(duì)圖像進(jìn)行算法處理時(shí)雖然時(shí)延會(huì)有波動(dòng),但是波動(dòng)也在可控范圍中,并不會(huì)對(duì)處理結(jié)果產(chǎn)生影響。
圖5 原始圖與邊緣檢測(cè)圖
本文開(kāi)發(fā)測(cè)試的基于AM5728的嵌入式數(shù)字圖像處理系統(tǒng),擁有較高的計(jì)算性能,同時(shí)具有兼容性強(qiáng),穩(wěn)定性高的特點(diǎn),同時(shí)在功能擴(kuò)展上具有充足的靈活性,這主要在圖像處理應(yīng)用上得以體現(xiàn)。完全可以滿足嵌入式數(shù)字圖像處理應(yīng)用在現(xiàn)實(shí)中日益增長(zhǎng)的性能需求和功能需求。