本章內容出自《5天入門視覺AI》電子書,點擊下載完整版。
身份證識別系統搭建
在進行實踐之前,我們先看一下最終的效果,如下圖所示,該系統是一個簡單的身份證識別系統。
用戶上傳身份證人像面和國徽面之後,點擊開始識別,就可以得到身份證正反面的內容了。
一、項目簡介
下圖是這個項目的文件結構,它是通過spring-boot-starter創建的一個spring-boot項目。
項目中主要文件的介紹如下:
Application:Spring-Boot的一個啟動類;
MainController:控制器層,負責模版的渲染、路由等功能;
OcrService:負責通過SDK調用視覺智能開放平臺的OCR能力;
index.html:基於thymeleaf的前端模版;
application.properties:包含若干配置項的配置文件;
pom.xml:pom依賴。
二、如何獲取視覺智能開放平臺提供的SDK?
進入到視覺智能開放平臺的官網https://vision.aliyun.com/ 後往下拉,我們可以發現平臺已經開放了包括人臉識別、文字識別、商品理解等在內的多項視覺AI能力,點擊文字識別菜單,可以找到身份證識別項,然後我們點擊進入,之後點擊文檔鏈接查看具體文檔。
在文檔頁面,我們點擊SDK參考,可以看到有兩個Java的SDK說明,兩個SDK的區別主要是新的JavaSDK支持本地上傳圖片,也就是說通過這個新的SDK可以直接把本地的圖片交給視覺智能開放平臺來進行OCR識別、人臉識別等任務。
點擊Java(支持本地上傳)進入相應的說明頁,我們可以看出其中有很多SDK,我們需要找到需要的OCR SDK。如下圖所示,我們可以通過https://mvnrepository.com/artifact/com.aliyun/ocr 來找到我們所需要的相應版本的SDK,然後獲取我們需要的Maven座標。
在獲取了Maven座標之後,如下圖所示,我們可以通過在pom.xml文件中添加Maven依賴安裝java SDK,這樣便成功獲取到了視覺智能開放平臺提供的SDK。
三、項目實現邏輯
(一)前端
前端的實現是基於thymeleaf做的一個模版,其頁面如下圖所示,包括一個標題、2個表單、2個上傳文件的組件以及一個開始識別的按鈕。
下圖所示是相應的標題、表單和按鈕的實現代碼。這裡我們用到了bootstrap和jquery來進行頁面的美化,我們用代理的方式來實現美化,相當於我們點擊“上傳人像面”的組件時候,會把表達上傳到input組件中,再把input中的內容傳給form表單,“上傳國徽面”也是如此。在input組件中,我們限制了可以上傳圖片的類型,最前面還設置了一個alert,在用戶上傳的圖片出現問題的時候會進行提示或者報錯。
下圖是在用戶上傳正確的圖片並提交之後的相關代碼邏輯,主要分為兩部分:一是對上傳的圖片進行展示,二是對OCR識別出的信息進行展示,包括姓名、性別、民族、出生日期等信息。
(二)控制層
控制層主要包括如下幾部分:
定義的若干個私有成員;
MainCntroller;
saveFile;
index;
uploadFile。
(1)私有成員
私有成員變量如下圖所示,包括上傳圖片文件本地保存地址(uploadDirectory)、調用視覺智能開放平臺能力的封裝(ocrService)、上傳圖片的緩存路徑地址(faceImage、backImage)、識別結果的緩存(faceResults、backResults)。
(2)MainController
MainController構造方法的代碼如下圖所示,其中file.upload.path變量是在配置文件中的,是本機的一個上傳文件的目錄地址,大家可以在實踐的時候根據自己的情況進行設置。這裡有個小技巧,這裡配置的目錄地址其實是項目target目錄下的一個子目錄,這是因為springboot會默認取target下的static目錄作為靜態文件的地址,如果我們這麼設置的話,上傳和讀取文件對應的是同一目錄,可以更方便的進行文件的讀取和存儲操作。
(3)saveFile
saveFile是一個私有方法,用來保存文件,其代碼如下圖所示。
(4)index
index是一個控制方法,是一開始進入頁面時候用來加載模版的。首先是判斷faceImage和backImage緩存是否一樣,如果不一樣,就全部清除掉;其次就是將已經上傳的結果進行展示,起到一個重新刷新頁面也不會丟失識別結果的作用。
(5)uploadFile
uploadFile也是一個控制方法,有三個參數,一個正面的人像面的文件,一個背面的國徽面的文件,還有一個用來重定向的參數。首先,判斷兩張圖片是否是空的,如果是空的,將會重定向到index,相當於重新進入首頁,並且會有一個message來提示用戶必須要上傳一個文件,否則是無效的;接下來判斷上傳目錄是否存在,如果不存在就遞歸的進行創建;然後如果人像面的文件不為空,將其保存到本地,緊接著調用視覺智能開放平臺的能力去進行識別,在拿到結果之後將上傳的圖片和識別結果加入到緩存池中,國徽面的處理方式也類似;最後幾行代碼是異常的處理,並且會告知用戶是哪種報錯。
(三)OcrService
CcrService的實現代碼如下所示。首先,是4個私有變量,ocrClient、runtime、accessKeyId和accessKeySecret,其中accessKeyId和accessKeySecret要在配置文件中進行配置;其次是一個初始化方法,初始化Client和runtime;接下來是真正調用視覺智能開放平臺身份證識別的方法,具體來說,在設置好request之後,我們將request和runtime作為參數傳遞給ocrClient來調用身份證識別的方法,之後我們得到相應的response,也就是識別的結果,之後我們將結果處理成哈希Map返回給控制層。
控制層拿到返回的結果之後,結合前端的優化進行結果的展示,至此,我們便完成了一個身份證識別系統的構建。