一、基本訴求
能夠通過調用阿裡達摩院視覺平台提供的API來識别出二代身份證關鍵字段内容,關鍵字段包括:姓名、性别、民族、身份證号、出生日期、位址資訊、有效起始時間、簽發機關,同時可輸出身份證區域位置和人臉位置資訊。
二、項目預覽
1.進入頁面

2.上傳身份證照片資訊界面。
3.識别之後的頁面
4.源碼展示
三、前期準備
1.檢視官方說明文檔
進入阿裡達摩院視覺識别平台(
https://vision.aliyun.com/),選擇能力廣場>文字識别>身份證識别。
2.檢視SDK執行個體文檔
3.擷取OCR的SDK的Maven坐标(Java)
傳送門通過文字識别中檢視産品文檔,得知SDK支援包括Java、Java(本地接入)、Python、Node.js、PHP四種常用語言。通過檢索Java(支援本地上傳)的SDK,擷取OCR的Maven代碼(version=1.0.3):
<artifactId>ocr</artifactId>
<version>1.0.3</version>
四、架構分析
建立Springboot項目,Application為啟動類;Controller為控制器層,負責模闆的渲染和路由等;Ocrservice負責通過SDK調用視覺識别的能力。上傳表單隻允許字尾為.jpg,.jpeg,.png的檔案,且不為空。
1.輸入限制:
- 圖檔格式:JPEG、JPG、PNG、BMP、GIF。
- 圖像大小:圖像大小不超過3M。
- 圖像分辨率:不限制圖檔分辨率,但圖檔分辨率太高可能會導緻API識别逾時,逾時時間為5秒。
- URL位址中不能包含中文字元。
五、示例代碼
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import java.util.*;
import com.aliyuncs.ocr.model.v20191230.*;
public class RecognizeIdentityCard {
public static void main(String[] args) {
DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", "<accessKeyId>", "<accessSecret>");
IAcsClient client = new DefaultAcsClient(profile);
RecognizeIdentityCardRequest request = new RecognizeIdentityCardRequest();
request.setRegionId("cn-shanghai");
request.setSide("face");
try {
RecognizeIdentityCardResponse response = client.getAcsResponse(request);
System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
}
代碼是Java的srping-boot項目
項目代碼下載下傳位址:https://github.com/aliyun/alibabacloud-viapi-demo?spm=a2c6h.12873639.0.0.c08529f2JzpdtR六、python代碼
1.準備工作
在安裝和使用阿裡雲SDK前,確定已經注冊阿裡雲賬号并生成通路密鑰(AccessKey)。
2.安裝Python SDK核心庫。
該SDK包為阿裡雲Java核心庫,無論使用哪個産品的SDK,都必須先#
3.安裝該核心庫。
使用依賴包工具安裝(推薦)。
4.執行如下指令,安裝阿裡雲SDK核心庫。
pip install aliyun-python-sdk-core
5.自行下載下傳安裝:使用git clone或其它方式從GitHub下載下傳aliyun-python-sdk-core并自行添加解決方案。
6.安裝視覺智能API相關服務Python SDK。
7.執行以下指令,安裝需要的SDK包。
僅安裝所需要的SDK包即可。
人臉人體:pip install aliyun-python-sdk-facebody
文字識别:pip install aliyun-python-sdk-ocr
商品了解:pip install aliyun-python-sdk-goodstech
内容安全:pip install aliyun-python-sdk-imageaudit
圖像識别:pip install aliyun-python-sdk-imagerecog
圖像生産:pip install aliyun-python-sdk-imageenhan
分割摳圖:pip install aliyun-python-sdk-imageseg
目标檢測:pip install aliyun-python-sdk-objectdet
圖像分析處理:pip install aliyun-python-sdk-imageprocess
視覺搜尋:pip install aliyun-python-sdk-imgsearch
視訊了解:pip install aliyun-python-sdk-videorecog
視訊生産:pip install aliyun-python-sdk-videoenhan
視訊分割:pip install aliyun-python-sdk-videoseg
自行下載下傳安裝:使用git clone或其它方式下載下傳SDK包并自行添加解決方案。詳細下載下傳位址如下所示。
AI類目 SDK連結 pypi連結
人臉人體 aliyun-python-sdk-facebody aliyun-python-sdk-facebody
文字識别 aliyun-python-sdk-ocr aliyun-python-sdk-ocr
商品了解 aliyun-python-sdk-goodstech aliyun-python-sdk-goodstech
内容安全 aliyun-python-sdk-imageaudit aliyun-python-sdk-imageaudit
圖像識别 aliyun-python-sdk-imagerecog aliyun-python-sdk-imagerecog
圖像生産 aliyun-python-sdk-imageenhan aliyun-python-sdk-imageenhan
分割摳圖 aliyun-python-sdk-imageseg aliyun-python-sdk-imageseg
目标檢測 aliyun-python-sdk-objectdet aliyun-python-sdk-objectdet
視覺搜尋 aliyun-python-sdk-imgsearch aliyun-python-sdk-imgsearch
圖像分析處理 aliyun-python-sdk-imageprocess aliyun-python-sdk-imageprocess
視訊生産 aliyun-python-sdk-videoenhan aliyun-python-sdk-videoenhan
視訊了解 aliyun-python-sdk-videorecog aliyun-python-sdk-videorecog
視訊分割 aliyun-python-sdk-videoseg aliyun-python-sdk-videoseg
8.代碼示例
# -*- coding: utf8 -*-
from aliyunsdkcore.client import AcsClient
from aliyunsdkimageenhan.request.v20190930 import MakeSuperResolutionImageRequest
from aliyunsdkimageenhan.request.v20190930 import ExtendImageStyleRequest
from aliyunsdkimageenhan.request.v20190930 import RecolorImageRequest
from aliyunsdkimageenhan.request.v20190930 import ChangeImageSizeRequest
from aliyunsdkimagerecog.request.v20190930 import RecognizeImageColorRequest
from aliyunsdkimagerecog.request.v20190930 import RecognizeImageStyleRequest
from aliyunsdkimagerecog.request.v20190930 import DetectImageElementsRequest
from aliyunsdkimagerecog.request.v20190930 import TaggingImageRequest
from aliyunsdkimagerecog.request.v20190930 import RecognizeSceneRequest
from aliyunsdkfacebody.request.v20191230 import DetectFaceRequest
from aliyunsdkfacebody.request.v20191230 import RecognizeFaceRequest
from aliyunsdkfacebody.request.v20191230 import CompareFaceRequest
from aliyunsdkocr.request.v20191230 import RecognizeCharacterRequest
from aliyunsdkocr.request.v20191230 import RecognizeTableRequest
from aliyunsdkocr.request.v20191230 import RecognizeIdentityCardRequest
from aliyunsdkocr.request.v20191230 import RecognizeBankCardRequest
from aliyunsdkocr.request.v20191230 import RecognizeBusinessCardRequest
from aliyunsdkocr.request.v20191230 import RecognizeAccountPageRequest
from aliyunsdkocr.request.v20191230 import RecognizeDriverLicenseRequest
from aliyunsdkocr.request.v20191230 import RecognizeDrivingLicenseRequest
from aliyunsdkocr.request.v20191230 import RecognizeLicensePlateRequest
from aliyunsdkocr.request.v20191230 import RecognizeVINCodeRequest
from aliyunsdkocr.request.v20191230 import RecognizeTaxiInvoiceRequest
from aliyunsdkocr.request.v20191230 import RecognizeTrainTicketRequest
from aliyunsdkocr.request.v20191230 import RecognizeBusinessLicenseRequest
from aliyunsdkocr.request.v20191230 import RecognizeStampRequest
from aliyunsdkgoodstech.request.v20191230 import ClassifyCommodityRequest
from aliyunsdkimageaudit.request.v20191230 import ScanImageRequest
from aliyunsdkimageseg.request.v20191230 import SegmentCommonImageRequest
from aliyunsdkimageseg.request.v20191230 import SegmentBodyRequest
from aliyunsdkimageseg.request.v20191230 import SegmentCommodityRequest
from aliyunsdkobjectdet.request.v20191230 import DetectMainBodyRequest
from aliyunsdkobjectdet.request.v20191230 import DetectVehicleRequest
# 建立 AcsClient 執行個體
client = AcsClient("<your-access-key-id>", "<your-access-key-secret>", "cn-shanghai")
# 清晰化/超分辨率
request = MakeSuperResolutionImageRequest.MakeSuperResolutionImageRequest()
request.set_Url("http://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/MakeSuperResolution/sup-dog.png")
response = client.do_action_with_exception(request)
print(response)
# 尺寸變換
request = ChangeImageSizeRequest.ChangeImageSizeRequest()
request.set_Url("https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/ChangeImageSize/change-image-size-src.png")
request.set_Width(500)
request.set_Height(600)
response = client.do_action_with_exception(request)
print(response)
# 圖像元素檢測
request = DetectImageElementsRequest.DetectImageElementsRequest()
request.set_Url("http://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/DetectImageElements/detect-elements-src.png")
response = client.do_action_with_exception(request)
print(response)
# 風格遷移
request = ExtendImageStyleRequest.ExtendImageStyleRequest()
request.set_StyleUrl("https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/ExtendImageStyle/styleUrl.jpeg")
request.set_MajorUrl("https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/ExtendImageStyle/majorUrl.jpeg")
response = client.do_action_with_exception(request)
print(response)
# 色闆識别
request = RecognizeImageColorRequest.RecognizeImageColorRequest()
request.set_Url("https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/RecolorImage/recolor-1-src.png")
request.set_ColorCount(3)
response = client.do_action_with_exception(request)
print(response)
# 風格識别
request = RecognizeImageStyleRequest.RecognizeImageStyleRequest()
request.set_Url("https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/RecognizeImageStyle/technology.png")
response = client.do_action_with_exception(request)
print(response)
# 色彩遷移
request = RecolorImageRequest.RecolorImageRequest()
#自動拓色
request.set_Mode("AUTO")
request.set_Url("https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/RecolorImage/recolor-1-src.png")
request.set_ColorCount(3)
response = client.do_action_with_exception(request)
print(response)
#參考圖拓色
request.set_Mode("REF_PIC")
request.set_RefUrl("https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/RecolorImage/recolor-1-src.png")
response = client.do_action_with_exception(request)
print(response)
#色闆拓色
request.set_Mode("TEMPLATE")
request.set_Url("https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/RecolorImage/recolor-2-src.png")
colorTemplateList = []
colorTemplateList.append({"Color": "FF0000"})
colorTemplateList.append({"Color": "00FF00"})
colorTemplateList.append({"Color": "0000FF"})
request.set_ColorTemplates(colorTemplateList)
response = client.do_action_with_exception(request)
print(response)
# 通用圖像打标
request = TaggingImageRequest.TaggingImageRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://xxx.oss-cn-shanghai.aliyuncs.com/xxx.jpg")
response = client.do_action_with_exception(request)
print(response)
# 場景識别
request = RecognizeSceneRequest.RecognizeSceneRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://xxx.oss-cn-shanghai.aliyuncs.com/xxx.jpg")
response = client.do_action_with_exception(request)
print(response)
# 人臉檢測定位
request = DetectFaceRequest.DetectFaceRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/SegmentCommonImage/segmengImage.png")
response = client.do_action_with_exception(request)
print(response)
# 人臉屬性識别
request = RecognizeFaceRequest.RecognizeFaceRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://xxx.oss-cn-shanghai.aliyuncs.com/xxx.jpg")
response = client.do_action_with_exception(request)
print(response)
# 人臉比對
request = CompareFaceRequest.CompareFaceRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURLA("https://xxx.oss-cn-shanghai.aliyuncs.com/xxx.jpg")
request.set_ImageURLB("https://xxx.oss-cn-shanghai.aliyuncs.com/xxx.jpg")
response = client.do_action_with_exception(request)
print(response)
# 通用識别
request = RecognizeCharacterRequest.RecognizeCharacterRequest();
request.set_MinHeight(10);
request.set_OutputProbability(True);
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://viapi-demo.oss-cn-shanghai-internal.aliyuncs.com/viapi-demo/images/RecognizeCharacter/recognizeCharacter_demo.jpg")
response = client.do_action_with_exception(request)
print(response)
# 表格識别
request = RecognizeTableRequest.RecognizeTableRequest();
request.set_UseFinanceModel(False);
request.set_AssureDirection(False);
request.set_HasLine(False);
request.set_SkipDetection(False);
request.set_OutputFormat("json");
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://xxx.oss-cn-shanghai.aliyuncs.com/xxx.jpg")
response = client.do_action_with_exception(request)
print(response)
# 身份證識别
request = RecognizeIdentityCardRequest.RecognizeIdentityCardRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/RecognizeIdentityCard/identityCard.jpg")
request.set_Side("face")
response = client.do_action_with_exception(request)
print(response)
# 銀行卡識别
request = RecognizeBankCardRequest.RecognizeBankCardRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/RecognizeBankCard/bankcard.jpg")
response = client.do_action_with_exception(request)
print(response)
# 名片識别
request = RecognizeBusinessCardRequest.RecognizeBusinessCardRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://xxx.oss-cn-shanghai.aliyuncs.com/xxx.jpg")
response = client.do_action_with_exception(request)
print(response)
# 戶口頁識别
request = RecognizeAccountPageRequest.RecognizeAccountPageRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://xxx.oss-cn-shanghai.aliyuncs.com/xxx.jpg")
response = client.do_action_with_exception(request)
print(response)
# 駕駛證識别
request = RecognizeDriverLicenseRequest.RecognizeDriverLicenseRequest();
request.set_Side("face")
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://xxx.oss-cn-shanghai.aliyuncs.com/xxx.jpg")
response = client.do_action_with_exception(request)
print(response)
# 行駛證識别
request = RecognizeDrivingLicenseRequest.RecognizeDrivingLicenseRequest();
request.set_Side("face")
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://xxx.oss-cn-shanghai.aliyuncs.com/xxx.jpg")
response = client.do_action_with_exception(request)
print(response)
# 車牌識别
request = RecognizeLicensePlateRequest.RecognizeLicensePlateRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://xxx.oss-cn-shanghai.aliyuncs.com/xxx.jpg")
response = client.do_action_with_exception(request)
print(response)
# VIN碼識别
request = RecognizeVINCodeRequest.RecognizeVINCodeRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://xxx.oss-cn-shanghai.aliyuncs.com/xxx.jpg")
response = client.do_action_with_exception(request)
print(response)
# 計程車發票識别
request = RecognizeTaxiInvoiceRequest.RecognizeTaxiInvoiceRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://xxx.oss-cn-shanghai.aliyuncs.com/xxx.jpg")
response = client.do_action_with_exception(request)
print(response)
# 火車票識别
request = RecognizeTrainTicketRequest.RecognizeTrainTicketRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://xxx.oss-cn-shanghai.aliyuncs.com/xxx.jpg")
response = client.do_action_with_exception(request)
print(response)
# 營業執照識别
request = RecognizeBusinessLicenseRequest.RecognizeBusinessLicenseRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://xxx.oss-cn-shanghai.aliyuncs.com/xxx.jpg")
response = client.do_action_with_exception(request)
print(response)
# 公章識别
request = RecognizeStampRequest.RecognizeStampRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://xxx.oss-cn-shanghai.aliyuncs.com/xxx.jpg")
response = client.do_action_with_exception(request)
print(response)
# 商品分類
request = ClassifyCommodityRequest.ClassifyCommodityRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/SegmentCommonImage/segmentimage-src-hu.jpeg")
response = client.do_action_with_exception(request)
print(response)
# 圖檔智能鑒黃
request = ScanImageRequest.ScanImageRequest();
scenes = []
scenes.append("porn")
request.set_Scenes(scenes)
tasks = []
## 如下url替換為自有的上海region的oss檔案位址
tasks.append({"DataId":"<your-data-id>", "ImageURL":"https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/ChangeImageSize/change-image-size-src.png"})
request.set_Tasks(tasks)
response = client.do_action_with_exception(request)
print(response)
# 通用分割
request = SegmentCommonImageRequest.SegmentCommonImageRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/SegmentCommonImage/segmentimage-src-hu.jpeg")
response = client.do_action_with_exception(request)
print(response)
# 人像分割
request = SegmentBodyRequest.SegmentBodyRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/SegmentBody/%E4%BA%BA%E5%83%8F%E5%88%86%E5%89%B2.png")
response = client.do_action_with_exception(request)
print(response)
# 商品分割
request = SegmentCommodityRequest.SegmentCommodityRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/SegmentCommodity/%E5%95%86%E5%93%81.png")
response = client.do_action_with_exception(request)
print(response)
# 主體檢測
request = DetectMainBodyRequest.DetectMainBodyRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/SegmentCommonImage/segmentimage-src-hu.jpeg")
response = client.do_action_with_exception(request)
print(response)
# 機動車檢測
request = DetectVehicleRequest.DetectVehicleRequest();
## 如下url替換為自有的上海region的oss檔案位址
request.set_ImageURL("https://xxx.oss-cn-shanghai.aliyuncs.com/xxx.jpg")
response = client.do_action_with_exception(request)
print(response)