一、主要步骤

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相关推荐

  1. python读取图片格式_Python读取图片尺寸、图片格式

    Python读取图片尺寸.图片格式 需要用到PIL模块,使用pip安装Pillow.Pillow是从PIL fork过来的Python 图片库. from PIL import Image im = ...

  2. python读取多张图片_python读取图片的几种方式及图像宽和高的存储顺序

    python读取图片的几种方式及图像宽和高的存储顺序 1.opencv 2.imageio 3.matplotlib 4.scipy # coding:utf-8 import cv2 import ...

  3. python 读取 word 表格_Python实现批量读取word中表格信息的方法

    本文实例讲述了Python实现批量读取word中表格信息的方法.分享给大家供大家参考.具体如下: 单位收集了很多word格式的调查表,领导需要收集表单里的信息,我就把所有调查表放一个文件里,写了个py ...

  4. Python 读取Excel文件并把相关信息@给相应的微信好友

    工作中每日需要把Excel文件整理插入透视表,对文件信息进行整理,并把相对应每条信息的负责人发送给微信群里相对应的微信好友,最后对Excel文件进行统计,发送每个负责人的统计信息. Python 通过 ...

  5. python读取word的方法,Python读取Word(.docx)正文信息的方法

    Python读取Word(.docx)正文信息的方法 本文介绍用Python简单读取*.docx文件信息,一些python-word库就是对这种方法的扩展. 介绍分两部分: Word(*.docx)文 ...

  6. python读取手机文件_python 读取 网络 文件

    Python之pandas数据加载.存储 Python之pandas数据加载.存储 0. 输入与输出大致可分为三类: 0.1 读取文本文件和其他更好效的磁盘存储格式 2.2 使用数据库中的数据 0.3 ...

  7. python读取表格数据_Python读取Excel数据并根据列名取值

    一直想将自己接触到的东西梳理一遍,可就是迈不出第一步,希望从这篇总结开始不要再做行动的矮人了. 最近测试过程中需要用到python读取excel用例数据,于是去了解和学习了下xlrd库,这里只记录使用 ...

  8. python读取grib2数据_python读取grib grib2气象数据

    GRIB是WMO开发的一种用于交换和存储规则分布数据的二进制文件格式,主要用来表示数值天气预报的产品资料.现行的GRIB 码版本有GRIB1 和GRIB2 两种格式.由于小编只接触过GRIB1数据,所 ...

  9. python读取nc数据_python读取nc文件

    nc文件的处理方式比较多,可以用MATLAB.JAVA.C.python或者其他的语言.我这两天折腾用python读取nc文件,查阅很多资料,左拼右凑的终于读出来了. 1.安装Anaconda 1)A ...

  10. python读取pdf表格_Python使用Tabula提取PDF表格数据

    今天遇到一个批量读取pdf文件中表格数据的需求,样式大体是以下这样: python读取PDF无非就是三种方式(我所了解的),pdfminer.pdf2htmlEX 和 Tabula.综合考虑后,选择了 ...

最新文章

  1. [转]设计模式(22)-Strategy Pattern
  2. CCNA实验之---单臂路由实现VLAN间路由
  3. 月读の自动读取 根据注释解析列名和字典
  4. 第十七章 Python网络编程
  5. Java3y文章目录导航
  6. suse leap_Ruby程序检查leap年
  7. python 线程中出现执行错乱_python线程中的同步问题
  8. 3.1.1 计算机网络之数据链路的基本概念和功能概述(转载)
  9. 揭露一种通过网络实施ATM诈骗的手段!
  10. (int),Int32.Parse,Convert.ToInt3…
  11. hdu---2087---剪花布条
  12. 网页鼠标点击特效案例收集
  13. 复选框java_java之swing实现复选框的方法
  14. html canvas缩放抗锯齿,Html5 canvas drawImage:如何应用抗锯齿
  15. BLE Mesh中的Sequence number和IV Index
  16. 关于微信小程序开发者工具的版本管理使用介绍
  17. 【Python入门】Turtle海龟库:利用海龟画笔交互绘制字符旋涡
  18. 多向思考者--高敏感人群的内心世界
  19. 软件测试显卡最高清晰度,硬件碾压机再临? GTA5显卡性能全测试
  20. flask开发桌面应用程序_使用Microsoft Authenticatio将多个破折号应用程序嵌入Flask中...

热门文章

  1. javaagent技术专利申请
  2. 帆软连接kingbase8
  3. 工具:帆软FineBI使用指南
  4. 基于matlab和lingo的数学实验,MATLAB和LINGO软件在数学建模竞赛中的应用-精选教育文档...
  5. 通俗易懂讲PIC单片机:从一窍不通到入门进步
  6. setuna软件安装_401.5KB的电脑窗口截取软件,是否超实用?你说了算
  7. Android旅游APP类项目源代码
  8. java编译命令是什么_java编译命令,java的编译命令是什么?
  9. JAVA入门到精通(3)IDEA开发工具的使用
  10. 软件详细设计的几个参考模板