Python使用阿里API进行身份证识别

Python使用阿里API进行身份证识别

  • 1. 作者介绍
  • 2. 身份证识别介绍
  • 3. 调用阿里智能云API
  • 4. 代码解析
    • 4.1导入库
    • 4.2 完整代码
    • 4.3 实验结果
  • 参考

1. 作者介绍

孟莉苹,女,西安工程大学电子信息学院,2021级硕士研究生,张宏伟人工智能课题组
研究方向:机器视觉与人工智能
电子邮件:[email protected]

2. 身份证识别介绍

凭借领先的人工智能与知识图谱技术,对身份证正反面自动识别,并提取姓名、出生日期、身份证号、住址、性别、民族、发证机关等身份证实体信息。

3. 调用阿里智能云API

步骤一 :浏览器搜索阿里云,使用支付宝或者其他阿里APP扫码后用手机验证码登陆。
Python使用阿里API进行身份证识别_第1张图片

步骤二:登录后找到身份证识别OCR产品,并购买
Python使用阿里API进行身份证识别_第2张图片

步骤三:购买成功后点击管理控制台
Python使用阿里API进行身份证识别_第3张图片

步骤四:查看到身份证识别的AppCode等信息
Python使用阿里API进行身份证识别_第4张图片

4. 代码解析

4.1导入库

#导入所需的库
#!/usr/bin/env python3
import requests
import os
import sys
from base64 import b64encode
from pathlib import Path

Urllib 库是 Python 内置的 HTTP 请求库,可用于访问网页,并且与网页交互,不需要额外安装就可使用,它包含四个模块:
▪ urllib.request:最基本的 HTTP 请求模块,打开和读取URL,可以用它来模拟发送请求;就像在浏览器里输入网址后敲击回车一样。
▪ urllib.error:异常处理模块,如果出现请求错误,可以捕获这些异常,然后进行重试或其他操作保证程序不会意外终止。
▪ urllib.parse :一个工具模块,提供了许多 URL 处理方法,比如拆分、解析、合并等。
▪ urllib.robotparser :用来识别网站的 robots.txt 文件,用的比较少。
Base64库是网络上最常见的用于传输字节码的编码方式之一,一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转换为字符数据。然而,不能直接将二进制数据转换成字符数据,因为网络传输只能传输可打印字符。在ASCII码中规定, 32~126这95个字符属于可打印字符,也就是说网络只能传输这95个字符,不在这个范围内的字符无法传输。其他字符的传输方式就可以通过使用Base64。
URL:网络上的每一个网页都具有一个唯一的名称标识,通常称之为URL(Uniform Resource Locator, 统一资源定位器)。简单地说URL就是网络地址,俗称“网址”。
一般语法格式为:protocol : // hostname[:port] / path / [;parameters][?query]#fragment
Protocol(协议):指定使用的传输协议,最常用的是HTTP协议,格式为HTTP://。
Hostname(主机名):指存放资源的服务器的域名系统主机名或IP地址。
Path(路径):一般用来表示主机上的一个目录或文件地址。

4.2 完整代码

#!/usr/bin/env python3
import requests
import os
import sys
from base64 import b64encode
from pathlib import Path

HOST = "https://cardiddecode.market.alicloudapi.com"
PATH = "/api/decode_cardid_aliyun"

def verify(url, appcode, fname):
    data = {"imgbase64": b64encode(Path(fname).read_bytes()).decode()}
    headers = {
        "Authorization": f"APPCODE {appcode}",
        "Content-Type": "application/json; charset=UTF-8",
    }
    requests.packages.urllib3.disable_warnings()
    r = requests.post(url, json=data, headers=headers, verify=False)
    r.raise_for_status()
    return r.json()


def main():
    url = HOST + PATH
    appcode = '***'          # 自己的APPcode
    fname = 'E:/CSDN-exam/Python使用阿里API进行身份证识别/7.jpg'   # 要识别的身份证地址
    result = verify(url, appcode, fname)
    print(f"Response from ``{url}`` for ``{fname}``:\n{result}")


def load_appcode():
    appcode = os.getenv('ALI_APPCODE')
    if not appcode:
        for fname in ("appcode", "appcode.txt"):
            p = Path(fname)
            if p.exists():
                appcode = p.read_text().strip()
                break
        else:
            appcode = input("appcode: ").strip()
    return appcode


def image_name():
    if sys.argv[1:]:
        fname = sys.argv[1]
    else:
        fname = None
    if not fname or not Path(fname).exists():
        for suffix in (".jpg", ".png"):
            imgs = list(Path().glob(f"*{suffix}"))
            if imgs:
                fname = imgs[0]
                break
        else:
            fname = input("Image file name: ").strip()
    return fname


if __name__ == "__main__":
    main()

4.3 实验结果

在这里插入图片描述

参考

1.直接跳转购买阿里云的身份证识别OCR链接:
https://market.aliyun.com/products/57124001/cmapi028587.html#sku=yuncode2258700001
2.代码参考
https://blog.csdn.net/jaket5219999/article/details/83691278?ops_request_misc=&request_id=&biz_id=102&utm_term=python3%E8%B0%83%E7%94%A8%E9%98%BF%E9%87%8CAPI%E8%BF%9B%E8%A1%8C%E8%BA%AB%E4%BB%BD%E8%AF%81%E8%AF%86%E5%88%AB&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-83691278.142v7pc_search_result_control_group,157v4control&spm=1018.2226.3001.4187

你可能感兴趣的:(python,阿里云)