You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字体特殊致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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:25:32