前言:因项目所需,要对图片进行基本的文字识别,联想到手机qq有图片自动提取文字功能,觉得肯定有可以调用的外部api。查了一下,比较常用的python实现图片转文字的库是pytesseract(第一反应联想到漫威中的宇宙魔方Tesseract哈哈哈哈)
摘要:主要利用Python的第三方库pytesseract,实现图片转文字。但转换效率一般,且有一定的错误,并带有许多空行。可适用于获取图片中的文字,但阅读性不佳。
实验环境:
win10+pycharm2018.1+python3.6
所需库:
Pillow 4.3.0
pytesseract 0.2.0
安装都很简单,在cmd命令行里直接pip3 install xxxxx就行。
敲黑板,安装完库还不行,还要安装tesseract的软件,这样系统才能识别引擎成功读取文字。
可从github下载tesseract-ocr-setup-4.00.00dev
https://github.com/tesseract-ocr/tesseract/wiki/4.0-with-LSTM#400-alpha-for-windows
安装的时候要注意,tesseract的安装并不默认安装什么语言,如果自己需要简体中文的语言包,那么就不能一直点next点到finish。如下图,我安装了MATH和简体中文包。
好了进行完上述预备阶段的任务,代码就很简单了。
import pytesseract
from PIL import Image
import datetime
def main():
for i in range(1,2):
starttime = datetime.datetime.now()
image = Image.open(r"C:\Users\夹心\Desktop\计算机网络_"+str(i)+".png")
text = pytesseract.image_to_string(image, lang='chi_sim') # 使用简体中文解析图片
endtime = datetime.datetime.now()
print (r"计算机网络_"+str(i)+r"转换完成,耗时:" + str((endtime - starttime).seconds))
text=text.replace(" ","")
with open(r"C:\Users\夹心\Desktop\计算机网络_"+str(i)+".txt", "a") as f: # 将识别出来的文字存到本地
# print(text)
f.write(str(text))
main()
几点注意:
1.转换的速度相对较慢,不是很乐观。如图这样一张字比较密集的图片,转换用时约14s。程序中的datatime库就是为了计算转换用时而设定的。速度的慢体现在批量转换上,并未找到很合适的优化方法。
2.转化的正确率并非100%。尽管对于图中这样的标准系统字体,转换成功率仍难以达到100%,如单播会被转换成单擎等。
3.转化后的txt有许多空行,非常影响阅读体验,可以自己设计代码改善一下。因为我要做的是分词,所以空行没有什么妨碍,所以我没有进行处理。
以上就是python实现图片转文字的讲解。