天天看點

阿裡視覺AI訓練營-day02-身份證識别系統搭建

本章内容出自《5天入門視覺AI》電子書,點選下載下傳完整版。

身份證識别系統搭建

在進行實踐之前,我們先看一下最終的效果,如下圖所示,該系統是一個簡單的身份證識别系統。

使用者上傳身份證人像面和國徽面之後,點選開始識别,就可以得到身份證正反面的内容了。

阿裡視覺AI訓練營-day02-身份證識别系統搭建

一、項目簡介

下圖是這個項目的檔案結構,它是通過spring-boot-starter建立的一個spring-boot項目。

阿裡視覺AI訓練營-day02-身份證識别系統搭建
項目中主要檔案的介紹如下:

Application:Spring-Boot的一個啟動類;
MainController:控制器層,負責模版的渲染、路由等功能;
OcrService:負責通過SDK調用視覺智能開放平台的OCR能力;
index.html:基于thymeleaf的前端模版;
application.properties:包含若幹配置項的配置檔案;
pom.xml:pom依賴。
           

二、如何擷取視覺智能開放平台提供的SDK?

進入到視覺智能開放平台的官網

https://vision.aliyun.com/

後往下拉,我們可以發現平台已經開放了包括人臉識别、文字識别、商品了解等在内的多項視覺AI能力,點選文字識别菜單,可以找到身份證識别項,然後我們點選進入,之後點選文檔連結檢視具體文檔。

阿裡視覺AI訓練營-day02-身份證識别系統搭建

在文檔頁面,我們點選SDK參考,可以看到有兩個Java的SDK說明,兩個SDK的差別主要是新的JavaSDK支援本地上傳圖檔,也就是說通過這個新的SDK可以直接把本地的圖檔交給視覺智能開放平台來進行OCR識别、人臉識别等任務。

阿裡視覺AI訓練營-day02-身份證識别系統搭建

點選Java(支援本地上傳)進入相應的說明頁,我們可以看出其中有很多SDK,我們需要找到需要的OCR SDK。如下圖所示,我們可以通過

https://mvnrepository.com/artifact/com.aliyun/ocr

來找到我們所需要的相應版本的SDK,然後擷取我們需要的Maven坐标。

阿裡視覺AI訓練營-day02-身份證識别系統搭建

在擷取了Maven坐标之後,如下圖所示,我們可以通過在pom.xml檔案中添加Maven依賴安裝java SDK,這樣便成功擷取到了視覺智能開放平台提供的SDK。

阿裡視覺AI訓練營-day02-身份證識别系統搭建

三、項目實作邏輯

(一)前端

前端的實作是基于thymeleaf做的一個模版,其頁面如下圖所示,包括一個标題、2個表單、2個上傳檔案的元件以及一個開始識别的按鈕。

阿裡視覺AI訓練營-day02-身份證識别系統搭建

下圖所示是相應的标題、表單和按鈕的實作代碼。這裡我們用到了bootstrap和jquery來進行頁面的美化,我們用代理的方式來實作美化,相當于我們點選“上傳人像面”的元件時候,會把表達上傳到input元件中,再把input中的内容傳給form表單,“上傳國徽面”也是如此。在input元件中,我們限制了可以上傳圖檔的類型,最前面還設定了一個alert,在使用者上傳的圖檔出現問題的時候會進行提示或者報錯。

阿裡視覺AI訓練營-day02-身份證識别系統搭建

下圖是在使用者上傳正确的圖檔并送出之後的相關代碼邏輯,主要分為兩部分:一是對上傳的圖檔進行展示,二是對OCR識别出的資訊進行展示,包括姓名、性别、民族、出生日期等資訊。

阿裡視覺AI訓練營-day02-身份證識别系統搭建

(二)控制層

控制層主要包括如下幾部分:

定義的若幹個私有成員;
MainCntroller;
saveFile;
index;
uploadFile。
           
阿裡視覺AI訓練營-day02-身份證識别系統搭建

(1)私有成員

私有成員變量如下圖所示,包括上傳圖檔檔案本地儲存位址(uploadDirectory)、調用視覺智能開放平台能力的封裝(ocrService)、上傳圖檔的緩存路徑位址(faceImage、backImage)、識别結果的緩存(faceResults、backResults)。

阿裡視覺AI訓練營-day02-身份證識别系統搭建

(2)MainController

MainController構造方法的代碼如下圖所示,其中file.upload.path變量是在配置檔案中的,是本機的一個上傳檔案的目錄位址,大家可以在實踐的時候根據自己的情況進行設定。這裡有個小技巧,這裡配置的目錄位址其實是項目target目錄下的一個子目錄,這是因為springboot會預設取target下的static目錄作為靜态檔案的位址,如果我們這麼設定的話,上傳和讀取檔案對應的是同一目錄,可以更友善的進行檔案的讀取和存儲操作。

阿裡視覺AI訓練營-day02-身份證識别系統搭建
阿裡視覺AI訓練營-day02-身份證識别系統搭建

(3)saveFile

saveFile是一個私有方法,用來儲存檔案,其代碼如下圖所示。

阿裡視覺AI訓練營-day02-身份證識别系統搭建

(4)index

index是一個控制方法,是一開始進入頁面時候用來加載模版的。首先是判斷faceImage和backImage緩存是否一樣,如果不一樣,就全部清除掉;其次就是将已經上傳的結果進行展示,起到一個重新重新整理頁面也不會丢失識别結果的作用。

阿裡視覺AI訓練營-day02-身份證識别系統搭建

(5)uploadFile

uploadFile也是一個控制方法,有三個參數,一個正面的人像面的檔案,一個背面的國徽面的檔案,還有一個用來重定向的參數。首先,判斷兩張圖檔是否是空的,如果是空的,将會重定向到index,相當于重新進入首頁,并且會有一個message來提示使用者必須要上傳一個檔案,否則是無效的;接下來判斷上傳目錄是否存在,如果不存在就遞歸的進行建立;然後如果人像面的檔案不為空,将其儲存到本地,緊接着調用視覺智能開放平台的能力去進行識别,在拿到結果之後将上傳的圖檔和識别結果加入到緩存池中,國徽面的處理方式也類似;最後幾行代碼是異常的處理,并且會告知使用者是哪種報錯。

阿裡視覺AI訓練營-day02-身份證識别系統搭建

(三)OcrService

CcrService的實作代碼如下所示。首先,是4個私有變量,ocrClient、runtime、accessKeyId和accessKeySecret,其中accessKeyId和accessKeySecret要在配置檔案中進行配置;其次是一個初始化方法,初始化Client和runtime;接下來是真正調用視覺智能開放平台身份證識别的方法,具體來說,在設定好request之後,我們将request和runtime作為參數傳遞給ocrClient來調用身份證識别的方法,之後我們得到相應的response,也就是識别的結果,之後我們将結果處理成哈希Map傳回給控制層。

阿裡視覺AI訓練營-day02-身份證識别系統搭建

控制層拿到傳回的結果之後,結合前端的優化進行結果的展示,至此,我們便完成了一個身份證識别系統的建構。