張 嘉,李新增,康 鵬,金 婕
(上海工程技術(shù)大學(xué) 電子電氣工程學(xué)院,上海 201600)
身份證識別系統(tǒng)具有很強的現(xiàn)實應(yīng)用意義,現(xiàn)已被廣泛應(yīng)用于證券、保險、郵政、公安、海關(guān)、鐵路、民航、醫(yī)院、民政和教育等實名制及證件登記場所 。而且身份識別系統(tǒng)可以有效地實現(xiàn)遷移應(yīng)用,例如信用卡識別、車牌識別系統(tǒng)等。另一方面,第5代精簡指令系統(tǒng)(reduced instruction set computer-five,RISC-V)處理器因其開源、可擴展、便于移植等特點,越來越受到嵌入式系統(tǒng)開發(fā)的關(guān)注。
本文提出一種基于RISC-V處理器的便攜式身份證系統(tǒng)設(shè)計,在檢測算法上摒棄了傳統(tǒng)的圖像識別算法[1~4],采用方便快捷的TesserOCR識別引擎和人工智能領(lǐng)域的人工神經(jīng)網(wǎng)絡(luò)(artificial neural network,ANN)算法[5],使身份證識別準確度高且速度快。
RISC-V[6]最具代表性的為ARM架構(gòu)、RISC-V架構(gòu)以及每秒百萬指令(million instructions per second,MIPS)架構(gòu)。RISC相較于以x86架構(gòu)為代表的CISC(complex instruction set computer),具有指令更少,更易操作的特點。RISC-V架構(gòu)與ARM架構(gòu)相比,ARM因?qū)@?、授?quán)導(dǎo)致定制成本過高、靈活性不夠,且RISC-V架構(gòu)的面積功耗比更低,更為簡潔,由此芯片面積更小,在實際應(yīng)用領(lǐng)域中,其性價比將會更高。
本文采用了加州大學(xué)伯克利分校于2015年所開源的RISC-V核Rocket-chip[7],在該裸核的基礎(chǔ)上搭建片上系統(tǒng),即包括DDR2控制器、VGA顯示器、SD卡讀寫器等外圍設(shè)備,并生成了可下載于現(xiàn)場可編程門陣列(FPGA)板上的比特流文件進行板上開發(fā)。
SOC設(shè)計如圖1所示,由Rocket-chip核通過AXI4總線協(xié)議,與內(nèi)存接口生成器(memory interface generator,MIG)7系列(series)、BRAM Controller相連,其中,MIG 7series為DDR2控制器,BRAM Controller為塊RAM控制器,可以用VIVADO軟件中的IP核實現(xiàn)。PSOC是負責(zé)協(xié)調(diào)外設(shè)的控制器,目前掛在內(nèi)核上的外設(shè)為I2C接口、VGA接口、以太網(wǎng)接口和PS2等。
圖1 SOC設(shè)計
Rocket是一種采用RISC-V指令系統(tǒng)的開源處理器,它擁有5級流水線,且為單發(fā)射順序執(zhí)行的64位標量處理器。Rocket支持內(nèi)存管理單元和分頁虛擬內(nèi)存,具有兼容IEEE 754—2008標準的浮點處理單元。
Rocket內(nèi)部總線協(xié)議為TileLink協(xié)議,連接內(nèi)部核內(nèi)各個子模塊與計算核心Rocket Tile。計算核心中集成了指令緩沖器IBuf、控制與狀態(tài)寄存器(CSR),中斷單元(BPU),算術(shù)邏輯單元(ALU),乘除法器單元(MULDIV),浮點處理單元(FPU)等。由于CPU核內(nèi)部總線協(xié)議TileLink與外部總線協(xié)議AXI4不同,故在Rocket內(nèi)集成了MBUS和SBUS模塊,將TileLink總線協(xié)議轉(zhuǎn)化成AXI4協(xié)議,由此分別對應(yīng)了所引出Rocket核的外部引腳mem_axi4和mmio_axi4。
PSOC即Periphery SOC,其內(nèi)部集成了子模塊SD卡讀寫器、VGA顯示器、Ethernet、PS2鍵盤鼠標等模塊的接口控制器。與Rocket核相連的BRAM控制器(controller)通過PSOC與塊RAM,外圍設(shè)備搭建數(shù)據(jù)通路。外圍設(shè)備中,SD卡讀寫器采用SPI通信協(xié)議,VGA顯示器接口通過HSYNC和VSYNC信號線控制行與幀時序進行VGA顯示,Ethernet通過數(shù)字MAC,RGMII接口與PHY物理層與網(wǎng)絡(luò)端口進行通信,PS2通過ASCII碼轉(zhuǎn)換以及UART協(xié)議與PC端進行通信。
MIG7系列即為Xilinx公司的7系列開發(fā)板所使用的內(nèi)存控制器。MIG 7系列控制器在軟件VIVADO中創(chuàng)建,配置時鐘參數(shù)以及引腳約束后,需單獨編譯此內(nèi)存控制器IP核,編譯成功后則生成了可調(diào)用的MIG 7系列控制器IP核工程,在SOC設(shè)計工程中可直接添加此IP核。
基于TesserOCR識別引擎,進行身份證識別。在SOC系統(tǒng)搭建和操作系統(tǒng)移植之后,具備完整的RISC-V編譯器和鏈接器,在Python環(huán)境中選用TesserOCR識別引擎,實習(xí)身份證圖像識別,其流程圖如圖2所示。
圖2 基于TesserOCR的識別
在Python環(huán)境中,導(dǎo)入TesserOCR模塊之后,運用此模塊中的image_to_text函數(shù)可將導(dǎo)入的完整身份信息圖片中的18位字符識別出來,并返回識別結(jié)果。基于此方法所識別到的數(shù)字0~9以及字符X,在畫面較為清晰的情況下,可達到較高的精度。
人工神經(jīng)網(wǎng)絡(luò)[8]的身份證識別,需要調(diào)用Python軟件中的OpenCV庫[9],將已訓(xùn)練成功的神經(jīng)網(wǎng)絡(luò),用Python語言完成神經(jīng)網(wǎng)絡(luò)模型的搭建,完成身份證的識別。
由于每張身份證圖片中包含了18位數(shù)字或者17位數(shù)字和一位X字符,所以,在進行識別之前需要使用CV2模塊中的函數(shù)提取輪廓,將18個待識別的數(shù)字或字符一一分割并排序,然后使用傳統(tǒng)方法對圖片中的字符進行分割,保存于數(shù)組中供已訓(xùn)練好的人工神經(jīng)網(wǎng)絡(luò)識別。本文所提出的神經(jīng)網(wǎng)絡(luò)算法的具體流程如圖3所示,經(jīng)過反復(fù)嘗試后,創(chuàng)建了網(wǎng)絡(luò)框架,包括3層網(wǎng)絡(luò)即輸入層、中間層、輸出層。
圖3 神經(jīng)網(wǎng)絡(luò)算法識別
神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如表1所示,每一層的節(jié)點數(shù)即輸入層節(jié)點數(shù)為784,中間層節(jié)點數(shù)為60,輸出層節(jié)點數(shù)為11。其中,在圖片數(shù)據(jù)輸入網(wǎng)絡(luò)之前,已將18個數(shù)字或字符一一分割成28像素×28像素的圖片,故將單一圖片輸入網(wǎng)絡(luò)時,需要784個節(jié)點數(shù)與之對應(yīng)。中間層節(jié)點數(shù)在經(jīng)過多次校驗與調(diào)整之后,最終選擇了節(jié)點數(shù)60來進行像素點的篩選。網(wǎng)絡(luò)輸出分為數(shù)字0~9和字符X共11類故輸出層節(jié)點數(shù)定為11。
表1 神經(jīng)網(wǎng)絡(luò)
在SOC設(shè)計完成后,移植基于SD卡的Linux系統(tǒng)Debian,Linux操作系統(tǒng)移植步驟如圖4所示。
圖4 操作系統(tǒng)移植步驟
Linux操作系統(tǒng)可選擇多種啟動方式,具體的啟動方式由FPGA板上的開關(guān)(switch)控制,具體的Boot方式及選項如表2所示。在FPGA開發(fā)板中的Linux系統(tǒng)上,進行身份證識別算法的開發(fā)。本設(shè)計所采用的Debian操作系統(tǒng)版本為Linux GNU/buster。
表2 啟動方式與選項
本文提出的身份證識別系統(tǒng)是基于XILINX公司的XC7A100T_FPGA開發(fā)板Nexys4 DDR2,SOC使用VIVADO軟件設(shè)計并實現(xiàn),其在XC7A100T芯片的資源利用率如圖5所示。
圖5 資源利用情況
由于便攜式移動平臺端不僅需要連網(wǎng)下載圖片,也需要實時進行圖片的輸入,因此,本文設(shè)計了2種圖片輸入方式,即FTP服務(wù)器下載和OV5640攝像頭拍攝輸入。在板上系統(tǒng)內(nèi)通過FTP協(xié)議下載FTP服務(wù)器中的圖片,并進行識別和回傳識別結(jié)果。
由于身份證圖片的隱私性,本文所使用的身份證圖片數(shù)據(jù)集由自主創(chuàng)建并生成。在網(wǎng)絡(luò)訓(xùn)練之前,對自主創(chuàng)建的完整身份證號碼圖片進行分割,分割程序在Python環(huán)境中完成,包括了圖片的灰度化、二值化和輪廓提取等操作,之后返回字符并保存。
分割完成后的圖片包括了數(shù)字0~9以及字符X。每一類的圖片數(shù)量平均約為2 500張,即單個字符圖片數(shù)量為27 689張,分割之后的每張單個字符圖片分辨率為28×28×3。其中,每一類的標簽即為該類所在文件夾的文件夾名,在進行網(wǎng)絡(luò)訓(xùn)練時,可讀取該文件夾名作為對應(yīng)的標簽。本文將其中一小部分圖片作為網(wǎng)絡(luò)的測試集。
本文所提出的人工神經(jīng)網(wǎng)絡(luò)基于Python-OpenCV環(huán)境進行實驗,網(wǎng)絡(luò)參數(shù)的選擇比較重要。本設(shè)計采用的訓(xùn)練方法是反向傳播(back propagation,BP)法,并且設(shè)定該反向傳播中所需要的權(quán)重梯度更新參數(shù)為0.1,動量參數(shù)也為0.1。本設(shè)計所選用的訓(xùn)練停止條件為最大迭代次數(shù)或閾值,滿足其一則停止本次訓(xùn)練,其中最大迭代次數(shù)或閾值依次設(shè)定為500及0.01。在訓(xùn)練開始前,本設(shè)計設(shè)定了整體訓(xùn)練集的訓(xùn)練次數(shù)epoch為40,即整個數(shù)據(jù)集訓(xùn)練40次,之后即可保存已訓(xùn)練完成的模型參數(shù)以供識別。
本文提出了身份證識別系統(tǒng)設(shè)計開發(fā)平臺。
本文中所運行的Linux的內(nèi)核版本是4.18.0,GCC版本為7.2.0,該Linux系統(tǒng)可聯(lián)網(wǎng)。在PC的Windows系統(tǒng)中也可使用FLASH FXP與開發(fā)板進行數(shù)據(jù)傳輸?shù)取?/p>
實驗結(jié)果表明:本文所提出的基于FPGA的RISC-V架構(gòu)身份識別應(yīng)用系統(tǒng)有效實現(xiàn)了身份證號碼的分割與識別其中,所識別出的1 000張圖片信息已經(jīng)通過板上系統(tǒng)寫入.txt文件中,并通過FTP協(xié)議傳回至FTP服務(wù)器端,在服務(wù)器一一比對后得知該識別精度可達到98 %。而在FTP服務(wù)器端,VSFTPD擁有日志文件,可通過該日志文件中的時間戳,即登入登出服務(wù)器的時間點來確定識別過程的時長消耗。VSFTPD日志計算其時長可得出該識別方法的識別速度為0.197 fps,遠高于第一種圖像識別方法TesserOCR引擎。兩種識別算法結(jié)果比較如表3所示。
表3 兩種識別算法比較
本文基于FPGA平臺,搭建了基于RISC-V架構(gòu)的SOC,并在SOC上完成了身份證識別系統(tǒng)的設(shè)計。經(jīng)過比較,基于神經(jīng)網(wǎng)絡(luò)的識別算法具有更高的識別速度,為基于RISC-V的微系統(tǒng)開發(fā)和芯片設(shè)計奠定了基礎(chǔ)。