QUICKSTART.md 6.9 KB

OCR 识别 - 快速开始指南

🎯 5分钟快速上手

第一步:安装 NuGet 包

在 Visual Studio 中打开包管理器控制台,运行:

Install-Package Tesseract -Version 5.2.0
Install-Package OpenCvSharp4 -Version 4.8.0.20230708
Install-Package OpenCvSharp4.runtime.win -Version 4.8.0.20230708

或者通过 NuGet 包管理器界面搜索并安装。

第二步:下载语言文件

  1. 访问 Tesseract 语言数据仓库
  2. 下载需要的语言文件:

  3. 在项目目录下创建 tessdata 文件夹,将下载的文件放入

第三步:运行测试

using OCRTest;

// 最简单的使用方式
var engine = OCREngine.Instance;
var result = engine.RecognizeText("your_image.png");

Console.WriteLine($"识别结果:{result.Text}");
Console.WriteLine($"置信度:{result.Confidence}%");
Console.WriteLine($"耗时:{result.ElapsedMilliseconds}ms");

第四步:查看完整示例

运行项目中的 Program.cs,选择选项 1 测试各种识别功能。


📝 常见使用场景

场景1:识别英文文本(最快)

var config = new OCRConfig
{
    Language = "eng",
    EngineMode = EngineMode.LstmOnly,  // 最快模式
    EnablePreprocessing = true
};

var engine = OCREngine.GetInstance(config);
var result = engine.RecognizeText("image.png");

场景2:识别中文文本

var engine = OCREngine.GetInstance("chi_sim");  // 简体中文
var result = engine.RecognizeText("chinese_image.png");

场景3:识别产品序列号(仅字母数字)

var config = new OCRConfig
{
    Language = "eng",
    Whitelist = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-",
    EnablePreprocessing = true
};

var engine = OCREngine.GetInstance(config);
var result = engine.RecognizeText("serial_number.png");

场景4:批量识别

string[] images = Directory.GetFiles("images", "*.png");
var engine = OCREngine.Instance;

foreach (var image in images)
{
    var result = engine.RecognizeText(image);
    Console.WriteLine($"{Path.GetFileName(image)}: {result.Text}");
}

场景5:从摄像头/截图识别

// 假设你已经有了 Bitmap 对象
using (var bitmap = GetScreenshot())  // 你的截图方法
{
    var engine = OCREngine.Instance;
    var result = engine.RecognizeFromBitmap(bitmap);
    Console.WriteLine(result.Text);
}

🔧 配置说明

OCRConfig 主要参数

参数 说明 推荐值
Language 识别语言 "eng", "chi_sim", "chi_sim+eng"
EngineMode 引擎模式 LstmOnly(快), Default(平衡)
Whitelist 字符白名单 根据实际需求设置
EnablePreprocessing 图像预处理 true(推荐)
PageSegMode 页面分割模式 Auto(默认)

EngineMode 选择

  • LstmOnly: 最快,准确率良好(推荐)
  • Default: 速度和准确率平衡
  • TesseractOnly: 最慢,某些特殊场景可能更好

PageSegMode 选择

  • Auto: 自动检测(默认)
  • SingleLine: 单行文本
  • SingleWord: 单个单词
  • SingleChar: 单个字符

⚡ 性能优化技巧

1. 启用 LSTM 模式(提升 30-50% 速度)

EngineMode = EngineMode.LstmOnly

2. 设置字符白名单(提升 40-60% 速度 + 准确率)

Whitelist = "0123456789"  // 仅数字

3. 复用引擎实例(提升 80-90% 性能)

// ✅ 好:复用实例
var engine = OCREngine.Instance;
for (int i = 0; i < 100; i++)
{
    engine.RecognizeText($"image{i}.png");
}

// ❌ 差:频繁创建
for (int i = 0; i < 100; i++)
{
    using (var engine = new TesseractEngine(...))
    {
        // ...
    }
}

4. 合适的图片分辨率

  • 推荐:300 DPI
  • 最低:200 DPI
  • 过高:会降低速度,不提升准确率

5. 裁剪无关区域

// 使用 OpenCvSharp 裁剪感兴趣区域
using (var src = Cv2.ImRead("image.png"))
{
    var roi = new Rect(100, 100, 200, 50);  // x, y, width, height
    using (var cropped = new Mat(src, roi))
    {
        var result = engine.RecognizeFromBitmap(cropped.ToBitmap());
    }
}

🎓 训练自己的模型

什么时候需要训练?

  • ✅ 识别工业字体、特殊符号
  • ✅ 提高特定场景准确率
  • ✅ 减少误识别
  • ✅ 识别手写体、艺术字

快速训练流程

1. 准备数据

收集 100-500 张代表性图片,覆盖所有需要识别的字符。

2. 创建训练项目

OCRTrainingHelper.CreateSampleProject(@"D:\MyOCRProject");

3. 预处理图片

OCRTrainingHelper.PreprocessTrainingImages(
    @"D:\MyOCRProject\raw_images",
    @"D:\MyOCRProject\processed_images",
    targetWidth: 800
);

4. 标注文本

为每张图片创建对应的 .txt 文件,内容为识别文本。

5. 验证数据集

OCRTrainingHelper.ValidateDataset(@"D:\MyOCRProject\processed_images");

6. 生成训练脚本

OCRTrainingHelper.GenerateTrainingScript(
    "myfont",
    @"D:\MyOCRProject\train.bat"
);

7. 执行训练

双击运行 train.bat,等待训练完成。

8. 使用新模型

将生成的 myfont.traineddata 放入 tessdata 文件夹:

var engine = OCREngine.GetInstance("myfont");
var result = engine.RecognizeText("test.png");

详细训练指南请查看 README.md


❓ 常见问题

Q: 识别结果为空或错误?

检查清单:

  1. tessdata 文件夹是否存在且包含语言文件
  2. 图片路径是否正确
  3. 图片格式是否支持(PNG, JPG, BMP, TIFF)
  4. 图片是否清晰(至少 200 DPI)

Q: 如何提高中文识别准确率?

  1. 使用 chi_simchi_sim+eng 语言
  2. 启用图像预处理
  3. 确保图片清晰度高
  4. 考虑训练专用模型

Q: 识别速度太慢?

  1. 使用 EngineMode.LstmOnly
  2. 设置字符白名单
  3. 降低图片分辨率(不低于 200 DPI)
  4. 裁剪无关区域
  5. 复用引擎实例

Q: 内存占用高?

定期清理:

OCREngine.Cleanup();

📚 更多资源


🚀 下一步

  1. ✅ 完成快速开始
  2. 📖 阅读完整文档了解高级功能
  3. 🎯 根据实际需求调整配置
  4. 🎓 如需更高准确率,训练专用模型
  5. 💬 遇到问题查看常见问题或提交 Issue

祝你使用愉快! 🎉