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

Java中使用Tesseract识别十六进制矩阵图片时字母C识别错误求助

Tesseract识别十六进制矩阵字符错误的解决请求

背景

我正在开发Java程序,使用bytedeco的Tesseract移植版本提取特定图片中的文本。这些图片均包含5x5至7x7的矩阵,每个元素为十六进制数。

示例原始图片:
矩阵首张图片

预处理二值化后的PNG图片:
预处理后二值化PNG

原始图片尺寸395x395,预处理后放大至790x790。使用页面分割模式6(单一均匀文本块)时,识别结果如下:

1C 55 E9 55 E9
E9 18 18 BD 18
55 E9 18 E9 55
E9 18 55 55 BD
E9 10 BD 55 55

当前测试代码

private String[] analyseStep(String imagePath) {
    BytePointer outText;

    TessBaseAPI api = new TessBaseAPI();
    if(api.Init(null, "eng") != 0) {
        throw new RuntimeException("Could not initialize Tesseract!");
    }

    System.out.println("Analyzing: " + imagePath);

    PIX image = pixRead(imagePath);
    api.SetImage(image);
    outText = api.GetUTF8Text();

    System.out.println("OCR result:\n" + outText.getString());

    return null;
}

核心问题

整体识别效果尚可,但字母“C”的识别存在严重问题:有时正确识别为“C”,有时被识别为“8”或“0”。后续需要自动处理并执行操作,识别错误会导致严重问题,需要实现零错误识别。

已尝试的优化措施

  • 将图片从.jpg格式转换为.png和.tif格式
  • 颜色反转
  • 对比度增强
  • 腐蚀与膨胀操作
  • 将图片尺寸从395x395放大至790x790
  • 尝试Tesseract所有页面分割模式(模式6效果最佳)
  • 将矩阵拆分为5行分别识别

补充说明(疑似与识别无关)

每次运行Tesseract后,会出现以下错误信息:

Warning: Parameter not found: enable_new_segsearch
ObjectCache(00007ffcf9d5a4e0)::~ObjectCache(): WARNING! LEAK! object 00000209807427e0 still has count 1 (id D:\[some folders omitted]\src\main\resources\tessdata/eng.traineddatapunc-dawg)
ObjectCache(00007ffcf9d5a4e0)::~ObjectCache(): WARNING! LEAK! object 0000020980742770 still has count 1 (id D:\[some folders omitted]\src\main\resources\tessdata/eng.traineddataword-dawg)
ObjectCache(00007ffcf9d5a4e0)::~ObjectCache(): WARNING! LEAK! object 0000020980742a80 still has count 1 (id D:\[some folders omitted]\src\main\resources\tessdata/eng.traineddatanumber-dawg)
ObjectCache(00007ffcf9d5a4e0)::~ObjectCache(): WARNING! LEAK! object 0000020980742380 still has count 1 (id D:\[some folders omitted]\src\main\resources\tessdata/eng.traineddatabigram-dawg)
ObjectCache(00007ffcf9d5a4e0)::~ObjectCache(): WARNING! LEAK! object 0000020980742850 still has count 1 (id D:\[some folders omitted]\src\main\resources\tessdata/eng.traineddatafreq-dawg)

Maven依赖配置:

<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>tesseract-platform</artifactId>
    <version>5.3.1-1.5.9</version>
</dependency>

手动下载的tessdata目录内容:
tessdata目录内容


优化建议

  1. 限定识别字符集
    明确告诉Tesseract只识别十六进制相关字符,过滤无关干扰。在初始化API后添加:

    api.SetVariable("tessedit_char_whitelist", "0123456789ABCDEF ");
    

    注意保留空格,适配矩阵元素间的分隔。

  2. 禁用语言模型约束
    十六进制不是自然语言,无需加载字典类模型,减少错误判断:

    api.SetVariable("load_system_dawg", "false");
    api.SetVariable("load_freq_dawg", "false");
    
  3. 精细化预处理

    • 尝试Otsu自适应阈值化替代简单二值化,确保字符轮廓清晰无断裂;
    • 用中值滤波去除图片噪声:pixMedianFilter(image, 3);
    • 单独裁剪每个矩阵元素并归一化到统一尺寸(如64x64像素),消除位置和大小差异带来的识别误差。
  4. 使用针对性训练数据
    放弃通用的eng模型,改用digit模型配合字符白名单,或训练专门的十六进制字符小模型,能大幅提升识别准确率。

  5. 修复资源泄漏
    虽然警告不直接影响识别,但正确释放资源避免潜在问题,在代码末尾添加:

    outText.deallocate();
    api.Clear();
    api.End();
    pixDestroy(image);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:15:57