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

使用Pytesseract识别部落冲突截图数字失败,求技术解决方案

部落冲突截图数字识别异常问题排查与解决方法

我尝试用Pytesseract提取《部落冲突》游戏截图中的数字,但识别结果异常,输出内容为“Uke awl BOB C”。以下是实现代码及相关处理后的图像:

import cv2
import pytesseract

image = cv2.imread('x.png',0)
thresh = cv2.threshold(image, 150, 255, cv2.THRESH_BINARY_INV)[1]

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2,2))
close = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
result = 255 - close

data = pytesseract.image_to_string(result, lang='eng',config='--psm 6')
print(data)

cv2.imshow('thresh', thresh)
cv2.imshow('result', result)
cv2.imshow('close', close)
cv2.waitKey()

原始截图:
原始截图

形态学闭运算后的图像:
闭运算后图像


问题原因

  1. 游戏采用特殊艺术字体,Tesseract默认英文训练集对这类非标准字体识别准确率极低
  2. 当前固定阈值处理无法适配截图局部明暗差异,形态学操作的核大小导致字符特征被破坏

解决方法

1. 优化图像处理逻辑

改用自适应阈值处理,调整形态学核大小,突出数字字符特征:

import cv2
import pytesseract

image = cv2.imread('x.png', 0)
# 自适应高斯阈值,应对截图明暗不均问题
thresh = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)

# 缩小核尺寸,避免字符粘连或变形
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 1))
close = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
result = 255 - close

cv2.imshow('optimized_result', result)
cv2.waitKey()

2. 限定Tesseract仅识别数字

通过配置参数过滤非数字字符,避免无关识别结果:

# 替换原识别代码,指定白名单仅包含数字
data = pytesseract.image_to_string(result, lang='eng', config='--psm 6 --oem 3 -c tessedit_char_whitelist=0123456789')
print(data)

参数说明:

  • --oem 3:启用默认OCR引擎模式
  • tessedit_char_whitelist=0123456789:强制仅识别0-9的数字,排除其他字符干扰

3. 自定义字体训练(进阶方案)

如果上述方法仍达不到预期效果,可以针对游戏数字字体制作自定义训练集:

  • 截取游戏中所有数字的清晰样本,生成Tesseract训练所需的.tif图像和.box标注文件
  • 使用Tesseract训练工具生成专属语言包,识别时指定该语言包即可大幅提升准确率

内容的提问来源于stack exchange,提问作者N.Armada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:30:06