代码编织梦想

记得以前有个广告词叫:“学好数理化,走遍天下都不怕”,感觉应该再加一句:“带上身份证”,本文我们看一下如何使用 Python 提取身份证信息。

实现方式

实现方式大致可以分为两种:

  • 自己造轮子,如:使用 OpenCV 等自己编码实现,该方式所有功能都需自己来实现,比较耗时耗力,优点是更灵活一些
  • 使用现成的轮子,如:百度云,平台已经实现好了核心功能,并对外提供了 API 接口,我们直接调用接口即可,该方式省时省力,但灵活性可能差一些

实现过程

因为我们要实现的功能也比较简单,这里就用第二种方式来演示一下,下面简单看一下实现过程。

SDK 安装

百度云 SDK 对多种语言提供了支持,这里我们安装 Python 版的 SDK,使用 pip install baidu-aip 命令即可,SDK 目录结构如下:

├── README.md
├── aip                   // SDK 目录
│   ├── __init__.py       // 导出类
│   ├── base.py           // aip 基类
│   ├── http.py           // http 请求
│   └── ocr.py //OCR
└── setup.py              // setuptools 安装

创建应用

SDK 安装好后,我们接着需要创建应用了,这里需要一个百度账号或百度云账号,如果没有的话自己注册一个即可,登录及注册地址为:https://login.bce.baidu.com/?redirect=http%3A%2F%2Fcloud.baidu.com%2Fcampaign%2Fcampus-2018%2Findex.html,具体过程与车牌识别基本类似,如果不清楚的话,可以看一下车牌识别这篇文章。

具体实现

我们先找一张身份证图片,如图所示:

接着看一下代码实现,首先创建 AipOcr,AipOcr 是 OCR 的 Python SDK 客户端,代码实现如下:

# 自己的 APPID AK SK
APP_ID = '自己的 App ID'
API_KEY = '自己的 Api Key'
SECRET_KEY = '自己的 Secret Key'

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

上面三个参数也可以参照车牌识别中的介绍。

信息的提取有普通和高精度两种模式,普通模式代码实现如下:

# 打开并读取文件内容
fp = open("card.jpg", "rb").read()
res = client.basicGeneral(fp) # 普通
# 遍历结果
for tex in res["words_result"]:
    row = tex["words"]
    print(row)

输出结果如下:

姓名韦小宝
性别男民族汉
出生1654年12月20日
住址北京市东城区景山前街4号
紫禁城敬事房
公民身份证号码112441654122日2438

再来试一下高精度模式,代码实现如下:

# 打开并读取文件内容
fp = open("card.jpg", "rb").read()
res = client.basicAccurate(fp) # 高精度
# 遍历结果
for tex in res["words_result"]:
    row = tex["words"]
    print(row)

输出结果如下:

姓名韦小宝
性别男民族汉
出生1654年12月20日
住址北京市东城区景山前街4号
紫禁城敬事房
公民身份证号码11204416541220243X

通过输入结果我们可以看到:高精度模式提取了正确的身份证号码,普通模式提取的身份证号码是有一些误差的。

总结

本文我们使用 Python 结合百度云接口几行代码就提取了身份证信息,其实除了身份证信息也可以提取其他卡片信息,比如银行卡信息等,有兴趣的可以试一下。


在这里还是要推荐下我自己建的Python开发学习群:1156465813,群里都是学Python开发的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2020最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/qq_38887171/article/details/111309652

Linux入门基础操作七(静态库的使用)-爱代码爱编程

Linux入门基础操作(ubuntu20.04)(七) gcc编译器的使用: gcc 编译过程:gcc xxx.c -o app ./app 拆分为:gcc -E xxx.c -o xxx.i gcc -S xxx,i -o xxx.s gcc -c xxx.s -o xxx.o gcc xxx.o -o app ./appgcc xxx.c -I +

无法push到远程-爱代码爱编程

Could not chdir to home directory /home/liyong: No such file or directory To liyong@10.2.2.246:/home/src/mediatek/mtk-openwrt  ! [rejected]        newWeb-vap -> newWeb-vap (fet

Linux gdb-爱代码爱编程

目录 准备工作编译gdb命令补充 准备工作 目录结构如下 . ├── insert_sort.c ├── main.c ├── my_sort.h insert_sort.c void insert(int arr[], int len) { int i, j, key; for (i = 1; i < len; i++) {

postgresql数据库 timescaledb数据库 还原数据库-爱代码爱编程

postgresql数据库 timescaledb数据库备份 还原数据库 数据迁移 文章目录 postgresql数据库 timescaledb数据库备份 还原数据库 数据迁移一 .建立表空间1. 创建目录2.分配权限3.创建表空间二.建立一个新的数据库 cs 指定表空间 tbs_cs12.1 建立新库 指定表空间 安装插件timescaledb

Docker常用命令总结(持续更新)-爱代码爱编程

docker相关重要概念 1.image镜像 docker镜像就是一个只读模板,比如,一个镜像可以包含一个完整的centos,里面仅安装apache或用户的其他应用,镜像可以用来 创建docker容器,另外docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下周一个 已经做好的镜像来直接使用 2.con

linux C++ XML文件创建、读取和修改实例-爱代码爱编程

0. XML文件 可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。  在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述

6大常用数据分析模型详解,做分析不再没思路-爱代码爱编程

在进行数据分析过程中,我们通常需要使用各种模型来证明自己的分析观点,使自己的结论更具备说服力,同时也让自己的论证思路更具备逻辑性和条理性。 今天老李就给罗列了6个常用的数据分析模型,并附上实际的案例讲解以及分析模板,希望能让大家快速掌握这些模型和方法! 话不多说,上干货! 1、RFM模型 RFM 分析是美国数据库营销研究所提出的一种简单实用的客户分

实战PyQt5: 121-使用QImage实现一个看图应用-爱代码爱编程

QImage简介 QImage类提供了独立于硬件的图像表示形式,该图像表示形式可以直接访问像素数据,并且可以用作绘制设备。QImage是QPaintDevice子类,因此可以使用QPainter直接在图像上绘制。在QImage上使用QPainter时,可以在当前GUI线程以外的其他线程中执行绘制。 QImage提供了多种方式来读取图像文件,在创建QIm

创建python环境-爱代码爱编程

需求: win10 anaconda conda常用命令:conda list 查看安装了哪些包conda env list 或 conda info -e 查看当前存在哪些虚拟环境conda update conda 检查更新当前conda 相关指令 1.创建环境 conda create -n env_name python=3.8 2.激

实战PyQt5: 122-使用QMovie实现GIF动画播放-爱代码爱编程

QMovie简介 QMovie类用于显示没有声音的简单动画。可以通过文件名来创建一个QMovie对象,在播放前,可以调用函数isValid()来检测图像文件是否有效。QMovie提供了一些枚举和函数来控制播放。 枚举量QMovie.CacheMode控制缓冲模式: QMovie.CacheNone (0): 不缓存任何帧(默认)。QMovie.Cac

Python文件运行说明书以及解决的过程_一蓑烟雨任平生-爱代码爱编程

文章目录 前言一、安装Python环境1-安装Python解析器2-安装所需要的包第一步:第二步二、运行Python文件1.修改数据库连接2.舆情和特色添加定时器方法如下第一:第二:3.供需和价格价格遇到的难点1价格遇到的难点24.文章爬取总结 前言 这篇文章主要是讲解下,爬虫爬取数据的使用方法,针对于有点点电脑基础的人,比如说会开机,会使用

Leetcode题库:动态规划在猜石子游戏中的应用(Python语言)-爱代码爱编程

动态规划 关于什么是动态规划,这里不再赘述,网上有大把教程和概念,阅读本文前提是你对动态规划已经有了初步的认识。 概括来说,动态规划有四个步骤: 定义状态。寻找状态转移方程状态压缩(如果可行的话)得出结果LeetCode上的猜石子游戏 LeetCode有很多猜石子的游戏,大多是角色都能发挥最优的水平,属于博弈的范畴,下面就介绍三道可以用动态规划来解