更新时间:2024-11-04 GMT+08:00
分享

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

  1. 导入依赖模块
    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
  2. 配置认证信息

    配置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环境新建环境变量
  3. 初始化客户端

    指定region方式

    # 选择服务部署区域
    def GetClient():
        return IvsClient.new_builder(IvsClient) \
             .with_credentials(credentials) \
             .with_region(IvsRegion.CN_NORTH_4) \
             .build()

    CN_NORTH_4:华北-北京四

    CN_NORTH_1:华北-北京一

  4. 发送请求并查看响应
    # 以调用标准版(三要素)接口 DetectStandardByIdCardImage 为例
    request = DetectStandardByIdCardImageRequest()
    response = client.detect_standard_by_id_card_image(request)
    print(response)
  5. 异常处理
    表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中完成代码的构建、调试和运行等操作。

图4 API Explorer

相关文档