首頁>技術>

記得以前有個廣告詞叫:“學好數理化,走遍天下都不怕”,感覺應該再加一句:“帶上身份證”,本文我們看一下如何使用 Python 提取身份證資訊。

實現方式

實現方式大致可以分為兩種:

自己造輪子,如:使用 OpenCV 等自己編碼實現,該方式所有功能都需自己來實現,比較耗時耗力,優點是更靈活一些使用現成的輪子,如:百度雲,平臺已經實現好了核心功能,並對外提供了 API 介面,我們直接呼叫介面即可,該方式省時省力,但靈活性可能差一些實現過程

因為我們要實現的功能也比較簡單,這裡就用第二種方式來演示一下,下面簡單看一下實現過程。

SDK 安裝

百度雲 SDK 對多種語言提供了支援,這裡我們安裝 Python 版的 SDK,使用 pip install baidu-aip 命令即可,SDK 目錄結構如下:

├── README.md ├── aip // SDK 目錄 │ ├── __init__.py // 匯出類 │ ├── base.py // aip 基類 │ ├── http.py // http 請求 │ └── ocr.py //OCR └── setup.py // setuptools 安裝

建立應用

SDK 安裝好後,我們接著需要建立應用了,這裡需要一個百度賬號或百度雲賬號,如果沒有的話自己註冊一個即可,登入及註冊地址為: https://login.bce.baidu.com/?redirect=http%3A%2F%2Fcloud.baidu.com%2Fcampaign%2Fcampus-2018%2Findex.html ,具體過程與 車牌識別 基本類似,如果不清楚的話,可以看一下車牌識別這篇文章。

具體實現

我們先找一張身份證圖片,如圖所示:

接著看一下程式碼實現,首先建立 AipOcr,AipOcr 是 OCR 的 Python SDK 客戶端,程式碼實現如下:

# 自己的 APPID AK SK APP_ID = '自己的 App ID' API_KEY = '自己的 Api Key' SECRET_KEY = '自己的 Secret Key' client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

上面三個引數也可以參照 車牌識別 中的介紹。

資訊的提取有普通和高精度兩種模式,普通模式程式碼實現如下:

# 開啟並讀取檔案內容 fp = open("card.jpg", "rb").read() res = client.basicGeneral(fp) # 普通 # 遍歷結果 for tex in res["words_result"]: row = tex["words"] print(row)

輸出結果如下:

姓名韋小寶 性別男民族漢 出生1654年12月20日 住址北京市東城區景山前街4號 紫禁城敬事房 公民身份證號碼112441654122日2438

再來試一下高精度模式,程式碼實現如下:

# 開啟並讀取檔案內容 fp = open("card.jpg", "rb").read() res = client.basicAccurate(fp) # 高精度 # 遍歷結果 for tex in res["words_result"]: row = tex["words"] print(row)

輸出結果如下:

姓名韋小寶 性別男民族漢 出生1654年12月20日 住址北京市東城區景山前街4號 紫禁城敬事房 公民身份證號碼11204416541220243X

透過輸入結果我們可以看到:高精度模式提取了正確的身份證號碼,普通模式提取的身份證號碼是有一些誤差的。

總結

本文我們使用 Python 結合百度雲介面幾行程式碼就提取了身份證資訊,其實除了身份證資訊也可以提取其他卡片資訊,比如銀行卡資訊等,有興趣的可以試一下。

16
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 是否似曾相識?每個開發人員都犯過的十五個錯誤