接着上一篇的思路,那么实现机器人登记,有个重点是要自动识别身份证,有什么办法呢?
- 下载名片和身份证识别类的app。
- 借助大公司提供的api接口进行识别。
- 自己做人工智能识别。
先说方法3,github上有现成的方法,但安装上看着就比较麻烦,所以先搁置。方法1,其实不错,但是考虑到两个app来回撤换,会造成使用上的繁复。于是先试试方法2,用大公司的接口。于是泛舟申请了百度的api,身份证识别免费使用 500次一天,估计就是一般的酒店,都明显够用了。
到百度AI开放平台注册账号,并开通文字识别ocr,获取相应的APP_ID ,API_KEY ,SECRET_KEY 。再下载相应python SDK ,解压压缩包,把里面的 api 文件件 整个复制到程序对应的文件夹内就可以了。SDK 功能比较丰富,我们只用到其中身份证识别的部分。
新建一个身份证识别的文档 命名为 shenfz_shibie.py。好吧,泛舟的英文不好,直接用拼音,名字随便怎么起,随你喜欢。具体代码如下:
# -*- coding: utf-8 -*-
"""
Created on Mon Nov 27 22:48:12 2018
python 识别身份证信息
@author: 浩海泛舟
"""
from aip import AipOcr as 包_百度身份证接口
# 读取身份证图片
def 方法_获取图片码(图片路径):
with open(图片路径, 'rb') as 图片:
return 图片.read()
def 方法_获取身份证信息(图片码):
""" 你的 APPID AK SK ,还是继续用对应的英文,免得搞混"""
APP_ID = '你的APPID'
API_KEY = '你的API_KEY'
SECRET_KEY = '你的SECRET_KEY'
处理接口 = 包_百度身份证接口(APP_ID, API_KEY, SECRET_KEY)
# 识别身份证正面
身份证正反面 = "front"
# 识别身份证背面
#身份证正反面 = "back"
# 调用身份证识别
处理接口.idcard(图片码, 身份证正反面);
# 如果有可选参数
参数集 = {}
#参数集对应接口的参数,所以里面内容要根据接口而定,不能用中文。
参数集["detect_direction"] = "true" # 是否检测图像朝向,默认不检测
参数集["detect_risk"] = "false" # 是否身份证风险类型(复印件)
""" 带参数调用身份证识别 """
结果 = 处理接口.idcard(图片码, 身份证正反面, 参数集)
# 获取返回识别结果
if isinstance(结果, dict):
资料字段 = 结果['words_result']
姓名 = 资料字段[u'姓名']['words']
性别 = 资料字段[u'性别']['words']
民族 = 资料字段[u'民族']['words']
出生日期 = 资料字段[u'出生']['words']
住址 = 资料字段[u'住址']['words']
身份证号码 = 资料字段[u'公民身份号码']['words']
return 姓名,性别,民族,出生日期,住址,身份证号码
if __name__ == '__main__':
图片码 = 方法_获取图片码('./pic/181127-212314.png')
姓名,性别,民族,生日,住址,身份证号码 = 方法_获取身份证信息(图片码)
print('姓名:',姓名)
print('性别:',性别)
print('民族:',民族)
print('出生:',生日)
print('住址:',住址)
print('公民身份号码:',身份证号码)
泛舟喜欢把导入的包 加上前缀 ‘’包_‘’,函数加上 ‘’方法_‘’,方便如果出现错误的时候,可以方便替换,不会因为有时候同名的变量和方法替换错误。
测试结果还算不错,只是有时会因为网络问题超时,泛舟十分怀疑是长城宽度垃圾所致。
这个算是完成了身份证识别的部分,之后直接调用就可以了。接下来就是微信机器人itchat了。
感谢各位的阅读,望勿喷。