使用PIL从URL打开图像文件,使用pytesseract进行文本识别

时间:2017-04-13 23:15:51

标签: image python-3.x request python-imaging-library ocr

我正面临一个令人困惑的问题,试图下载图像并使用BytesIO打开它,以便使用PIL& amp;提取文本。 pytesseract。

>>> response = requests.get('http://abc/images/im.jpg')
>>> img = Image.open(BytesIO(response.content))
>>> img
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=217x16 at 0x7FDAD185CB38>
>>> text = pytesseract.image_to_string(img)
>>> text
''

这里给出一个空字符串。

但是,如果我保存图像,然后使用pytesseract再次打开它,它会给出正确的结果。

>>> img.save('im1.jpg')
>>> im = Image.open('im1.jpg')
>>> pytesseract.image_to_string(im)
'The right text'

只是为了确认,两者都给出相同的尺寸。

>>> im.size
(217, 16)
>>> img.size
(217, 16)

可能是什么问题?是否有必要保存图像或我做错了什么?

1 个答案:

答案 0 :(得分:6)

你似乎有一个我无法复制的问题。因此,为了诊断你的问题,如果有的话,需要更多的细节,但不是要求细节,我只是假设(所以我的总体经验),在提供细节的过程中,你的问题将消失,并且不能再现。这种方式可以解决您的问题。

如果不是,请告知您是否需要进一步的帮助。至少你可以肯定,你通常是正确的,因为你经历过的事情,并没有做任何明显的错误。

这里有完整的代码(你的问题是缺少提示哪些模块是必要的)并且图像实际上是在线的,所以其他任何人也可以测试代码是否有效(你没有提供你的在线现有图像)问题):

import io
import requests
import pytesseract
from PIL import Image
response = requests.get("http://www.teamjimmyjoe.com/wp-content/uploads/2014/09/Classic-Best-Funny-Text-Messages-earthquake-titties.jpg")
# print( type(response) ) # <class 'requests.models.Response'>
img = Image.open(io.BytesIO(response.content))
# print( type(img) ) # <class 'PIL.JpegImagePlugin.JpegImageFile'>
text = pytesseract.image_to_string(img)
print( text )

这里是pytesseract输出:

Hey! I just saw on CNN
there was an earthquake
near you. Are you ok?






‘ Yes! We‘re all line!

What did it rate on the titty
scale?
‘ Well they only jiggled a

little bit, so probably not

that high.
HAHAHAHAHAHA I LOVE
YOU
Richter scale. My phone is l
a 12 yr old boy.

我的系统:Linux Mint 18.1 with Python 3.6