Tesseract无法正确识别文本、空白区域误识别该如何解决?
问题原因
你当前使用的--psm 7参数会将输入图像判定为单一行文本,Tesseract会扫描整幅裁剪后图像的所有区域,若裁剪范围包含多余空白区域,或是空白区域存在肉眼难以察觉的噪点,就会被误识别为额外字符。
解决方法
- 增加图像预处理环节
裁剪后先对图像做灰度转换、二值化、去噪处理,消除空白区域的噪点干扰,同时增加字符白名单限制,避免无关字符被识别,修改后的代码如下:
import cv2 import numpy as np from PIL import Image import pytesseract def get_text(image, coord): im = Image.open(image) image_cropped = crop_text(im, coord) # 图像预处理 img_np = np.array(image_cropped) # 转灰度图 gray = cv2.cvtColor(img_np, cv2.COLOR_RGB2GRAY) # 自适应二值化 _, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) # 形态学操作去除小噪点 kernel = np.ones((2,2), np.uint8) cleaned_img = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel, iterations=1) # 识别配置:限定只识别大小写字母和空格,避免无关字符输出 text = pytesseract.image_to_string(cleaned_img, lang='eng', config='--psm 7 --oem 3 -c tessedit_char_whitelist="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz "') # 去除首尾多余空白 text = text.strip() print(text) return text
- 优化裁剪范围
检查crop_text函数的裁剪逻辑,尽量缩小裁剪边界,仅保留包含文本的核心区域,避免纳入多余空白边框。 - 适配调整参数
如果调整后仍有误识别,可尝试更换psm参数为--psm 8(将图像判定为单个单词),若目标文本包含数字、特殊符号,可将对应字符补充到字符白名单中。
内容的提问来源于stack exchange,提问作者Ignacio Isasmendi
相关产品推荐
相关产品推荐

