我需要使用 Pytesseract 从这张图片中提取文字:
和代码:
from PIL import Image, ImageEnhance, ImageFilter
import pytesseract
path = 'pic.gif'
img = Image.open(path)
img = img.convert('RGBA')
pix = img.load()
for y in range(img.size[1]):
for x in range(img.size[0]):
if pix[x, y][0] < 102 or pix[x, y][1] < 102 or pix[x, y][2] < 102:
pix[x, y] = (0, 0, 0, 255)
else:
pix[x, y] = (255, 255, 255, 255)
img.save('temp.jpg')
text = pytesseract.image_to_string(Image.open('temp.jpg'))
# os.remove('temp.jpg')
print(text)
而“temp.jpg”是
还不错,但是打印的结果是,2 WW
不是正确的文本2HHH
,那我怎样才能去除那些黑点呢?
最佳答案
这是一个使用 OpenCV 和 Pytesseract OCR 的简单方法。要对图像执行 OCR,对图像进行预处理很重要。这个想法是获得一个处理过的图像,其中要提取的文本是黑色的,背景是白色的。为此,我们可以转换为 grayscale , 应用轻微 Gaussian blur ,然后 Otsu's threshold获得二值图像。从这里,我们可以申请morphological operations消除噪音。最后我们反转图像。我们使用 --psm 6
配置选项执行文本提取,以假设单个统一的文本 block 。看看here更多选择。
这是图像处理管道的可视化:
输入图像
转灰度->
高斯模糊->
大津的阈值
请注意有微小的噪音规范,为了消除它们,我们可以执行形态学操作
最后我们反转图像
Pytesseract OCR 的结果
2HHH
代码
import cv2
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
# Grayscale, Gaussian blur, Otsu's threshold
image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (3,3), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
# Morph open to remove noise and invert image
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=1)
invert = 255 - opening
# Perform text extraction
data = pytesseract.image_to_string(invert, lang='eng', config='--psm 6')
print(data)
cv2.imshow('thresh', thresh)
cv2.imshow('opening', opening)
cv2.imshow('invert', invert)
cv2.waitKey()
关于python - 使用 pytesseract OCR 识别图像中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37745519/