張 嘉,李新增,康 鵬,金 婕
(上海工程技術大學 電子電氣工程學院,上海 201600)
身份證識別系統具有很強的現實應用意義,現已被廣泛應用于證券、保險、郵政、公安、海關、鐵路、民航、醫院、民政和教育等實名制及證件登記場所 。而且身份識別系統可以有效地實現遷移應用,例如信用卡識別、車牌識別系統等。另一方面,第5代精簡指令系統(reduced instruction set computer-five,RISC-V)處理器因其開源、可擴展、便于移植等特點,越來越受到嵌入式系統開發的關注。
本文提出一種基于RISC-V處理器的便攜式身份證系統設計,在檢測算法上摒棄了傳統的圖像識別算法[1~4],采用方便快捷的TesserOCR識別引擎和人工智能領域的人工神經網絡(artificial neural network,ANN)算法[5],使身份證識別準確度高且速度快。
RISC-V[6]最具代表性的為ARM架構、RISC-V架構以及每秒百萬指令(million instructions per second,MIPS)架構。RISC相較于以x86架構為代表的CISC(complex instruction set computer),具有指令更少,更易操作的特點。RISC-V架構與ARM架構相比,ARM因專利、授權導致定制成本過高、靈活性不夠,且RISC-V架構的面積功耗比更低,更為簡潔,由此芯片面積更小,在實際應用領域中,其性價比將會更高。
本文采用了加州大學伯克利分校于2015年所開源的RISC-V核Rocket-chip[7],在該裸核的基礎上搭建片上系統,即包括DDR2控制器、VGA顯示器、SD卡讀寫器等外圍設備,并生成了可下載于現場可編程門陣列(FPGA)板上的比特流文件進行板上開發。
SOC設計如圖1所示,由Rocket-chip核通過AXI4總線協議,與內存接口生成器(memory interface generator,MIG)7系列(series)、BRAM Controller相連,其中,MIG 7series為DDR2控制器,BRAM Controller為塊RAM控制器,可以用VIVADO軟件中的IP核實現。PSOC是負責協調外設的控制器,目前掛在內核上的外設為I2C接口、VGA接口、以太網接口和PS2等。

圖1 SOC設計
Rocket是一種采用RISC-V指令系統的開源處理器,它擁有5級流水線,且為單發射順序執行的64位標量處理器。Rocket支持內存管理單元和分頁虛擬內存,具有兼容IEEE 754—2008標準的浮點處理單元。
Rocket內部總線協議為TileLink協議,連接內部核內各個子模塊與計算核心Rocket Tile。計算核心中集成了指令緩沖器IBuf、控制與狀態寄存器(CSR),中斷單元(BPU),算術邏輯單元(ALU),乘除法器單元(MULDIV),浮點處理單元(FPU)等。由于CPU核內部總線協議TileLink與外部總線協議AXI4不同,故在Rocket內集成了MBUS和SBUS模塊,將TileLink總線協議轉化成AXI4協議,由此分別對應了所引出Rocket核的外部引腳mem_axi4和mmio_axi4。
PSOC即Periphery SOC,其內部集成了子模塊SD卡讀寫器、VGA顯示器、Ethernet、PS2鍵盤鼠標等模塊的接口控制器。與Rocket核相連的BRAM控制器(controller)通過PSOC與塊RAM,外圍設備搭建數據通路。外圍設備中,SD卡讀寫器采用SPI通信協議,VGA顯示器接口通過HSYNC和VSYNC信號線控制行與幀時序進行VGA顯示,Ethernet通過數字MAC,RGMII接口與PHY物理層與網絡端口進行通信,PS2通過ASCII碼轉換以及UART協議與PC端進行通信。
MIG7系列即為Xilinx公司的7系列開發板所使用的內存控制器。MIG 7系列控制器在軟件VIVADO中創建,配置時鐘參數以及引腳約束后,需單獨編譯此內存控制器IP核,編譯成功后則生成了可調用的MIG 7系列控制器IP核工程,在SOC設計工程中可直接添加此IP核。
基于TesserOCR識別引擎,進行身份證識別。在SOC系統搭建和操作系統移植之后,具備完整的RISC-V編譯器和鏈接器,在Python環境中選用TesserOCR識別引擎,實習身份證圖像識別,其流程圖如圖2所示。

圖2 基于TesserOCR的識別
在Python環境中,導入TesserOCR模塊之后,運用此模塊中的image_to_text函數可將導入的完整身份信息圖片中的18位字符識別出來,并返回識別結果?;诖朔椒ㄋR別到的數字0~9以及字符X,在畫面較為清晰的情況下,可達到較高的精度。
人工神經網絡[8]的身份證識別,需要調用Python軟件中的OpenCV庫[9],將已訓練成功的神經網絡,用Python語言完成神經網絡模型的搭建,完成身份證的識別。
由于每張身份證圖片中包含了18位數字或者17位數字和一位X字符,所以,在進行識別之前需要使用CV2模塊中的函數提取輪廓,將18個待識別的數字或字符一一分割并排序,然后使用傳統方法對圖片中的字符進行分割,保存于數組中供已訓練好的人工神經網絡識別。本文所提出的神經網絡算法的具體流程如圖3所示,經過反復嘗試后,創建了網絡框架,包括3層網絡即輸入層、中間層、輸出層。

圖3 神經網絡算法識別
神經網絡結構如表1所示,每一層的節點數即輸入層節點數為784,中間層節點數為60,輸出層節點數為11。其中,在圖片數據輸入網絡之前,已將18個數字或字符一一分割成28像素×28像素的圖片,故將單一圖片輸入網絡時,需要784個節點數與之對應。中間層節點數在經過多次校驗與調整之后,最終選擇了節點數60來進行像素點的篩選。網絡輸出分為數字0~9和字符X共11類故輸出層節點數定為11。

表1 神經網絡
在SOC設計完成后,移植基于SD卡的Linux系統Debian,Linux操作系統移植步驟如圖4所示。

圖4 操作系統移植步驟
Linux操作系統可選擇多種啟動方式,具體的啟動方式由FPGA板上的開關(switch)控制,具體的Boot方式及選項如表2所示。在FPGA開發板中的Linux系統上,進行身份證識別算法的開發。本設計所采用的Debian操作系統版本為Linux GNU/buster。

表2 啟動方式與選項
本文提出的身份證識別系統是基于XILINX公司的XC7A100T_FPGA開發板Nexys4 DDR2,SOC使用VIVADO軟件設計并實現,其在XC7A100T芯片的資源利用率如圖5所示。

圖5 資源利用情況
由于便攜式移動平臺端不僅需要連網下載圖片,也需要實時進行圖片的輸入,因此,本文設計了2種圖片輸入方式,即FTP服務器下載和OV5640攝像頭拍攝輸入。在板上系統內通過FTP協議下載FTP服務器中的圖片,并進行識別和回傳識別結果。
由于身份證圖片的隱私性,本文所使用的身份證圖片數據集由自主創建并生成。在網絡訓練之前,對自主創建的完整身份證號碼圖片進行分割,分割程序在Python環境中完成,包括了圖片的灰度化、二值化和輪廓提取等操作,之后返回字符并保存。
分割完成后的圖片包括了數字0~9以及字符X。每一類的圖片數量平均約為2 500張,即單個字符圖片數量為27 689張,分割之后的每張單個字符圖片分辨率為28×28×3。其中,每一類的標簽即為該類所在文件夾的文件夾名,在進行網絡訓練時,可讀取該文件夾名作為對應的標簽。本文將其中一小部分圖片作為網絡的測試集。
本文所提出的人工神經網絡基于Python-OpenCV環境進行實驗,網絡參數的選擇比較重要。本設計采用的訓練方法是反向傳播(back propagation,BP)法,并且設定該反向傳播中所需要的權重梯度更新參數為0.1,動量參數也為0.1。本設計所選用的訓練停止條件為最大迭代次數或閾值,滿足其一則停止本次訓練,其中最大迭代次數或閾值依次設定為500及0.01。在訓練開始前,本設計設定了整體訓練集的訓練次數epoch為40,即整個數據集訓練40次,之后即可保存已訓練完成的模型參數以供識別。
本文提出了身份證識別系統設計開發平臺。
本文中所運行的Linux的內核版本是4.18.0,GCC版本為7.2.0,該Linux系統可聯網。在PC的Windows系統中也可使用FLASH FXP與開發板進行數據傳輸等。
實驗結果表明:本文所提出的基于FPGA的RISC-V架構身份識別應用系統有效實現了身份證號碼的分割與識別其中,所識別出的1 000張圖片信息已經通過板上系統寫入.txt文件中,并通過FTP協議傳回至FTP服務器端,在服務器一一比對后得知該識別精度可達到98 %。而在FTP服務器端,VSFTPD擁有日志文件,可通過該日志文件中的時間戳,即登入登出服務器的時間點來確定識別過程的時長消耗。VSFTPD日志計算其時長可得出該識別方法的識別速度為0.197 fps,遠高于第一種圖像識別方法TesserOCR引擎。兩種識別算法結果比較如表3所示。

表3 兩種識別算法比較
本文基于FPGA平臺,搭建了基于RISC-V架構的SOC,并在SOC上完成了身份證識別系統的設計。經過比較,基于神經網絡的識別算法具有更高的識別速度,為基于RISC-V的微系統開發和芯片設計奠定了基礎。