上次我使用的百度AI开放平台的API接口实现图片的转化,后来有许多小伙伴都私信问我,怎么获取百度AI平台的AK和SK。为了统一回答大家的问题,今天我又使用百度API实现了一个从图片中提取文字和识别身份证的功能,详细描述实现过程,有收获的小伙伴记得收藏、转发分享哦。

百度AI开放平台

百度AI开放平台网址:https://login.bce.baidu.com/

首先我们需要注册一个账号,注册登录之后我们选择文字识别

菜鸟小白的平台因为已经创建了一个应用了,首次登录应该是没有应用的,点击创建应用就好了

后面输入创建的应用名称,从创建页面上看API支持的功能很多,什么文字识别、身份证识别、银行卡识别和驾驶证识别等等,另外如果需要其他类型的功能(如图片效果增强等)也可以直接勾选上。

下面我们不需要选择文字识别包名,填写一个应用描述点击创建就OK了。

创建完成之后我们就可以看到我们需要的AK(API Key)和SK(Secret Key)了。

思路分析

可以看到百度AI开放平台是有提供API文档和举例代码的。写程序之前需要先看看我们的要使用的接口是什么格式,是否需要身份认证。百度AI开放就是需要使用AK和SK去和平台做一个鉴权操作,获取一个access token,然后我们再拿着这个access token去请求接口,完成我们今天需要完成的文字识别和身份证识别功能。

鉴权函数

从分析来看,我们首先需要去获取一个access token,用于后续的请求合法性鉴别。查看平台的接口文档​,我们的编码如下​,这个其实在我们之前的图片处理程序中也是一样的​。​文档地址:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu

百度AI开放平台鉴权函数

def get_access_token():
url = 'https://aip.baidubce.com/oauth/2.0/token'
data = {
'grant_type': 'client_credentials', # 固定值
'client_id': 'eFGwDIb*******HucbnPr', # 在开放平台注册后所建应用的API Key
'client_secret': 'XPxWT2L********PFVCKS6PVih' # 所建应用的Secret Key
}
res = requests.post(url, data=data)
res = res.json()
print(res)
access_token = res['access_token']
return access_token

文字识别函数

​鉴权函数写好之后,我们就可以拿着获取到的access token去向平台接口发起请求,识别图片中的文字了​。从平台文档上看通用文字识别的url为https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic平台的​API文档地址:https://cloud.baidu.com/doc/OCR/s/1k3h7y3db​

#通用文字识别
def general_word():
#通用文字识别接口url
general_word_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"
#获取执行路径
# path = os.getcwd()
# 二进制方式打开图片文件
f = open('5.jpg', 'rb')
img = base64.b64encode(f.read())
print(img)
params = {"image":img,
"language_type":"CHN_ENG"}
access_token = get_access_token()
request_url = general_word_url + "?access_token=" + access_token
print(request_url)
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
# print(response)
# res = response.json()
if response:
res = response.json()["words_result"]
print(res)
file_name = "菜鸟小白.txt"
with open(file_name, 'w', encoding='utf-8') as f:
for j in res:
print(j["words"])
f.write(j["words"]+"\n")

当我们判断返回值存在内容时,​我们将json格式的返回值,写入“菜鸟小白.txt”文档中​。

身份证识别函数

​我们写完了文字识别之后,其实写身份证识别和其它证件的识别就都是一样的方式了调用了​。

#身份证识别
def idcard():
idcard_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard"
# 二进制方式打开图片文件
f = open('4.jpg', 'rb')
img = base64.b64encode(f.read())

params = {"id_card_side":"front","image":img}
access_token = get_access_token()
request_url = idcard_url + "?access_token=" + access_token
print(request_url)
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
res = response.json()["words_result"]
file_name = "菜鸟小白的学习分享.txt"
with open(file_name, 'w', encoding='utf-8') as f:
f.write("住址:"+res["住址"]["words"]+"\n")
f.write("出生日期:" + res["出生"]["words"] + "\n")
f.write("姓名:" + res["姓名"]["words"] + "\n")
f.write("公民身份号码:" + res["公民身份号码"]["words"] + "\n")
f.write("性别:" + res["性别"]["words"] + "\n")
f.write("民族:" + res["民族"]["words"] + "\n")

主函数

最后我们写一个主函数调用不同的功能函数就好了​。

if __name__ == '__main__':
idcard()
general_word()

实现效果

​这样我们的目标就完成了,我们来看看实现效果吧​。首先我们看看文字识别的效果​。

原始图片​:

最终识别出来的效果

最终我们的识别仅将“API”识别为“AP”,少了一个字符“I”,正确率高达99%以上​,一个字——强​。

我们再来看看身份证的识别效果,原始图片如下(网络百度图片,如有侵权请联系作者删除):

​经过我们的程序识别后,所有信息都正确识别出来了(其中身份证号码应该是因为假身份证号码识别规则不通过所有为空白了,菜鸟小白自己的身份证是完成识别出来的),正确率高达100%。

源码获取

老规矩,还是公众号回复“文字识别”即可获取源码。

粉丝福利

关注公众号“菜鸟小白的学习分享”,回复“粉丝福利”就可以参与抽奖,赢得腾讯视频会员月卡一张哦~

好了,今天分享结束了。如果你也认同菜鸟小白的学习分享的话,那就给菜鸟小白一个关注、在看、点赞+赞赏吧,你们的支持,是我持续不断的动力。非常感谢大家的支持,我们明天再会~

 

python实现图片文字提取,准确率高达99%,强无敌!!!的更多相关文章

  1. python识别图片文字

    因为学校要求要刷一门叫<包装世界>的网课,而课程里有200多道选择题,而且只能在手机完成,网页版无法做题,而看视频是不可能看视频的,这辈子都不可能看...所以写了几行代码来进行百度搜答案. ...

  2. python 识别图片文字

    今天群里有兄弟问如何把图片的文字给识别出来 对于python来说这不是小菜一碟吗,于是乎让pupilheart狠狠的吹了一波(哈哈,竟然没懂),下面将整个实现过程给大家实现下: 方法一:自己搞定ORC ...

  3. 基于tess4j的图片文字提取

    1.文件结构目录 2.具体实现 ①添加maven依赖 <dependency> <groupId>net.sourceforge.tess4j</groupId> ...

  4. HTML5 JavaScript实现图片文字识别与提取

    8月底的时候,@阿里巴巴 推出了一款名为“拯救斯诺克”的闯关游戏,作为前端校园招聘的热身,做的相当不错,让我非常喜欢.后来又传出了一条消息,阿里推出了A-star(阿里星)计划,入职阿里的技术培训生, ...

  5. face_recognition开源人脸识别库:离线识别率高达99.38%

    基于Python的开源人脸识别库:离线识别率高达99.38%——新开源的用了一下感受一下 原创 2017年07月28日 21:25:28 标签: 人脸识别 / 人脸自动定位 / 人脸识别开源库 / f ...

  6. 使用AI技术获取图片文字与识别图像内容

    获取图片文字 如何使用python获取图片文字呢? 关注公众号[轻松学编程]了解更多- 1.通过python的第三方库pytesseract获取 通过pip install pytesseract导入 ...

  7. Python的开源人脸识别库:离线识别率高达99.38%

    Python的开源人脸识别库:离线识别率高达99.38%   github源码:https://github.com/ageitgey/face_recognition#face-recognitio ...

  8. Python的开源人脸识别库:离线识别率高达99.38%(附源码)

    Python的开源人脸识别库:离线识别率高达99.38%(附源码) 转https://cloud.tencent.com/developer/article/1359073   11.11 智慧上云 ...

  9. Python图像处理之图片文字识别(OCR)

    OCR与Tesseract介绍   将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR).可以实现OCR 的底层库并不多,目前很多库都是使用共同 ...

随机推荐

  1. 一篇看懂Docker

    松勤教育2020.4.20 我要分享     Docker 是什么? Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口.它是目前最流行的 Linux 容器解决方案. Dock ...

  2. Windows程序设计(1)

    1. Windows程序设计基础 1.1 代码风格 #include "stdafx.h" #include <windows.h> void Alert(int i) ...

  3. 使用addEventListener绑定事件是关于this和event记录

    DOM元素使用addEventListener绑定事件的时候经常会碰到想把当前作用域传到函数内部,可以使用以下两种放下: var bindAsEventListener=function (objec ...

  4. C++ vector迭代器访问二维数组

    #include<iostream> #include<vector> int main(){ std::vector<int> arr(); // 创建一维数组 ...

  5. 面试题40:最小的 k 个数

    import java.util.Arrays; /** * Created by clearbug on 2018/2/26. * * 面试题40:最小的 k 个数 * * 注意:因为前两天在陌陌面 ...

  6. java中的四种访问权限是?

    1.私有权限(private) private可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类).被private修饰的成员,只能在定义它们的类中使用,在其他类中不能调用. ...

  7. 洛谷 P1196 【银河英雄传说】

    这道题其实就是一个带权并查集的基础题,维护的是点权,所以我们要维护两个数组dis:表示当前点到父亲节点的距离,size:当前子树的大小.那么程序就自然出来了: 代码: #include <bit ...

  8. 资深阿里程序员一一为你解刨Web前端知识体系结构,付出与收获成正比!

    只要接触过前端,都会指导web前端的知识主要由三部分组成:分别为静态html,样式css,动态javascript(简称js)这三大部分组成.其三部分组成的一个体系的复杂程度不亚于其他一门技术的复杂程 ...

  9. 以api文档为中心--前后端分开发离新思维

    api文档编写好像很简单,其实不是.一个良好的api文档,需要就有以下内容:接口详细描述,接口参数详细描述,接口返回结果详细描述,容易理解的范例.这些内容其实是不少的,编写过程中还非常单调乏味.再加上 ...

  10. (私人收藏)精美PPT模板

    精美PPT模板 https://pan.baidu.com/s/1vsRnX5h7t3MZ7qdrFvuI1wsucr