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

如何从游戏截图最大化提取文本?基于Tesseract的游戏自动化测试问询

从电子游戏截图中稳定提取文本的最优OCR方案(适配自动化测试场景)

兄弟,你想用OCR实现类似Selenium的游戏自动化测试——靠识别文本等待按钮出现再点击,核心需求就是稳定识别按钮文本、覆盖多场景提取尽可能多内容对吧?我之前帮朋友折腾过类似需求,结合Tesseract的特性,整理了一套能大幅提升识别准确率和稳定性的方案,咱们一步步来:

一、先把预处理做到极致(游戏截图的核心优化点)

游戏截图的糟心点太多了:动态光影、渐变背景、自定义艺术字体、抗锯齿边缘,预处理是Tesseract能识别准的前提,这几步一定要做:

  • 裁剪ROI(感兴趣区域):别把整屏截图丢给OCR,先定位到按钮的大致区域,只传按钮部分进去,减少干扰。比如用Python的PIL快速裁剪:
    from PIL import Image
    img = Image.open("game_screenshot.png")
    # 假设按钮坐标是(x1,y1,x2,y2),可以用自动化工具先定位大致范围
    roi = img.crop((x1, y1, x2, y2))
    roi.save("button_roi.png")
    
  • 灰度化+自适应二值化:游戏颜色太丰富,灰度化后用自适应二值化处理(比固定阈值更适配渐变背景),用OpenCV的示例代码:
    import cv2
    img = cv2.imread("button_roi.png")
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 自适应高斯二值化,搞定明暗不均的按钮
    thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
    cv2.imwrite("processed_button.png", thresh)
    
  • 去除噪声:游戏里的粒子效果、阴影会干扰识别,用形态学操作清掉小噪点:
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2,2))
    cleaned = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)
    
  • 放大文本:如果按钮文本偏小,把ROI放大2-3倍(用立方插值法),能显著提升Tesseract的识别率:
    scaled = cv2.resize(cleaned, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)
    

二、Tesseract参数调优(针对游戏文本)

默认参数对游戏特殊字体友好度极低,这些参数一定要加上:

  • 指定语言+自定义字符集:如果是英文游戏用-l eng,如果有特殊符号(比如游戏专属图标文字、特殊符号),用字符白名单限定识别范围,减少误识别:-c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#
  • 页面分割模式(PSM):游戏菜单文本大多是单行或固定块,推荐用--psm 7(将图像视为单行文本)或者--psm 6(假设图像是单个统一文本块),避免Tesseract错误分割文本。
  • 启用LSTM引擎:Tesseract 4+默认用LSTM,比旧引擎准很多,如果是老版本,加--oem 3(混合LSTM+传统引擎模式)。

示例命令行:

tesseract processed_button.png output --psm 7 -l eng -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ --oem 3

三、自定义训练Tesseract(针对游戏独特字体)

如果游戏用了自定义艺术字体,Tesseract默认模型识别率会暴跌,这时候必须训练专属语言模型:

  1. 收集游戏里所有按钮文本的截图(尽量覆盖不同大小、状态的字体)
  2. 用jTessBoxEditor工具标注文本,生成训练样本
  3. 运行Tesseract的训练脚本生成自定义.traineddata模型文件
  4. 调用时用-l [自定义模型名]加载,能把特定字体的识别准确率拉满

四、结合辅助工具实现类似Selenium的自动化逻辑

光靠OCR还不够,要实现“等待元素出现”的逻辑,得结合图像匹配或游戏自动化工具:

  • OCR+模板匹配:先用模板匹配快速定位按钮位置(比OCR找位置快得多),再在该区域做OCR确认文本,避免误点。比如用OpenCV的cv2.matchTemplate找按钮位置,再裁剪ROI做OCR。
  • 搭配游戏自动化框架:用PyAutoGUI或GameDriver这类工具先定位UI元素的大致区域,再对区域做OCR,减少截图范围,提升效率。
  • 缓存已识别内容:固定菜单的按钮,第一次识别后缓存文本和位置,后续直接用位置匹配,不用重复OCR,加快自动化速度。

五、特殊场景的针对性优化

  • 动态光影/按钮状态变化:如果按钮有hover高亮、变色效果,截图前先模拟鼠标移开,确保按钮处于稳定状态;或者同时训练正常和hover状态的字体模型。
  • 多语言/混合文本:如果游戏支持多语言,用-l eng+chi_sim这类多语言组合,或者针对每种语言单独训练模型。
  • 极小/像素化文本:除了放大,还可以用cv2.threshold固定阈值配合cv2.bitwise_not反转颜色,让文本边缘更清晰。

总的来说,预处理是基础,参数调优能快速提效,自定义训练是解决特殊字体的核心,结合自动化工具才能实现类似Selenium的等待逻辑。

内容的提问来源于stack exchange,提问作者Roman A. Taycher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:01:52