没有从 pytesseract 得到正确的结果
Not getting correct results from pytesseract
我正在尝试在 python 中执行 OCR,但没有得到正确的输出。这是代码。我尝试了原始图像,也尝试了灰度但没有得到任何结果
from PIL import Image
import pytesseract
def convert_to_monochrome(image):
pixels = image.load()
for i in range(image.size[0]): # for every pixel:
for j in range(image.size[1]):
r, g, b = pixels[i, j]
if r > 200 and g > 200 and b > 200:
pixels[i, j] = (255, 255, 255)
else:
pixels[i, j] = (0, 0, 0)
return image
def interpret_chips(image):
#image = image.resize((image.size[0] * 10, image.size[1] * 10), Image.ANTIALIAS)
#image = image.convert("LA")
#image.show()
_image = convert_to_monochrome(image)
_image.show()
_image.save("chips.jpg")
config = "--psm 7 -c tessedit_char_whitelist=0123456789KMT"
rank_string = pytesseract.image_to_string(_image, config=config) # expensive
return _image, rank_string
for i in range(1, 6):
print(i)
img = Image.open("temp/sample" + str(i) + ".jpg")
img, text = interpret_chips(img)
print(text)
img.save("temp/monochrome" + str(i) + ".jpg")
感谢您的帮助
我附上了一些给出错误结果的原始图像。应用定义的单色函数后得到的预处理图像请查看。文本可以是 4、400、4000、459K、29M 等类型。我得到的结果非常尴尬。
Raw Image 1
Raw Image 2
Raw Image 3
Pre processed 1
Pre processed 2
Pre processed 3
问题是 tesseract 需要在浅色背景上带有深色文本的图像。您的案例中的预处理图像恰恰相反。所以你可以反转预处理图像。
以下代码对我有用:
from PIL import Image
import pytesseract
def convert_to_monochrome(image):
pixels = image.load()
for i in range(image.size[0]): # for every pixel:
for j in range(image.size[1]):
r, g, b = pixels[i, j]
if r > 200 and g > 200 and b > 200:
pixels[i, j] = (0, 0, 0)
else:
pixels[i, j] = (255, 255, 255)
return image
def interpret_chips(image):
#image = image.resize((image.size[0] * 10, image.size[1] * 10), Image.ANTIALIAS)
#image = image.convert("LA")
#image.show()
_image = convert_to_monochrome(image)
_image.show()
_image.save("chips.jpg")
config = "--psm 6 -c tessedit_char_whitelist=0123456789KMT"
rank_string = pytesseract.image_to_string(_image, config=config) # expensive
return _image, rank_string
img = Image.open("orig.jpg")
img, text = interpret_chips(img)
print(text)
orig.jpg:
text
是 23.000,
我正在尝试在 python 中执行 OCR,但没有得到正确的输出。这是代码。我尝试了原始图像,也尝试了灰度但没有得到任何结果
from PIL import Image
import pytesseract
def convert_to_monochrome(image):
pixels = image.load()
for i in range(image.size[0]): # for every pixel:
for j in range(image.size[1]):
r, g, b = pixels[i, j]
if r > 200 and g > 200 and b > 200:
pixels[i, j] = (255, 255, 255)
else:
pixels[i, j] = (0, 0, 0)
return image
def interpret_chips(image):
#image = image.resize((image.size[0] * 10, image.size[1] * 10), Image.ANTIALIAS)
#image = image.convert("LA")
#image.show()
_image = convert_to_monochrome(image)
_image.show()
_image.save("chips.jpg")
config = "--psm 7 -c tessedit_char_whitelist=0123456789KMT"
rank_string = pytesseract.image_to_string(_image, config=config) # expensive
return _image, rank_string
for i in range(1, 6):
print(i)
img = Image.open("temp/sample" + str(i) + ".jpg")
img, text = interpret_chips(img)
print(text)
img.save("temp/monochrome" + str(i) + ".jpg")
感谢您的帮助
我附上了一些给出错误结果的原始图像。应用定义的单色函数后得到的预处理图像请查看。文本可以是 4、400、4000、459K、29M 等类型。我得到的结果非常尴尬。
Raw Image 1
Raw Image 2
Raw Image 3
Pre processed 1
Pre processed 2
Pre processed 3
问题是 tesseract 需要在浅色背景上带有深色文本的图像。您的案例中的预处理图像恰恰相反。所以你可以反转预处理图像。 以下代码对我有用:
from PIL import Image
import pytesseract
def convert_to_monochrome(image):
pixels = image.load()
for i in range(image.size[0]): # for every pixel:
for j in range(image.size[1]):
r, g, b = pixels[i, j]
if r > 200 and g > 200 and b > 200:
pixels[i, j] = (0, 0, 0)
else:
pixels[i, j] = (255, 255, 255)
return image
def interpret_chips(image):
#image = image.resize((image.size[0] * 10, image.size[1] * 10), Image.ANTIALIAS)
#image = image.convert("LA")
#image.show()
_image = convert_to_monochrome(image)
_image.show()
_image.save("chips.jpg")
config = "--psm 6 -c tessedit_char_whitelist=0123456789KMT"
rank_string = pytesseract.image_to_string(_image, config=config) # expensive
return _image, rank_string
img = Image.open("orig.jpg")
img, text = interpret_chips(img)
print(text)
orig.jpg:
text
是 23.000,