Python SDK
本章节介绍人证核身服务Python SDK,您可以参考本章节进行快速集成开发。
准备工作
- 注册华为账号并开通华为云,并完成实名认证,账号不能处于欠费或冻结状态。
- 已开通人证核身服务。如未开通,请登录人证核身管理控制台开通所需服务。
- 已具备开发环境,支持Python3及以上版本。
- 登录“我的凭证 > 访问秘钥”页面,获取Access Key(AK)和Secret Access Key(SK)。
图1 获取AK、SK
- 登录“我的凭证”页面,获取“IAM用户名”“、账号名”以及待使用区域的“项目ID”。调用服务时会用到这些信息,请提前保存。
本样例以“华北-北京四”区域为例,获取对应的项目ID(project_id)。
图2 我的凭证
安装SDK
支持Python3及以上版本,执行python --version检查当前Python的版本信息。
使用SDK前,需要安装“huaweicloudsdkcore”和“huaweicloudsdkivs”。
# 安装核心库 pip install huaweicloudsdkcore # 安装 IVS 服务库 pip install huaweicloudsdkivs
开始使用SDK
- 导入依赖模块
from huaweicloudsdkcore.auth.credentials import BasicCredentials from huaweicloudsdkcore.exceptions import exceptions # 导入IVS的库 from huaweicloudsdkivs.v2.region.ivs_region import IvsRegion from huaweicloudsdkivs.v2 import * import os
- 配置认证信息
配置AK、SK信息。华为云通过AK识别用户的身份,通过SK对请求数据进行签名验证,用于确保请求的机密性、完整性和请求者身份的正确性。AK、SK获取方法请参见准备工作。
// 创建AK、SK认证凭据 def GetCredential(): return BasicCredentials(ak, sk)
初始化认证信息:
ak = os.environ.get("HUAWEICLOUD_SDK_AK") sk = os.environ.get("HUAWEICLOUD_SDK_SK") credentials = GetCredential(ak, sk)
- 认证用的 ak 和sk 硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。
- 本示例以 ak 和 sk 保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
图3 Windows环境新建环境变量
- 初始化客户端
# 选择服务部署区域 def GetClient(): return IvsClient.new_builder(IvsClient) \ .with_credentials(credentials) \ .with_region(IvsRegion.CN_NORTH_4) \ .build()
CN_NORTH_4:华北-北京四
CN_NORTH_1:华北-北京一
- 发送请求并查看响应
# 以调用标准版(三要素)接口 DetectStandardByIdCardImage 为例 request = DetectStandardByIdCardImageRequest() response = client.detect_standard_by_id_card_image(request) print(response)
- 异常处理
表1 异常处理 一级分类
一级分类说明
二级分类
二级分类说明
ConnectionException
连接类异常
HostUnreachableException
网络不可达、被拒绝。
SslHandShakeException
SSL认证异常。
RequestTimeoutException
响应超时异常
CallTimeoutException
单次请求,服务器处理超时未返回。
RetryOutageException
在重试策略消耗完成后,仍无有效的响应。
ServiceResponseException
服务器响应异常
ServerResponseException
服务端内部错误,Http响应码:[500,]。
ClientRequestException
请求参数不合法,Http响应码:[400, 500)
# 异常处理 try: request = DetectStandardByIdCardImageRequest() response = client.detect_standard_by_id_card_image(request) print(response) except exceptions.ClientRequestException as e: print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)
使用异步客户端,配置日志等操作请参见SDK中心、Python SDK使用指导、Python SDK使用视频。
SDK demo 代码解析
人证核身标准版(三要素)
- 方式一:使用身份证图片、人像图片进行校验
try: request = DetectStandardByIdCardImageRequest() listReqDataByIdCardImageReqDataIvsStandardByIdCardImageRequestBodyData = [ ReqDataByIdCardImage( idcard_image1="身份证人像面图像数据,使用base64编码", idcard_image2="身份证国徽面图像数据,使用base64编码", face_image="现场人像图像数据,使用base64编码," ) ] dataIvsStandardByIdCardImageRequestBodyData = IvsStandardByIdCardImageRequestBodyData( req_data=listReqDataByIdCardImageReqDataIvsStandardByIdCardImageRequestBodyData ) metaMeta = Meta( uuid="唯一标识此次请求的ID,用户自定义,不超过64位。例如10eb0091-887f-4839-9929-cbc884f1e20e" ) request.body = IvsStandardByIdCardImageRequestBody( data=dataIvsStandardByIdCardImageRequestBodyData, meta=metaMeta ) response = client.detect_standard_by_id_card_image(request) print(response) except exceptions.ClientRequestException as e: print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)
- 方式二:使用身份证姓名、身份证号码文本,人像图片进行校验
try: request = DetectStandardByNameAndIdRequest() listStandardReqDataByNameAndIdReqDataIvsStandardByNameAndIdRequestBodyData = [ StandardReqDataByNameAndId( verification_name="被验证人的姓名", verification_id="被验证人的身份证号码", face_image="现场人像图像数据,使用base64编码" ) ] dataIvsStandardByNameAndIdRequestBodyData = IvsStandardByNameAndIdRequestBodyData( req_data=listStandardReqDataByNameAndIdReqDataIvsStandardByNameAndIdRequestBodyData ) metaMeta = Meta( uuid="唯一标识此次请求的ID,用户自定义,不超过64位。例如10eb0091-887f-4839-9929-cbc884f1e20e" ) request.body = IvsStandardByNameAndIdRequestBody( data=dataIvsStandardByNameAndIdRequestBodyData, meta=metaMeta ) response = client.detect_standard_by_name_and_id(request) print(response) except exceptions.ClientRequestException as e: print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)
- 方式三:使用身份证姓名、身份证号码文本和现场拍摄的人像视频数据,实现活体人证核身
try: request = DetectStandardByVideoAndNameAndIdRequest() listReqDataData = [ StandardReqDataByVideoAndNameAndId( verification_name="被验证人的姓名", verification_id="被验证人的身份证号码", video="现场拍摄人像视频数据,使用base64编码", actions="动作代码顺序列表" ) ] databody = IvsStandardByVideoAndNameAndIdRequestBodyData( req_data=listReqDataData ) metabody = Meta( uuid="唯一标识此次请求的ID,用户自定义,不超过64位。例如10eb0091-887f-4839-9929-cbc884f1e20e" ) request.body = IvsStandardByVideoAndNameAndIdRequestBody( data=databody, meta=metabody ) response = client.detect_standard_by_video_and_name_and_id(request) print(response) except exceptions.ClientRequestException as e: print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)
- 方式四:使用现场拍摄的人像视频数据,实现活体人证核身
try: request = DetectStandardByVideoAndIdCardImageRequest() listReqDataData = [ ReqDataByVideoAndIdCardImage( idcard_image1="身份证人像面图像数据,使用base64编码", idcard_image2="身份证国徽面图像数据,使用base64编码", video="现场拍摄人像视频数据,使用base64编码", actions="动作代码顺序列表" ) ] databody = IvsStandardByVideoAndIdCardImageRequestBodyData( req_data=listReqDataData ) metabody = Meta( uuid="唯一标识此次请求的ID,用户自定义,不超过64位。例如10eb0091-887f-4839-9929-cbc884f1e20e" ) request.body = IvsStandardByVideoAndIdCardImageRequestBody( data=databody, meta=metabody ) response = client.detect_standard_by_video_and_id_card_image(request) print(response) except exceptions.ClientRequestException as e: print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)
人证核身证件版(二要素)
- 方式一:使用身份证图片进行校验
try: request = DetectExtentionByIdCardImageRequest() listExtentionReqDataByIdCardImageReqDataIvsExtentionByIdCardImageRequestBodyData = [ ExtentionReqDataByIdCardImage( idcard_image1="身份证人像面图像数据,使用base64编码", idcard_image2="身份证国徽面图像数据,使用base64编码" ) ] dataIvsExtentionByIdCardImageRequestBodyData = IvsExtentionByIdCardImageRequestBodyData( req_data=listExtentionReqDataByIdCardImageReqDataIvsExtentionByIdCardImageRequestBodyData ) metaMeta = Meta( uuid="唯一标识此次请求的ID,用户自定义,不超过64位。例如10eb0091-887f-4839-9929-cbc884f1e20e" ) request.body = IvsExtentionByIdCardImageRequestBody( data=dataIvsExtentionByIdCardImageRequestBodyData, meta=metaMeta ) response = client.detect_extention_by_id_card_image(request) print(response) except exceptions.ClientRequestException as e: print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)
- 方式二:使用身份证姓名、身份证号码文本进行校验
try: request = DetectExtentionByNameAndIdRequest() listExtentionReqDataByNameAndIdReqDataIvsExtentionByNameAndIdRequestBodyData = [ ExtentionReqDataByNameAndId( verification_name="被验证人的姓名", verification_id="被验证人的身份证号码" ) ] dataIvsExtentionByNameAndIdRequestBodyData = IvsExtentionByNameAndIdRequestBodyData( req_data=listExtentionReqDataByNameAndIdReqDataIvsExtentionByNameAndIdRequestBodyData ) metaMeta = Meta( uuid="唯一标识此次请求的ID,用户自定义,不超过64位。例如10eb0091-887f-4839-9929-cbc884f1e20e" ) request.body = IvsExtentionByNameAndIdRequestBody( data=dataIvsExtentionByNameAndIdRequestBodyData, meta=metaMeta ) response = client.detect_extention_by_name_and_id(request) print(response) except exceptions.ClientRequestException as e: print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)
代码示例自动生成
API Explorer提供API检索及平台调试,支持全量快速检索、可视化调试、帮助文档查看和在线咨询。
您只需要在API Explorer中修改接口参数,即可自动生成对应的代码示例。同时,可在集成开发环境CloudIDE中完成代码的构建、调试和运行等操作。