羅茂元,胡春林
(1.電子科技大學(xué)物理電子學(xué)院,成都,610054;2.電子科技大學(xué)電子工程學(xué)院,成都,611731)
隨著社會和科技的發(fā)展,身份認(rèn)證的重要性日益顯現(xiàn)。在身份識別方式中,虹膜識別以其最精確、非接觸性等特點(diǎn),居于各種生物特征識別系統(tǒng)的首位。目前,虹膜識別系統(tǒng)實(shí)現(xiàn)平臺可分為基于PC機(jī)和基于嵌入式兩大類。前者主要用于大型管理系統(tǒng)等領(lǐng)域,結(jié)構(gòu)復(fù)雜,信息量大,體積大;而后者適用于小范圍認(rèn)證,信息處理量小,系統(tǒng)結(jié)構(gòu)較為簡單的領(lǐng)域,如高安全級別門禁系統(tǒng)等。
本課題重點(diǎn)研究在DM6446嵌入式虹膜系統(tǒng)的硬件平臺下,通過配置視頻前端寄存器,設(shè)計視頻驅(qū)動程序。其目的在于實(shí)現(xiàn)分辨率為640*480的虹膜視頻圖像的采集,并將捕獲到的虹膜圖像在DDR2內(nèi)存中保存,為后端的DSP虹膜算法提取特征值、完成相應(yīng)編碼提供基礎(chǔ)。
嵌入式DM6446處理器的視頻處理子系統(tǒng)模塊(VPSS)由用于視頻輸入及前端處理的視頻前端模塊(VPFE)和用于視頻顯示及后端處理的視頻后端模塊(VPBE)兩部分組成。
視頻處理前端(VPFE)主要由CCDC、IPIPE、IPIPEIF、H3A四個模塊組成。CCDC提供了一個連接圖像傳感器和數(shù)字視頻源的接口。在硬件設(shè)計上,將CCDC控制器與CMOS圖像傳感器芯片MT9T001相連接,通過設(shè)置CCDC相應(yīng)的寄存器,使只接收原始圖像/視頻數(shù)據(jù)圖像,而非多種形式的YUV視頻數(shù)據(jù),完成圖像的采集。如圖1所示,CMOS攝像頭原始圖像數(shù)據(jù)以RAW格式的視頻流通過粗實(shí)線路徑流向A2口,通過對下圖中3個寄存器的配置,可設(shè)置圖像數(shù)據(jù)采集的鎖存時刻、輸入數(shù)據(jù)傳遞是否按位取反以及數(shù)據(jù)比特數(shù)。
圖1 RAW模式下CCDC的配置
在圖2中,設(shè)置寄存器使A1路徑的YCC數(shù)據(jù)不能通過,A2路徑的RAW數(shù)據(jù)通過。由于后續(xù)均使用原始RAW圖像數(shù)據(jù),因此,不需圖像調(diào)節(jié)功能,其他寄存器均保持默認(rèn)值。RAW圖像數(shù)據(jù)經(jīng)粗實(shí)線路徑流到B端口。
圖2 RAW模式下數(shù)據(jù)選擇
CCDC控制器后端處理采集的視頻流不分奇偶場,如圖3所示,采用連續(xù)存儲模式將圖像原始數(shù)據(jù)存儲到DDR2內(nèi)存中,由寄存器DDR_ADDR.ADR的值決定每一幀圖像數(shù)據(jù)在實(shí)際物理內(nèi)存DDR2中的起始地址,設(shè)置SDOFST寄存器根據(jù)場的ID號確定奇偶行在DDR2內(nèi)存中額外偏移。
圖3 RAW模式下CCDC控制器后端處理
在Linux中,V4L2為Linux下的視頻設(shè)備程序開發(fā)提供了一套接口規(guī)范。本系統(tǒng)采用V4L2視頻驅(qū)動管理虹膜圖像傳感器MT9T001,視頻驅(qū)動的整體構(gòu)架主要由應(yīng)用程序、V4L2核心層、MT9T001驅(qū)動等組成,下面對相關(guān)構(gòu)架單元著重分析。
在Linux系統(tǒng)中視頻驅(qū)動子系統(tǒng)是圍繞struct video_device結(jié)構(gòu)體建立的,用于描述當(dāng)前視頻設(shè)備所支持的視頻功能和傳輸類型。在該結(jié)構(gòu)體中,主要包含三組不同的函數(shù)指針集,用于移植虹膜攝像頭的V4L2架構(gòu)驅(qū)動程序。
第一組函數(shù)指針針對V4L2自身架構(gòu)所設(shè)計,實(shí)現(xiàn)對不同的視頻設(shè)備進(jìn)行配置操作、輸入幀率控制以及其他操作,是API函數(shù)的核心。
第二組由release()函數(shù)作為一個函數(shù)指針,進(jìn)行整個結(jié)構(gòu)體銷毀工作。由于video_device是針對多個應(yīng)用層設(shè)備文件,如果在每次應(yīng)用程序調(diào)用完相應(yīng)的視頻設(shè)備后,就盡快對這一結(jié)構(gòu)體進(jìn)行銷毀,那么非常容易出現(xiàn)內(nèi)核不穩(wěn)定的情況,所以release()單獨(dú)作為一個函數(shù)指針。
第三組是常規(guī)的文件操作,根據(jù)實(shí)際設(shè)備進(jìn)行輸入或輸出,實(shí)現(xiàn)相應(yīng)函數(shù)內(nèi)部的具體功能。通過對該函數(shù)調(diào)用可對底層視頻設(shè)備進(jìn)行初始化控制、配置底層設(shè)備視頻圖像數(shù)據(jù)格式和視頻緩沖區(qū)的大小設(shè)置等。
V4L2視頻驅(qū)動位于應(yīng)用程序和硬件設(shè)備之間的中間層,它是一個兩層驅(qū)動系統(tǒng)。在實(shí)現(xiàn)內(nèi)核空間拷貝數(shù)據(jù)時,使用mmap函數(shù)轉(zhuǎn)換成應(yīng)用程序中的絕對地址,切換數(shù)據(jù)指針將內(nèi)核空間的視頻驅(qū)動圖像數(shù)據(jù)與用戶空間共享。
由于攝像頭采集圖像傳送數(shù)據(jù)的速度和DSP應(yīng)用程序處理速度不同,為避免視頻數(shù)據(jù)丟幀,上層和底層并行處理互不干擾,采用多級緩存方式實(shí)現(xiàn)FIFO視頻內(nèi)存管理。如圖4所示,在視頻緩沖區(qū)將視頻圖像分成多個同樣大小的緩存塊,當(dāng)視頻采集開始時,將采集數(shù)據(jù)存到DM6446輸入視頻端口的FIFO,先填寫第一個緩存塊bufferA,當(dāng)bufferA填滿后,DSP 發(fā)出信號產(chǎn)生EDMA 中斷,啟動EDMA 通道,搬運(yùn)FIFO中的bufferA圖像數(shù)據(jù),將其存入SDRAM中,等待圖像處理。在每場圖像采集完成后觸發(fā)VPORT中斷,中斷服務(wù)程序更新圖像存儲區(qū),EDMA 通道自動把指針指向第二個緩存塊bufferB,繼續(xù)采集另一場圖像,已完成的視頻緩存塊bufferA就作為了空閑模塊,歸還給輸入隊(duì)列以便再次使用,以此實(shí)現(xiàn)多個同樣大小的緩存塊交替接收數(shù)據(jù)。解決了攝像頭采集和DSP應(yīng)用并行處理且互不干擾。
圖4 采用多級緩存技術(shù)采集圖像示意圖
在DM6446 VPFE視頻驅(qū)動設(shè)計完成后,還需編寫視頻采集程序,通過調(diào)用V4L2控制命令字實(shí)現(xiàn)對視頻采集設(shè)備的控制,以驗(yàn)證驅(qū)動開發(fā)的正確性。
將V-MT9V0011 連接到DM6446的視頻處理前端,通過 UART0調(diào)試串口啟動嵌入式操作系統(tǒng),將視頻采集程序通過 tftp 下載至 DM6446 核心板中。在 PC 機(jī)上利用 VLC 播放器打開 RTSP 媒體流觀察輸出圖像,進(jìn)行初級測試。視頻捕捉結(jié)果如圖5所示,輸出圖像顯示統(tǒng)計幀率正常,最高到達(dá)60FPS的傳輸速度;圖像清晰、流暢。驗(yàn)證了本 DM6446 VPFE驅(qū)動的正確性。
圖5 采集到的虹膜圖像
綜上所述,本文以DM6446為開發(fā)平臺,實(shí)現(xiàn)了基于 V4L2 的視頻處理前端驅(qū)動的設(shè)計,并通過進(jìn)行視頻采集程序測試,證明其可以進(jìn)行長期、穩(wěn)定、實(shí)時的,對虹膜圖像數(shù)據(jù)進(jìn)行采集,并且并沒有圖像數(shù)據(jù)位置不正確或者是丟幀的情況出現(xiàn),到達(dá)了預(yù)期設(shè)計目的。
[1]朱瑞慧.基于局部特征分析的虹膜識別[D].天津:中國民航大學(xué),2006
[2]張彥龍.基于DM6446的立體圖像顯示系統(tǒng)和視頻捕捉系統(tǒng)的設(shè)計與實(shí)現(xiàn)[D].天津 天津大學(xué),2007
[3]杜春雷.ARM體系結(jié)構(gòu)與編程[M].1版.北京:清華大學(xué)出版社,2003
[4]XU FEN,ZENG JIAN-JUN,ZHANG YUN-LONG.Design of a DSP-based CMOS imaging system for embedded computer vision [C]//Proceedings of 2008 IEEE Conference on Cybernetics and Intelligent Systems.Washington, DC: IEEE Computer Society, 2008:430-433.