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

Tesseract命令行可识别TIFF,.NET C#程序识别乱码如何解决?

.NET程序中Tesseract识别TIFF乱码的修复方案

核心问题排查与修改步骤

1. 修正tessdata路径引用错误

你的代码中计算了Assembly路径但未实际使用,而是用了相对路径./tessdata,这可能导致程序在不同运行目录下找不到训练数据,引发识别异常。替换路径初始化逻辑:

// 使用程序运行的根目录拼接tessdata路径,确保路径正确
var tessDataPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "tessdata");
using (var ocr = new TesseractEngine(tessDataPath, "eng", EngineMode.Default))

2. 避免Bitmap加载导致的图像失真

System.Drawing.Image.FromFile加载TIFF时可能自动转换图像格式(比如调整位深、压缩方式),丢失Tesseract需要的原始图像信息。改用Tesseract原生的Pix.LoadFromFile直接读取文件:

// 移除Bitmap加载代码,直接用Pix读取TIFF文件
using (var img = Pix.LoadFromFile(file))
{
    using (var page = ocr.Process(img))
    {
        ocrtext = page.GetText();
        result = ocrtext.TrimStart('\n');
        using (StreamWriter sw = new StreamWriter(outfileab + ".txt", false, Encoding.UTF8))
        {
            sw.Write("aa:" + result);
        }
    }
}

3. 明确StreamWriter的编码格式

默认StreamWriter使用无BOM的UTF-8编码,部分文本查看工具会识别为GBK等编码导致乱码,显式指定UTF-8编码(带BOM):

using (StreamWriter sw = new StreamWriter(outfileab + ".txt", false, Encoding.UTF8))
{
    sw.Write("aa:" + result);
}

4. 匹配Tesseract原生库的平台位数

Tesseract的原生库分32位和64位,若项目平台目标不匹配会导致识别异常:

  • 打开Visual Studio项目属性 → 生成选项卡
  • 将“平台目标”设置为x64或x86,与你安装的Tesseract 5.4.0版本位数一致(命令行能运行的版本位数)
  • 取消勾选“首选32位”选项

5. 验证字符白名单配置(可选)

如果你的目标文本包含白名单外的字符,会被过滤导致输出异常,若不需要限制识别范围可注释该行:

// 若无需限制识别字符,注释此行
// ocr.SetVariable("tessedit_char_whitelist", "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:50:04