字体特殊致OCR无法识别数字7,求图像处理解决方案
特殊字体数字识别(数字7无法识别)解决方法
问题背景
尝试读取图片中的算术题内容并执行运算,但因字体特殊,数字7无法被正确识别。作为图像处理新手,已尝试像素化图片但无效果,以下是使用cv2、pytesseract的代码及识别结果:

代码实现
import cv2 import pytesseract from PIL import Image img = cv2.imread('modules/visual_basic_math/temp2.png', cv2.IMREAD_GRAYSCALE) thresh = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)[1] print(pytesseract.image_to_string(img, config='--psm 6'))
当前识别结果
+44 849559 +46653% 14 +7776197 +6415995 +*9156346 x4463310 +54Q%433 +1664 20%
解决方法
1. 启用二值化预处理图像
你当前代码生成了二值化后的thresh图像,但未用于识别,这是核心问题。二值化能消除背景干扰,强化字符轮廓,修改代码如下:
# 使用二值化后的图像进行识别 print(pytesseract.image_to_string(thresh, config='--psm 6'))
若效果不理想,可调整阈值参数(如将100改为127),或尝试cv2.THRESH_BINARY替代cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU。
2. 限制识别字符集
通过指定白名单,让Tesseract仅识别数字和运算符号,减少误判:
print(pytesseract.image_to_string(thresh, config='--psm 6 -c tessedit_char_whitelist=0123456789+*x'))
3. 训练自定义字体语言包(进阶)
如果前两种方法无效,需针对该特殊字体训练Tesseract:
- 收集该字体下每个数字的样本(每个数字至少10个不同实例)
- 使用Tesseract官方训练工具
tesstrain生成自定义语言包 - 识别时指定使用自定义语言包:
config='--psm 6 -l 自定义语言包名称'
4. 更换OCR工具尝试
EasyOCR对特殊字体的兼容性较好,新手易上手,示例代码:
import easyocr # 初始化识别器,指定识别英文 reader = easyocr.Reader(['en']) # 读取图片内容 result = reader.readtext('modules/visual_basic_math/temp2.png') # 输出识别到的文本 for item in result: print(item[1])
内容的提问来源于stack exchange,提问作者Anish Jain
相关产品推荐
相关产品推荐

