我正面临一个令人困惑的问题,试图下载图像并使用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)
可能是什么问题?是否有必要保存图像或我做错了什么?
答案 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