点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
一、前言
最近遇到个小问题,像提取一些印在图片上的文字信息,介于数量比较多——好几张图片,每张都有几百来字,自己对照手打又嫌浪费时间,但找的几个软件要么识别出来的文段错别字一大堆,自己一个个改比直接照原来的打还麻烦,要么就看着像病。当然也不可能自己写一个,从采集数据,训练模型到实际产出,真弄出来估计都要大半年,错别字还不一定比别人的少……于是打算看看一些云计算平台会不会提供一些“便宜”的api,供个人开发者实现类似功能。
而事实上,常见的云计算平台确实都提供了这种功能,包括国产三巨头BAT的三朵云。这次我们拿百度云平台举个例,这次我们使用的是Python3.6 。
二、库与id的配置步骤
我们先可以打开百度云的官网:
用百度搜就好,然后我们在首页-产品-人工智能中找到文字识别选项
然后在弹出的页面中选择“立即使用”
这里,我们要使用百度云计算平台的功能的话还需要创建一个百度账号,如果有pong友水过贴吧的话,那么用那个账号就可以啦,登陆并且进入“文字识别”界面之后我们可以看到:
选择创建应用,根据需求选择要用的功能然后给咱们的应用取个名分个类
例如我创建了个叫文字识别的应用,就可以进入应用管理界面看到:
这里我们需要的就是红框框住的AppID、API Key、Secret Key这三个内容,用于确保接下来我们发送给百度云平台的请求能够被识别。
然后,我们在python3.6中安装baidu-aip这个第三方库:
pip install baidu-aip
至此,我们实现“文字识别”的环境配置就完成了。
三、脚本编写
编写对应的工具脚本非常简单,我们首先看看我们的测试集,这是放在脚本工作目录中 data/ImageForOcr 下两章包含文字的图片
然后我们来编写我们的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之类的。
(这部分详情参考百度云官方技术文档)
对于我们的两张图片,控制台输出结果如下:
并且我们在脚本工作目录中创建了一个叫output.txt的文件,里面记载着我们识别图片得到的内容,并且几乎没啥错别字:
至此,脚本完成,有需要源码的可以老样子去我们的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“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~