python文字识别模块_Python文字识别就这么简单-对比pillow,wandTesseract的使用

今天我们来说一下,如何使用python识别PDF中的文字。今天,我们用

Python3, pillow, wand

和三个python包,分别是Tesseract下的:

textract,pytesseract

pyocr

下面的内容,同样也适用于普通文本,但是这货识别结果不是百分百准确,所以后期不要忘记仔细检查它。

更高层次的识别或者说是更人性化的代码实现,我们放在下一期文章,这篇文章我们先来简单的进阶,并且我们会对比一下这几个识别模块的效率怎么样。

c4272a64-d0cb-45ba-b294-74c293fc727b

开始识别之前,我们可以准备一份PDF文档,然后转换为图片格式。

主要是除了textract之外,都不能使用pdf格式,所以我们应该将pdf文件转换为图像(jpg)。我们将使用wand这个类库。

from wand.image import Image as Img

with Img(filename='file_name.pdf', resolution=300) as img:

img.compression_quality = 99

img.save(filename='image_name.jpg')

现在我们可以使用包装器将新图像放到OCR中,然后使用regexp或其他任何文本工具(例如NLTK)查找所需的数字。但是这种方式有点白搭...

比较好的方法是你可以用一些绘图工具比如PS剪裁一下。

然后我们裁剪大图,然后提取里面的小图:

from PIL import Image

img = Image.open('image_name.jpg')

crop_img = img.crop((x1, y1, x2, y2))

crop_img.save('amount.jpg')

返回结果:

2031351b1b094ae69db7357f1d208a39

好的,现在我们可以开始识别我们的图像了。别忘了,只有textract可以打开图像,另一个需要使用pillow.

测试效果:

用textract识别:

import textract

text = textract.process('image.jpg', encoding='ascii', method='tesseract')

返回结果:

{'3rd Image': b'0.130\n\n',

'1st Image': b'4.433\n\n',

'4th Image': b'1M0\n\n',

'5th Image': b'DJUG\n\n',

'2nd Image': b''}

用pytesseract识别:

from PIL import Imageimport pytesseract

text = pytesseract.image_to_string(Image.open('image.jpg'))

返回结果:

{'5th Image': '0.00',

'3rd Image': '0.00',

'1st Image': '4.03',

'4th Image': '1W',

'2nd Image': ''}

用pytesseract识别:

import pyocrimport pyocr.buildersfrom PIL import Image

tools = pyocr.get_available_tools()[0]

text = tools.image_to_string(Image.open(image), builder=pyocr.builders.DigitBuilder())

返回结果:

{'4th Image': '1 300',

'1st Image': '4.03',

'2nd Image': '',

'3rd Image': '0.00',

'5th Image': '0.00'}

额...看起来效果不是很好,或者说有些残酷。识别率太低,为什么呢?会不会问题出在我们的图片上呢?

4f6a3a2a445946189512f051a62ef1c6

还真是,如果你们要从pdf文件中缩放提取的图像,你们会在图像中看到很多噪点。要解决这个问题,我们可以尝试将图像转换为单色模式(灰度):

from PIL import Image

img = Image.open('image.jpg')img = img.convert('L')img.save('image.jpg')

然后….

95d60fa6faf74c569ebbc19ef26ed240

看吧这个看起来好多了,我们重新运行来测试。

返回结果:

{'3rd Image': b'0.00\n\n',

'5th Image': b'0.00\n\n',

'4th Image': b'1000\n\n',

'1st Image': b'4.03\n\n',

'2nd Image': b''}

Pytesseract:

{'1st Image': '4.03',

'4th Image': '1000',

'5th Image': '0.00',

'2nd Image': '',

'3rd Image': '0.00'}

Pyocr:

{'5th Image': '0.00',

'3rd Image': '0.00',

'2nd Image': '',

'4th Image': '1000',

'1st Image': '4.03'}

所以,在这种情况下,除第二张图像外,所有的模块返回的数据都很准确。

15435122572834c57a49767

总结:

Textract:

Textract是一个很有前途的类库。它可以从pdf,gif,docx,png,jpg等中提取数据。但是这个包只能用于简单的pdf文件(没有表格,很多列等),而且这个包比较大(大约30mb左右)

Pytesseract:

中规中矩的识别库,但没什么特别的。

Pyocr:

很好用,具有更多功能的python包,比如你可以设置要识别的数据(句子,单词,数字等),可以使用Tesseract或Cuneiform,进行方向检测等等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值