談恩民,位慶海
(桂林電子科技大學(xué)電子工程與自動(dòng)化學(xué)院,廣西桂林 541004)
基于圖像數(shù)據(jù)封裝包文的數(shù)據(jù)采集方法
談恩民,位慶海
(桂林電子科技大學(xué)電子工程與自動(dòng)化學(xué)院,廣西桂林541004)
針對如何在工業(yè)應(yīng)用中找到一種實(shí)現(xiàn)周期更短和更低成本的圖像數(shù)據(jù)采集方法進(jìn)行了研究;通過分析以太網(wǎng)幀格式和JPEG圖像數(shù)據(jù)特點(diǎn),給出了一種對JPEG圖像幀進(jìn)行分片并對分片進(jìn)行數(shù)據(jù)封裝的方法,在此基礎(chǔ)之上實(shí)現(xiàn)了基于圖像數(shù)據(jù)封裝包文的數(shù)據(jù)采集設(shè)計(jì);最后在FPGA環(huán)境中對該設(shè)計(jì)進(jìn)行了實(shí)現(xiàn),此實(shí)現(xiàn)成功應(yīng)用到了工程項(xiàng)目當(dāng)中;實(shí)踐表明,基于圖像數(shù)據(jù)封裝包文的數(shù)據(jù)采集方法能夠在不添加外置存儲(chǔ)器等復(fù)雜器件的情況下實(shí)現(xiàn)穩(wěn)定的、實(shí)時(shí)的JPEG圖像數(shù)據(jù)采集。
JPEG;圖像采集;數(shù)據(jù)分片;數(shù)據(jù)封裝;FPGA
在工業(yè)現(xiàn)場,由于各種極端的環(huán)境和具體應(yīng)用需求,通常需要對工業(yè)設(shè)備或現(xiàn)場進(jìn)行實(shí)時(shí)的圖像采集。目前,國內(nèi)應(yīng)用于視頻監(jiān)控領(lǐng)域的圖像采集方案多采用CCD圖像傳感器+視頻解碼器(如SAA7113H)+FPGA/CPLD+DSP實(shí)現(xiàn),這種方案開發(fā)周期較長,并且在現(xiàn)有的通用圖像采集處理系統(tǒng)中,需要用幀緩存模塊對圖像數(shù)據(jù)整幀或多幀進(jìn)行存儲(chǔ),存儲(chǔ)設(shè)備一般采用SDRAM、SRAM等,這種大容量的高速存儲(chǔ)器件成本較高。
針對現(xiàn)有圖像采集方案所存在的問題,本文充分利用JPEG壓縮圖像數(shù)據(jù)量小的優(yōu)勢和FPGA的高速數(shù)據(jù)處理能力,提出了基于圖像數(shù)據(jù)封裝包文的數(shù)據(jù)采集方法,這種方法只需緩存數(shù)據(jù)包文而不需要對圖像數(shù)據(jù)的整幀進(jìn)行存儲(chǔ),從而可以不用外部存儲(chǔ)器。基于此實(shí)現(xiàn)了圖像傳感器(可直接驅(qū)動(dòng)輸出JPEG圖像)+FPGA+以太網(wǎng)的圖像采集方案,該方案實(shí)現(xiàn)簡單、開發(fā)周期短,并降低了開發(fā)成本。
1.1以太網(wǎng)幀格式簡介
以太網(wǎng)有多種幀格式,按照目前最常用的Ethernet V2標(biāo)準(zhǔn)的規(guī)定,以太網(wǎng)MAC幀長度要介于64~1 518 Byte之間,其數(shù)據(jù)部分要介于46~1 500Byte之間,當(dāng)數(shù)據(jù)字段的長度小于46字節(jié)時(shí),MAC子層就會(huì)在數(shù)據(jù)字段的后面填充無效數(shù)據(jù)以滿足數(shù)據(jù)幀長不小于64字節(jié)[7]。如圖1為以太網(wǎng)MAC幀格式,數(shù)據(jù)部分為實(shí)際需要傳輸?shù)目蛻魯?shù)據(jù),當(dāng)其字節(jié)數(shù)低于46時(shí),會(huì)包含一定的填充數(shù)據(jù)。以太網(wǎng)MAC層對數(shù)據(jù)添加一定的幀首和幀尾封裝為MAC幀數(shù)據(jù)報(bào)。
圖1 Ethernet V2標(biāo)準(zhǔn)MAC層幀格式(單位:Byte)
設(shè)MAC幀首、幀尾信息大小為Sh字節(jié),數(shù)據(jù)部分大小為Sc字節(jié),則實(shí)際數(shù)據(jù)報(bào)利用效率G=Sc/(Sh+Sc)??梢姰?dāng)Sh大小一定時(shí),Sc越小,數(shù)據(jù)報(bào)的利用率越低,相當(dāng)于網(wǎng)絡(luò)的有效負(fù)載越小,因此增大數(shù)據(jù)報(bào)長度可以提高網(wǎng)絡(luò)利用率。但在本文的實(shí)現(xiàn)方案中,圖像數(shù)據(jù)采集時(shí)一次性需發(fā)送的數(shù)據(jù)量越大,所需的緩存資源也越大,因本系統(tǒng)無外置存儲(chǔ)器,故需綜合考慮網(wǎng)絡(luò)利用率和硬件資源,本系統(tǒng)采用最大數(shù)據(jù)部分長度為256字節(jié)。
1.2JPEG圖像數(shù)據(jù)封裝
常見圖像傳感器的輸出圖像格式有RGB、YUV和JPEG等,JPEG是國際標(biāo)準(zhǔn)化組織(ISO)和CCITT聯(lián)合制定的靜態(tài)圖像的壓縮編碼標(biāo)準(zhǔn),它與RGB、YUV圖像相比有如下特點(diǎn):
1)JPEG數(shù)據(jù)量大幅縮小,使用有損壓縮時(shí),在壓縮比25:1的情況下,壓縮后的圖像與原始圖像相比,視覺上很難看出區(qū)別[8];
2)由于JPEG壓縮編碼過程中涉及到熵編碼(一般采用霍夫曼編碼),其圖像幀的數(shù)據(jù)量是不確定的[9];
3)JPEG圖像幀的起始并不是由行同步信號(HS)和場同步信號(VS)確定,而是由特定字節(jié)標(biāo)示,16進(jìn)制數(shù)據(jù)FFD8表示開始,F(xiàn)FD9表示結(jié)束[10]。
為了實(shí)現(xiàn)基于圖像數(shù)據(jù)包文的數(shù)據(jù)采集,在數(shù)據(jù)經(jīng)以太網(wǎng)傳輸之前,需要對圖像幀數(shù)據(jù)進(jìn)行分片、封裝,在封裝的過程中,也實(shí)現(xiàn)了數(shù)據(jù)發(fā)送端和接收端的通信協(xié)議。如圖2為本圖像采集系統(tǒng)采用的數(shù)據(jù)封裝包文格式。
圖2 數(shù)據(jù)封裝包文格式
包文中各部分的含義如下:
1)有效長度:指示數(shù)據(jù)封裝包的有效數(shù)據(jù)字節(jié)數(shù),如上即為包文類型、包文數(shù)據(jù)、CRC校驗(yàn)碼的字節(jié)數(shù)總和,在數(shù)據(jù)接收端,先接收此字節(jié),然后根據(jù)此字節(jié)的指示確定接收數(shù)據(jù)的長度;
2)包文類型:用于標(biāo)示數(shù)據(jù)源或目的,如0x01標(biāo)示攝像頭1的數(shù)據(jù),0x02標(biāo)示攝像頭2的數(shù)據(jù);
3)圖像數(shù)據(jù):實(shí)際需要傳輸?shù)腏PEG數(shù)據(jù);
4)CRC16校驗(yàn)碼:根據(jù)包文數(shù)據(jù)生成的16bit的CRC校驗(yàn)碼,用于接收端對接收的包文數(shù)據(jù)進(jìn)行校驗(yàn),當(dāng)校驗(yàn)不通過時(shí),進(jìn)行錯(cuò)誤包文統(tǒng)計(jì)并對當(dāng)前圖像幀作出相應(yīng)處理。
1.3不定長數(shù)據(jù)封裝的實(shí)現(xiàn)算法與實(shí)現(xiàn)流程
在對數(shù)據(jù)進(jìn)行封裝時(shí),封裝包文長度的確定,要綜合考慮以太網(wǎng)幀格式和JPEG圖像幀數(shù)據(jù)總量不確定的特點(diǎn)。在對JPEG圖像幀取某定長分片時(shí)(如256 Byte),因其幀數(shù)據(jù)總量不確定,那么最后一個(gè)分片的長度也不確定,此時(shí)就會(huì)出現(xiàn)低于46 Byte的圖像包文,這樣的包文可以直接發(fā)送,但是以太網(wǎng)端填充的無效數(shù)據(jù)會(huì)浪費(fèi)以太網(wǎng)帶寬。為了避免小于46 Byte的包文出現(xiàn),本系統(tǒng)提出了如下不定長的數(shù)據(jù)封裝方法,實(shí)現(xiàn)更高效的數(shù)據(jù)傳輸。
設(shè)定最長包文長度是最短包文長度的2倍。設(shè)允許的最小包文長度為K(不小于46 Byte),則最長包文長度為2 K(不大于1 500 Byte),包文中添加的包頭、包尾字節(jié)數(shù)之和為C,封裝后的包文格式如圖3所示。
圖3 不定長數(shù)據(jù)封裝包文格式
取最短、最長包文圖像數(shù)據(jù)部分長度分別為P min、P max,圖像數(shù)據(jù)部分長度之和為R,則
圖像數(shù)據(jù)的采集時(shí),到來的圖像數(shù)據(jù)先存于緩存中,打包時(shí)根據(jù)需要從緩存中取一定量的數(shù)據(jù)。設(shè)在圖像數(shù)據(jù)的緩存中,所統(tǒng)計(jì)的當(dāng)前圖像幀數(shù)據(jù)總量為M,則我們對包文的圖像數(shù)據(jù)部分長度N按照以下公式取值:
式中,N為0表示不進(jìn)行數(shù)據(jù)封裝操作,設(shè)最終的包文長度為P,則
P=N+C
可以驗(yàn)證各式中P的取值范圍:
表1 包文長度P取值范圍
C的值遠(yuǎn)小于K,通過上表分析可知此時(shí)P的最小值為K,最大值為2K,即經(jīng)過以上處理算法,所有數(shù)據(jù)包文的長度都介于K-2K之間,且沒有無效數(shù)據(jù)的填充,達(dá)到了預(yù)定的目的。
為便于不定長數(shù)據(jù)封裝方法的進(jìn)一步闡明,取K為128 Byte(此時(shí)包文長度最小值為128 Byte,最大值為256 Byte),取C為4 Byte,即假設(shè)打包時(shí)添加的包頭、包尾數(shù)據(jù)字節(jié)數(shù)之和為4。在這種情況下,以上算法的實(shí)現(xiàn)流程如圖4所示。
圖4 不定長數(shù)據(jù)封裝方法的實(shí)現(xiàn)流程圖
2.1系統(tǒng)功能
系統(tǒng)實(shí)現(xiàn)雙攝像頭的圖像采集功能。攝像頭圖像數(shù)據(jù)經(jīng)FPGA采集處理后,經(jīng)以太網(wǎng)傳輸給上位機(jī),上位機(jī)端對接收的JPEG數(shù)據(jù)進(jìn)行解碼并實(shí)時(shí)顯示,同時(shí)上位機(jī)也具有對下位機(jī)的配置或控制功能,系統(tǒng)功能框圖如圖5所示。
圖5 系統(tǒng)功能框圖
2.2系統(tǒng)硬件結(jié)構(gòu)
系統(tǒng)中,攝像頭采用OV公司的OV2640圖像傳感器,該圖像傳感器在FPGA的驅(qū)動(dòng)下,可直接輸出JPEG圖像,開發(fā)周期短且性能穩(wěn)定,輸出圖像最大支持UXGA(1600×1200分辨率)、15fps。采集的圖像采用TCP協(xié)議經(jīng)以太網(wǎng)傳輸,本系統(tǒng)采用TCP/IP協(xié)議棧芯片W5300實(shí)現(xiàn)高速硬件以太網(wǎng)解決方案,此方案具有較短的開發(fā)周期與較高的彈性,而且能夠增加穩(wěn)定性與有效降低主CPU負(fù)擔(dān),模塊化的設(shè)計(jì)也便于以后系統(tǒng)的升級。主處理器采用Altera的Cyclone IV系列FPGA芯片EP4CE6E22C8,Cyclone IV系列是Altera的低成本FPGA系列,采用經(jīng)過優(yōu)化的60nm低功耗工藝,實(shí)現(xiàn)了低功耗、高性能和低成本的綜合。系統(tǒng)硬件結(jié)構(gòu)如圖6所示。
圖6 系統(tǒng)硬件結(jié)構(gòu)
系統(tǒng)初次工作,通過JTAG接口完成系統(tǒng)的配置,此后系統(tǒng)上電由EPCS4SI8N完成系統(tǒng)的自動(dòng)配置。
2.3系統(tǒng)實(shí)現(xiàn)
FPGA功能模塊的實(shí)現(xiàn)框圖如圖7所示,系統(tǒng)工作時(shí),由W5300配置模塊完成對W5300的配置,實(shí)現(xiàn)TCP協(xié)議的以太網(wǎng)通信,然后PC上位機(jī)發(fā)送配置命令,經(jīng)以太網(wǎng)傳輸給FPGA,F(xiàn)PGA對配置命令進(jìn)行解析并完成對兩路OV2640攝像頭的配置,OV2640按照具體配置輸出JPEG圖像數(shù)據(jù),再由FPGA完成對圖像數(shù)據(jù)的分片、封裝處理,經(jīng)過處理的兩路圖像數(shù)據(jù)最終經(jīng)以太網(wǎng)傳輸給上位機(jī)分別顯示,上位機(jī)端在對圖像實(shí)時(shí)顯示的同時(shí)可以隨時(shí)發(fā)送控制命令,并經(jīng)指令解析模塊解析,完成暫停某路圖像的接收、改變圖像輸出分辨率、幀率等功能。
數(shù)據(jù)封裝模塊完成圖像幀的分片、封裝功能,將采集到的原始圖像幀數(shù)據(jù)轉(zhuǎn)化為若干圖像包文,是實(shí)現(xiàn)基于圖像分片封裝包文的核心,下面對該模塊的實(shí)現(xiàn)進(jìn)行說明。
圖7 FPGA功能模塊實(shí)現(xiàn)框圖
在FPGA中,用兩個(gè)FIFO分別對兩路圖像數(shù)據(jù)進(jìn)行緩存,具體實(shí)現(xiàn)時(shí),不定長數(shù)據(jù)封裝方法的K和C的值以及FIFO的寬度、深度均以參數(shù)化定義,這樣可以很方便的調(diào)整數(shù)據(jù)封裝包的格式。本系統(tǒng)實(shí)現(xiàn)時(shí),取K值為128 Byte,考慮到一定的數(shù)據(jù)突發(fā)因素,取單個(gè)FIFO深度為1 024、寬度為10(幀開始、結(jié)束各1 bit,圖像數(shù)據(jù)8 bit)。實(shí)現(xiàn)框圖如圖8所示。
圖8 不定長數(shù)據(jù)封裝方法FPGA實(shí)現(xiàn)框圖
上述方法中,數(shù)據(jù)緩存的讀寫兩側(cè)是相互獨(dú)立的,可以同時(shí)進(jìn)行,這符合圖像數(shù)據(jù)隨時(shí)到來的特點(diǎn),因此數(shù)據(jù)段打包不會(huì)影響圖像數(shù)據(jù)的傳輸速度。但須注意,使用前述不定長數(shù)據(jù)封裝的M是當(dāng)前幀的數(shù)據(jù)總量,而非緩存中有數(shù)據(jù)的總量,因?yàn)閳D像數(shù)據(jù)是隨時(shí)到來的,若當(dāng)前圖像幀數(shù)據(jù)尚未封裝完畢,而下一幀圖像又到來時(shí),緩存中將同時(shí)存在兩幀的圖像數(shù)據(jù)。
動(dòng)態(tài)包長模塊即是根據(jù)前述不定長數(shù)據(jù)封裝算法實(shí)現(xiàn)。在FPGA中,它依據(jù)數(shù)據(jù)封裝模塊是否空閑以及FIFO中當(dāng)前圖像幀的數(shù)據(jù)量產(chǎn)生讀FIFO數(shù)據(jù)長度值,因?yàn)橄到y(tǒng)有兩個(gè)FIFO,實(shí)現(xiàn)時(shí)要根據(jù)具體FIFO中的數(shù)據(jù)量選擇所讀取的FIFO,若兩個(gè)FIFO中的數(shù)據(jù)均滿足取數(shù)據(jù)要求,則對兩個(gè)FIFO進(jìn)行輪流選擇。所讀的FIFO以及讀數(shù)據(jù)量確定后,F(xiàn)IFO根據(jù)給定的長度值輸出指定長度的圖像數(shù)據(jù);CRC16碼生成模塊產(chǎn)生輸出圖像數(shù)據(jù)的CRC16校驗(yàn)碼;最終,圖像數(shù)據(jù)經(jīng)數(shù)據(jù)封裝模塊添加相應(yīng)的包頭、包尾生成圖像包文。
如圖9為Singal TapⅡ邏輯分析工具對某幀輸出圖像最后兩個(gè)封裝包文的實(shí)時(shí)波形抓取,該圖像幀結(jié)束標(biāo)志(img_ eop)到來前,包文長度(pck_cnt)均為256 Byte,圖像幀結(jié)束標(biāo)志(img_eop)到來時(shí),剩余當(dāng)前幀數(shù)據(jù)段長度(fifo_ num)為287 Byte,在不定長數(shù)據(jù)打包方法下,分兩次發(fā)送完成,先后兩次所取圖像數(shù)據(jù)量(pck_img_num)分別為144、143,包文長度 (pck_cnt)字節(jié)數(shù)分別為148、147。這樣就完成了對一幀數(shù)據(jù)的完整分片、封裝。
最后圖像幀數(shù)據(jù)以圖像包文為單位傳輸給W5300接口,經(jīng)以太網(wǎng)傳輸給上位機(jī),上位機(jī)端根據(jù)發(fā)送端的數(shù)據(jù)封裝協(xié)議提取圖像數(shù)據(jù),并對數(shù)據(jù)分片進(jìn)行重組,最后對重組的JPEG圖像幀進(jìn)行解碼并實(shí)時(shí)顯示,完成了圖像采集任務(wù)。
圖9 Singal TapⅡ?qū)崟r(shí)波形抓取
本文所提出的JPEG圖像采集方案,整體硬件結(jié)構(gòu)簡單、實(shí)現(xiàn)方便,大大縮短了項(xiàng)目開發(fā)周期,同時(shí),在硬件處理速度與資源足夠時(shí),本方案能夠在不添加任何額外硬件的前提下實(shí)現(xiàn)攝像頭的擴(kuò)展。本文所提出的方法在基于FPGA的工業(yè)相機(jī)項(xiàng)目中得到了應(yīng)用,實(shí)踐證明,本方案性能穩(wěn)定,能夠滿足具體應(yīng)用環(huán)境的需求。
[1]王巧玉.基于FPGA的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng) [D].西安:西安電子科技大學(xué),2011.
[2]付強(qiáng),夏靖波,楊軍.基于FPGA的多路圖像采集系統(tǒng)的軟件設(shè)計(jì)[J].電子設(shè)計(jì)工程,2011,19(3):174-177.
[3]牛彥明,史忠科.基于DSP和FPGA的多路圖像信息提取系統(tǒng)設(shè)計(jì)[J].彈箭與制導(dǎo)學(xué)報(bào),2007,27(5):341-343,346.
[4]彭加進(jìn).基于JPEG圖像壓縮的嵌入式視頻采集處理系統(tǒng)[D].南京:河海大學(xué),2007.
[5]張小琴.基于FPGA的高速圖像數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[D].武漢:武漢理工大學(xué),2010.
[6]龔濤.基于FPGA的圖像采集處理系統(tǒng)[D].武漢:華中科技大學(xué),2005.
[7]范興剛,孫優(yōu)賢.以太網(wǎng)幀[J].工業(yè)控制計(jì)算機(jī),2002,15(10):29-31.
[8]唐賽明.基于FPGA的JPEG壓縮編碼的研究與實(shí)現(xiàn)[D].長沙:湖南大學(xué),2007.
[9]張?jiān)獋?,劉彥?基于JPEG標(biāo)準(zhǔn)的靜態(tài)圖像壓縮算法研究[J].電子設(shè)計(jì)工程,2010,18(2):78-80.
[10]邢賽鵬,平西建,詹杰勇.JPEG圖像數(shù)據(jù)格式簡明分析[J].微計(jì)算機(jī)信息,2005(36):166-168.
Data Acquisition Method Based on Image Data Encapsulation
Tan Enmin,Wei Qinghai
(School of Electronic Engineering and Automation,Guilin University of Electronic Technology,Guilin541004,China)
How to find an implementation for a shorter period and lower cost of image data acquisition method in industrial applications were studied.By analyzing the Ethernet frame format and JPEG image data characteristics,given a JPEG image frames of fragmentation and the fragmentation data encapsulation method,on this basis to realize the data acquisition method based on the packet of image data encapsulation.Finally the design was implemented in the FPGA environment,and this implementation was successfully applied to the project.Practice shows that the proposed method can achieve stability and real-time JPEG image data acquisition without adding external memory devices and other complex devices.
JPEG;image data acquisition;data fragmentation;data encapsulation;FPGA
1671-4598(2016)05-0169-04
10.16526/j.cnki.11-4762/tp.2016.05.049
TP274.2
A
2015-10-14;
2015-12-18。
國家自然科學(xué)基金(61306024);國家自然科學(xué)基金(61376024)。
談恩民(1966-),男,河南光山人,博士,教授,主要從事現(xiàn)代測試?yán)碚?、電路可測試性設(shè)計(jì)、計(jì)算機(jī)輔助測試方向的研究。