python读取身份证照片信息_Python身份证照片识别信息,python
一、主要步骤
2. 它让我们先获取 access_token,先看获取access_token的文档
https://ai.baidu.com/docs#/Auth/top
3. 需要 app_key secrect_key 需要先自行申请好
二、开始coding
1. 先定义一个baidu_token类用来处理token相关的工作
class baidu_token:
__app_key = '申请到的app_key'
__secrect_key = '申请到的secrect_key'
def __init__(self):
self._access_token_url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s'
self._access_token_url = self._access_token_url % (self.__app_key, self.__secrect_key)
self._ok = False
self._token_js = None
self._get_token()
def _get_token(self, cb=print):
try:
rsp = requests.get(self._access_token_url)
if rsp.status_code == 200:
self._token_js = json.loads(rsp.content.decode())
if self._token_js.get('access_token'):
self._ok = True
except:
pass
def access_token(self):
if self._ok:
return self._token_js['access_token']
2. 定义一个百度识别身份证照片的类
class baidu_card_img:
__request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
def __init__(self, baidu_token = None, img_path = None):
self._img_path = img_path
self._token = baidu_token
def _get_data(self):
if not self._token:
print('access_token invalid')
return
access_token = self._token.access_token()
if not access_token:
print('access_token invalid')
return
try:
#二进制读取图片 使用base64编码
with open(self._img_path, 'rb') as f:
data = base64.b64encode(f.read())
except:
print('img_path invalid')
return
#组装baidu API需要的参数
param = {"image":data}
url = self.__request_url + '?access_token=' + access_token
#headers
headers = {"Content-Type":"application/x-www-form-urlencoded"}
rsp = requests.post(url, data=param, headers=headers)
if rsp.status_code == 200:
return json.loads(rsp.content.decode())
def get_image_data(self, token = None, image_path = None):
self._img_path = image_path or self._img_path
self._token = token or self._token
ret_js = self._get_data()
if not ret_js:
return
lst_words = ret_js.get('words_result')
if not lst_words or len(lst_words) < 5:
print('api return nothing')
return
real_words = []
for i in lst_words:
#测试发现 身份证上面那行英文字母会被识别出来 用正则过滤掉字母开头的结果
#被str.isalpha()坑了 函数返回的是字符串全英文或中文 不能用来过滤纯英文
if not re.match(r'[a-zA-Z]', i['words'][0]):
real_words.append(i)
lst_words = real_words
result = {}
result['name'] = lst_words[0]['words'][2:]
result['sex'] = lst_words[1]['words'][2]
result['nation'] = lst_words[1]['words'][5:]
result['born'] = lst_words[2]['words'][2:]
result['address'] = lst_words[3]['words'][2:]
#测试发现 如果身份证地址信息可能占一行 也可能占两行
if len(lst_words) > 5:
result['address'] += lst_words[4]['words']
result['card_num'] = lst_words[len(lst_words) - 1]['words'][6:]
else:
result['card_num'] = lst_words[4]['words'][6:]
return result
写个demo测试一下结果
card = baidu_card_img(baidu_token())
dir_path = './test_img/'
dirs = os.listdir(dir_path)
for file in dirs:
if len(file) < 4:
continue
suffix = file[-4:]
if suffix == '.jpg' or suffix == '.png':
abs_path = dir_path + file
data = card.get_image_data(image_path=abs_path)
print(data)
结果如图:(图片是网图 我自己也拿身份拍了一张试了也ok)
python读取身份证照片信息_Python身份证照片识别信息,python相关推荐
- python读取图片格式_Python读取图片尺寸、图片格式
Python读取图片尺寸.图片格式 需要用到PIL模块,使用pip安装Pillow.Pillow是从PIL fork过来的Python 图片库. from PIL import Image im = ...
- python读取多张图片_python读取图片的几种方式及图像宽和高的存储顺序
python读取图片的几种方式及图像宽和高的存储顺序 1.opencv 2.imageio 3.matplotlib 4.scipy # coding:utf-8 import cv2 import ...
- python 读取 word 表格_Python实现批量读取word中表格信息的方法
本文实例讲述了Python实现批量读取word中表格信息的方法.分享给大家供大家参考.具体如下: 单位收集了很多word格式的调查表,领导需要收集表单里的信息,我就把所有调查表放一个文件里,写了个py ...
- Python 读取Excel文件并把相关信息@给相应的微信好友
工作中每日需要把Excel文件整理插入透视表,对文件信息进行整理,并把相对应每条信息的负责人发送给微信群里相对应的微信好友,最后对Excel文件进行统计,发送每个负责人的统计信息. Python 通过 ...
- python读取word的方法,Python读取Word(.docx)正文信息的方法
Python读取Word(.docx)正文信息的方法 本文介绍用Python简单读取*.docx文件信息,一些python-word库就是对这种方法的扩展. 介绍分两部分: Word(*.docx)文 ...
- python读取手机文件_python 读取 网络 文件
Python之pandas数据加载.存储 Python之pandas数据加载.存储 0. 输入与输出大致可分为三类: 0.1 读取文本文件和其他更好效的磁盘存储格式 2.2 使用数据库中的数据 0.3 ...
- python读取表格数据_Python读取Excel数据并根据列名取值
一直想将自己接触到的东西梳理一遍,可就是迈不出第一步,希望从这篇总结开始不要再做行动的矮人了. 最近测试过程中需要用到python读取excel用例数据,于是去了解和学习了下xlrd库,这里只记录使用 ...
- python读取grib2数据_python读取grib grib2气象数据
GRIB是WMO开发的一种用于交换和存储规则分布数据的二进制文件格式,主要用来表示数值天气预报的产品资料.现行的GRIB 码版本有GRIB1 和GRIB2 两种格式.由于小编只接触过GRIB1数据,所 ...
- python读取nc数据_python读取nc文件
nc文件的处理方式比较多,可以用MATLAB.JAVA.C.python或者其他的语言.我这两天折腾用python读取nc文件,查阅很多资料,左拼右凑的终于读出来了. 1.安装Anaconda 1)A ...
- python读取pdf表格_Python使用Tabula提取PDF表格数据
今天遇到一个批量读取pdf文件中表格数据的需求,样式大体是以下这样: python读取PDF无非就是三种方式(我所了解的),pdfminer.pdf2htmlEX 和 Tabula.综合考虑后,选择了 ...
最新文章
- [转]设计模式(22)-Strategy Pattern
- CCNA实验之---单臂路由实现VLAN间路由
- 月读の自动读取 根据注释解析列名和字典
- 第十七章 Python网络编程
- Java3y文章目录导航
- suse leap_Ruby程序检查leap年
- python 线程中出现执行错乱_python线程中的同步问题
- 3.1.1 计算机网络之数据链路的基本概念和功能概述(转载)
- 揭露一种通过网络实施ATM诈骗的手段!
- (int),Int32.Parse,Convert.ToInt3…
- hdu---2087---剪花布条
- 网页鼠标点击特效案例收集
- 复选框java_java之swing实现复选框的方法
- html canvas缩放抗锯齿,Html5 canvas drawImage:如何应用抗锯齿
- BLE Mesh中的Sequence number和IV Index
- 关于微信小程序开发者工具的版本管理使用介绍
- 【Python入门】Turtle海龟库:利用海龟画笔交互绘制字符旋涡
- 多向思考者--高敏感人群的内心世界
- 软件测试显卡最高清晰度,硬件碾压机再临? GTA5显卡性能全测试
- flask开发桌面应用程序_使用Microsoft Authenticatio将多个破折号应用程序嵌入Flask中...
热门文章
- javaagent技术专利申请
- 帆软连接kingbase8
- 工具:帆软FineBI使用指南
- 基于matlab和lingo的数学实验,MATLAB和LINGO软件在数学建模竞赛中的应用-精选教育文档...
- 通俗易懂讲PIC单片机:从一窍不通到入门进步
- setuna软件安装_401.5KB的电脑窗口截取软件,是否超实用?你说了算
- Android旅游APP类项目源代码
- java编译命令是什么_java编译命令,java的编译命令是什么?
- JAVA入门到精通(3)IDEA开发工具的使用
- 软件详细设计的几个参考模板