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

如何提升截图场景下Tesseract OCR的识别准确率?

提升Tesseract识别Arial字体截图准确率的实用方案

嘿,我太懂你这种明明是常见的Arial黑底白字截图,Tesseract却乱码连连的糟心了!之前我处理类似场景时,试过不少方法,结合你提到的字体训练思路,给你整理一套落地的方案:

一、先试试低成本的预处理优化(不用训练也能救回不少准确率)

很多时候识别拉胯不是字体的锅,是截图的预处理没做到位,Tesseract对输入图片的要求其实挺挑的:

  • 反转颜色:Tesseract默认对白底黑字的识别效果更好,黑底白字可以直接反转成标准格式。用Python的PIL或者OpenCV都能一键搞定:
    # PIL示例
    from PIL import Image, ImageOps
    img = Image.open("your_screenshot.png")
    inverted_img = ImageOps.invert(img)
    inverted_img.save("inverted.png")
    
  • 强制二值化:把图片转换成纯黑白(无灰度),彻底消除模糊干扰:
    # OpenCV示例
    import cv2
    img = cv2.imread("inverted.png", 0)
    _, binary_img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
    cv2.imwrite("binary.png", binary_img)
    
  • 放大字体:如果截图里的字体小于30px,Tesseract很容易认错,把图片放大1.5-2倍再识别,效果会明显提升:
    resized_img = cv2.resize(binary_img, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)
    
  • 去除噪声:如果截图有轻微的边框、阴影噪点,用中值滤波或者高斯模糊先清掉:
    denoised_img = cv2.medianBlur(resized_img, 3)
    

二、终极方案:训练Arial专属的Tesseract模型

如果预处理后还是达不到要求,那自定义字体训练就是你的最优解,亲测能做到近乎100%的准确率,步骤如下:

1. 准备训练素材

  • 生成和你截图字体完全匹配的样本:包括你需要识别的所有字符(数字、大小写字母、符号等),字体大小、样式(粗体/常规)要和截图一致。可以用Python脚本批量生成:
    from PIL import Image, ImageDraw, ImageFont
    
    font_path = "path/to/arial.ttf"  # 你的Arial字体文件路径
    font = ImageFont.truetype(font_path, size=40)  # 字体大小和截图匹配
    chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"  # 替换成你需要的字符
    
    for idx, char in enumerate(chars):
        img = Image.new("L", (50, 50), 255)  # 白底
        draw = ImageDraw.Draw(img)
        draw.text((5, 5), char, font=font, fill=0)  # 黑字
        img.save(f"arial_sample_{idx}.png")
    
  • 尽量多生成一些样本,比如每个字符生成3-5种不同的轻微偏移版本,让模型更鲁棒。

2. 生成标注文件(.box)

每个样本图片需要对应一个.box文件,用来标注字符的位置和内容。你可以用Tesseract自带的tesseract命令自动生成后手动修正:

tesseract arial_sample_0.png arial_sample_0 batch.nochop makebox

打开生成的.box文件,格式是字符 左 上 右 下 0,确保每个标注都准确对应图片里的字符。

3. 启动训练

  • 先安装Tesseract的训练工具包(比如Ubuntu下用sudo apt install tesseract-ocr-training,Windows需要单独下载训练工具)。
  • 用官方的tesstrain.sh脚本训练,命令示例:
    tesstrain.sh \
      --fonts_dir /usr/share/fonts \
      --fontlist "Arial" \
      --lang eng \
      --linedata_only \
      --langdata_dir ./langdata \
      --tessdata_dir ./tessdata \
      --output_dir ./arial_train_output
    
    这个命令会基于英文训练集,加入Arial字体的样本,生成自定义的训练模型。

4. 使用自定义模型

训练完成后,会在输出目录得到arial_custom.traineddata(具体名称看你设置),把它复制到Tesseract的tessdata目录下,然后识别时指定这个模型:

tesseract your_processed.png output -l arial_custom

三、额外小技巧

  • 如果你的截图是单行文本或者单个字符,用--psm参数指定页面分割模式,能进一步提升准确率:
    # 单行文本用psm 7
    tesseract your_img.png output -l arial_custom --psm 7
    
  • 训练前可以先测试默认模型在预处理后的效果,如果已经能满足需求,就不用折腾训练了,省时间!

内容的提问来源于stack exchange,提问作者forever

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:29:00