实践|超简单实现OCR文字识别应用

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

一、前言

最近遇到个小问题,像提取一些印在图片上的文字信息,介于数量比较多——好几张图片,每张都有几百来字,自己对照手打又嫌浪费时间,但找的几个软件要么识别出来的文段错别字一大堆,自己一个个改比直接照原来的打还麻烦,要么就看着像病。当然也不可能自己写一个,从采集数据,训练模型到实际产出,真弄出来估计都要大半年,错别字还不一定比别人的少……于是打算看看一些云计算平台会不会提供一些“便宜”的api,供个人开发者实现类似功能。


而事实上,常见的云计算平台确实都提供了这种功能,包括国产三巨头BAT的三朵云。这次我们拿百度云平台举个例,这次我们使用的是Python3.6 。

二、库与id的配置步骤

我们先可以打开百度云的官网:

b1f4aa663d340bfa73a85668b4179701.png

用百度搜就好,然后我们在首页-产品-人工智能中找到文字识别选项

59872d4e61e2d6a780f9fb223ba7cc1b.png

然后在弹出的页面中选择“立即使用”

这里,我们要使用百度云计算平台的功能的话还需要创建一个百度账号,如果有pong友水过贴吧的话,那么用那个账号就可以啦,登陆并且进入“文字识别”界面之后我们可以看到:

bce6b2dfecbf301877eff4c9a3fafb95.png

选择创建应用,根据需求选择要用的功能然后给咱们的应用取个名分个类

6f2e3f2f113d17e40a29cc4735a9489f.png

例如我创建了个叫文字识别的应用,就可以进入应用管理界面看到:

5c0a8f669992a810a564af7923552c8b.png


这里我们需要的就是红框框住的AppID、API Key、Secret Key这三个内容,用于确保接下来我们发送给百度云平台的请求能够被识别。


然后,我们在python3.6中安装baidu-aip这个第三方库:

 
 
pip install baidu-aip

至此,我们实现“文字识别”的环境配置就完成了。

三、脚本编写

编写对应的工具脚本非常简单,我们首先看看我们的测试集,这是放在脚本工作目录中 data/ImageForOcr 下两章包含文字的图片

be416a1f0df37ae65a30368f12d169d9.png

dd6c2dfd3cb26d5017ea0751a14bc5c8.png

然后我们来编写我们的Python脚本,首先导入两个库

 
 
from aip import AipOcr
import os

aip就是我们安装的那个来自百度的库。

我们再写个读取图片的函数:

 
 
dir='data\\ImageForOcr'
def read_image(path):
    dir_i=dir+'\\'
    print(dir_i+path)
    with open(dir_i+path,'rb') as f:
        image=f.read()
    return image

path参数用于传入我们希望读取的图片的名字。
然后,我们编写主程序:

 
 
api_key='**************'
app_id='**********'
secret_key='********************'
client=AipOcr(app_id,api_key,secret_key)
fs=os.listdir(dir)
file=open(r'output.txt','w',encoding='utf-8')
for image in fs:
    i=read_image(image)
    inf=client.basicGeneral(i)
    for response in inf['words_result']:
        for words in response['words']:
            file.write(words)
    print(inf)
file.close()

Python标准库os库提供的listdir方法用于我们查找所接收参数对应目录下的所有文件和文件夹,返还这些文件和文件夹名字组成的列表,这里我们用它遍历读取 data/ImageForOcr 目录下的所有图片,并调用百度云的api进行识别。

api_key、app_id、secret_key的内容对应我们之前在应用中申请的那三个内容,都作为字符串输入。AipOcr函数是aip提供的类方法,basicGeneral则是由这个方法构建的对象使用的文字识别方法,对应百度云一方提供的“通用文字识别功能”,接收一个图片作为参数,返还文字识别后的信息,通常情况下作为json类对象返还,但在Python中自然就是以dict对象返还,返还内容下:

{
    'log_id': 9021892210976551911,
     'words_result_num': 14, 
    'words_result':[
        {'words':"xxxxxxxxxxx"},
        {'words':"xxxxxxxxxxx"},
        ...
    ]
}

不过有时候会因为某些情况报错,返回内容中就会有err_msg之类的。

(这部分详情参考百度云官方技术文档)

对于我们的两张图片,控制台输出结果如下:

4a5031c3a82b5d826f699406f6e68236.png

并且我们在脚本工作目录中创建了一个叫output.txt的文件,里面记载着我们识别图片得到的内容,并且几乎没啥错别字:

3244afa73ca4dbe594dc2a94012cf6dd.png

至此,脚本完成,有需要源码的可以老样子去我们的github(不过这么短的脚本应该没有多大必要吧)


有的读者可能会考虑到,识别后能不能保留文字在原来的图片中的格式,这个可以将basicGeneral换成general方法,这样返回的信息就会包含文段的形状和位置信息,这个方法对应“通用文字识别(含位置信息版)”。

另外,百度云提供的该项api调用并不是无偿的(意料之中啦),不过至少在现在这个时间段,大多是有免费使用次数的,像本文所写的文字识别api,通用版本是免费使用500次/天,并且有QPS限制,不过对于个人作为工具使用其实完全足矣就是了。

四、尾言

所以这篇文章讨论的东西就只有这么点儿吗……是的~,我们用阿里云、腾讯云或者Google云之类的api其实也可以实现类似的功能,至于更深入的使用方式,他们的官方技术文档肯定会详细的多,最主要的还是引入各位(也包括我)对近年发展起来的一些人工智能平台的了解。

不过我们也可以看到,随着时代发展,人工智能的各个阶段开始慢慢分化,从应用数学工具设计优化算法,到利用现有算法训练模型,再到使用已经训练好的优秀模型实现应用(有人戏称其为人工智能三大转职:大神、炼丹师、调包侠(当然,这只是戏称)),人工智能行业也在慢慢成型。

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

e5e92cb924eb867d337ef530b2cd24b2.png

85d0433c4fa6f1c6a56e0ff8e1ac9a77.png

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值