17

十行 Python 代码就提取了韦小宝的身份证信息

 3 years ago
source link: http://www.justdopython.com/2020/12/16/idcard/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

记得以前有个广告词叫:“学好数理化,走遍天下都不怕”,感觉应该再加一句:“带上身份证”,本文我们看一下如何使用 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 结合百度云接口几行代码就提取了身份证信息,其实除了身份证信息也可以提取其他卡片信息,比如银行卡信息等,有兴趣的可以试一下。

示例代码:py-discern


Recommend

  • 46

    大家好,我又回来了。 昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序。查了一下,发现只有windows上可以,具体的大家也可以搜索(搜索关键词usb autorun)到。但是,如果我想,…

  • 35
    • developer.51cto.com 3 years ago
    • Cache

    VSCode 一字十行之代码片段

    以前使用 Xcode 的时候,有一种方法可以把自己常用的「代码片段」保存起来,当在 Xcode 输入某个字符时即可提示你所保存的代码片段,可快速地完成编码。 今天查了下 VSCode,也有类似的功能,分享给大家。 比如我们创建一个 vu...

  • 10

    十行代码挑战世界金融体系 Apr 23rd, 2020 | Comments 这...

  • 10

    十行代码让你的单机“影分身”,分布式训练速度快到飞起 - 飞桨PaddlePaddle的个人空间 - OSCHINA - 中文开源技术交流社区 拜拜了,2020!来看...

  • 3

    十行代码看到空气质量指数 我错了, 我承认我是标题党, 怎么可能用十行代码完成全国三百个多个城市 AQI 的抓取, 清洗与可视化呢 我仔细数了数, 去掉注释, 一共是 9 行, 凑个整才是...

  • 6

    十行代码预测插旗西雅图 审稿:何通、郎大为、朱雪宁;编辑:雷博文 我错了,我承认我是标题党,怎么可能用十行代码完成 Dota2 信仰 2 比赛数据的抓取, 清洗与预测建模呢。 不过...

  • 6

    十行代码绘制漂亮金融K线图,这个神器你不可错过-51CTO.COM 十行代码绘制漂亮金融K线图,这个神器你不可错过 作者:Ckend 2022-07-21 10:08:59 近期发现许多小伙伴有绘制K线图的需求...

  • 4

    不超过十行代码完成一个标准的深拷贝更新日期: 2022-09-29阅读: 9标签: ...

  • 1

    十行 Python 代码,使用 OTP 实现对文件的加密解密 作者:somenzz 2022-11-07 07:04:25 OTP 就是 One-time password,翻译过来就是一次性密码。它的原理非常简单,加密的过程就是明文和密钥(key)进行异或,得到...

  • 2

    十行代码,让日志存储成本降低80% - 运维 - dbaplus社群:围绕Data、Blockchain、AiOps的企业级专业社群。技术大咖、原创干货,每天精品原创文章推送,每周线上技术分享,每月线下技术沙龙。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK