软件应用 | 你的“老”文献、手写笔记有多少可以识别和复制?快用python批量转化吧!
启研学社由知名学者担任学术顾问,由高校师生与企研数据科学团队联合组建的,是以大数据资源及相关技术助力中国学术、智库与行业研究为宗旨的研究组织。团队当前的主要目标是挖掘行政、经济与社会大数据资源在经济学学术、智库与相关行业研究领域中的应用价值,以学术研究为标准开展大数据治理研究,努力探索大数据分析技术融入中国经济社会研究的可行进路。
你的“老”文献、手写笔记有多少可以识别和复制?快用python批量转化吧!
Part1引言
在工作和学习过程中,我们经常需要将图片中不可编辑的文本转为可编辑的文本,例如:将手写的会议记录提取并保存到个人电脑中,以便会议内容的检索;将图片资料中的文字进行提取,为后续数据处理提供基础;将纸质教程中的内容转化为可编辑并快速传播的文字等等。
以往人们会采用手动录入的方式,但这种方式太过原始,并且非常浪费时间,随着OCR文字识别技术的诞生,文档电子化的问题迎刃而解。文字识别技术的概念最早出现于1929年,在近100年的发展中,OCR文字识别技术已经相当成熟,并被大量运用在医疗、教育、商务、新闻出版等领域。
类型 | 类型说明 | 举例 | 优势 | 劣势 |
---|---|---|---|---|
识别软件 | 专业的OCR文字识别软件、手机app以及微信小程序等 | 市面上有非常多的OCR文字识别软件,例如,ABBYY Finereader、汉王ORC等。 | (1)操作简单,界面友好 (2)准确度高,功能丰富 | (1)试用期结束后需要付费使用 (2)有些软件不支持批量转换 |
识别插件 | 集成在应用程序中的OCR文字识别插件 | QQ、WPS等应用软件内置了OCR文字识别插件 | (1)操作简单 (2)准确率较高 | (1)功能较少 (2)一般不支持批量转换 |
平台识别软件服务 | 互联网平台公司提供的OCR服务 | 百度智能云文字识别平台、讯飞开放平台、腾讯云OCR等等 | 提供多种文字识别服务:例如,识别名片、识别银行卡、识别公式、识别发票等等。 | (1)需要了解编程等相关知识,有一定的门槛 (2)需购买额度。 |
表1列出了提供OCR文字识别技术的软件或平台,优劣评价为笔者体验后给出,仅供参考。若读者需要转换大量的图片,推荐使用互联网公司提供的OCR服务。
Part2基于平台OCR服务批量识别图片的实现思路
本文以百度智能云文字识别平台(https://cloud.baidu.com/product/ocr_general)为例,提供了批量实现OCR识别的Python代码,供大家参考。
实现思路如下:
申请API_KEY和SECRET_KEY。 通过API_KEY和SECRET_KEY获取access_token,有效期30天 选择对应功能的URL,例如:“百度的通用文字识别(高精度版)” 的URL为“https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic” 根据百度智能云提供的文档配置参数 发送POST请求,把图片发送到服务器,让服务器识别内容,然后获取识别结果 解析结果,保存到指定路径中
Part3python代码
python代码如下(若要测试代码请准备好python3.7环境并安装requests模块):
import requests
import base64
import os
# API_KEY 和 SECRET_KEY 用来获取 access_token
# 获取 API_KEY 和 SECRET_KEY 请参考: https://cloud.baidu.com/doc/OCR/s/dk3iqnq51
API_KEY = 'xxxxxxxxxxxx'
SECRET_KEY = 'xxxxxxxxxxxxxx'
def get_access_token():
"""
根据 API_KEY 和 SECRET_KEY 获取 access_token
请参考: https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu
:return: access_token, 有效期为30天
"""
host = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=' \
f'client_credentials&client_id={API_KEY}&client_secret={SECRET_KEY}'
response = requests.get(host)
if response:
return response.json()['access_token']
else:
return 'get access_token failed'
def baidu_ocr(image):
"""
百度的通用文字识别(高精度版)
:param image: 图片路径
:return: 图片中的文字
"""
# 读取图片并用 base64 编码
f = open(image, 'rb')
img = base64.b64encode(f.read())
f.close()
# 设置url参数
params = {"image": img}
# 设置access_token
access_token = get_access_token()
# 设置请求的url
request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
# 发起请求
response = requests.post(request_url, data=params, headers=headers)
# 获取内容
if response:
words_result = ''
for words in response.json()['words_result']:
# 若不需要换行, 请删除 ' + \n'
words_result += words['words'] + '\n'
return words_result
return 'get txt failed'
def get_imgs_path(img_path):
"""
获取图片的路径
:param img_path: 存放图片的文件夹
:return: 保存图片名称和路径的生成器
"""
# 图片名称生产器
img_name = (os.path.splitext(i)[0] for i in os.listdir(img_path))
# 图片路径生产器
images = (os.path.join(img_path, i) for i in os.listdir(img_path))
return images, img_name
def run_ocr(img_path, save_path):
# 得到图片的文件名称, 及其路径
# images, img_name 是两个生成器
images, img_name = get_imgs_path(img_path)
# 对每一个图片进行ocr识别
for name, path in zip(img_name, images):
# 调用百度接口
txt = baidu_ocr(path)
# 图片文字保存路径
txt_save_path = os.path.join(save_path, name + '.txt')
# 打印相关信息
print(f'图片名称: {name}, 图片位置: {path}, 图片文字保存位置: {txt_save_path} \n')
# 保存从百度返回的文字
with open(txt_save_path, 'w') as f:
f.write(txt)
if __name__ == '__main__':
# 图片保存路径
img_path = r'D:\ocr\imgs'
# 图片中文字保存路径
save_path = r'D:\ocr\result'
# 批量转换
run_ocr(img_path, save_path)
Part4效果展示与结语
上述代码仅针对百度智能云平台的 “ 通用文字识别(高精度版)” Web API接口。如果需要对发票、表格、身份证等图片进行OCR文字识别,请阅读相关文档:https://cloud.baidu.com/doc/OCR/s/Ek3h7xypm 。
点击搜索你感兴趣的内容吧
往期推荐
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
文 | 陈煌杰
审核 | 杨奇明、施丹燕
欢迎扫描👇二维码添加关注