# OCR 识别 - 快速开始指南 ## 🎯 5分钟快速上手 ### 第一步:安装 NuGet 包 在 Visual Studio 中打开包管理器控制台,运行: ```powershell 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 语言数据仓库](https://github.com/tesseract-ocr/tessdata) 2. 下载需要的语言文件: - [eng.traineddata](https://github.com/tesseract-ocr/tessdata/raw/main/eng.traineddata) - 英文 - [chi_sim.traineddata](https://github.com/tesseract-ocr/tessdata/raw/main/chi_sim.traineddata) - 简体中文 3. 在项目目录下创建 `tessdata` 文件夹,将下载的文件放入 ### 第三步:运行测试 ```csharp 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:识别英文文本(最快) ```csharp var config = new OCRConfig { Language = "eng", EngineMode = EngineMode.LstmOnly, // 最快模式 EnablePreprocessing = true }; var engine = OCREngine.GetInstance(config); var result = engine.RecognizeText("image.png"); ``` ### 场景2:识别中文文本 ```csharp var engine = OCREngine.GetInstance("chi_sim"); // 简体中文 var result = engine.RecognizeText("chinese_image.png"); ``` ### 场景3:识别产品序列号(仅字母数字) ```csharp var config = new OCRConfig { Language = "eng", Whitelist = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-", EnablePreprocessing = true }; var engine = OCREngine.GetInstance(config); var result = engine.RecognizeText("serial_number.png"); ``` ### 场景4:批量识别 ```csharp 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:从摄像头/截图识别 ```csharp // 假设你已经有了 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% 速度) ```csharp EngineMode = EngineMode.LstmOnly ``` ### 2. 设置字符白名单(提升 40-60% 速度 + 准确率) ```csharp Whitelist = "0123456789" // 仅数字 ``` ### 3. 复用引擎实例(提升 80-90% 性能) ```csharp // ✅ 好:复用实例 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. 裁剪无关区域 ```csharp // 使用 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. 创建训练项目 ```csharp OCRTrainingHelper.CreateSampleProject(@"D:\MyOCRProject"); ``` #### 3. 预处理图片 ```csharp OCRTrainingHelper.PreprocessTrainingImages( @"D:\MyOCRProject\raw_images", @"D:\MyOCRProject\processed_images", targetWidth: 800 ); ``` #### 4. 标注文本 为每张图片创建对应的 `.txt` 文件,内容为识别文本。 #### 5. 验证数据集 ```csharp OCRTrainingHelper.ValidateDataset(@"D:\MyOCRProject\processed_images"); ``` #### 6. 生成训练脚本 ```csharp OCRTrainingHelper.GenerateTrainingScript( "myfont", @"D:\MyOCRProject\train.bat" ); ``` #### 7. 执行训练 双击运行 `train.bat`,等待训练完成。 #### 8. 使用新模型 将生成的 `myfont.traineddata` 放入 `tessdata` 文件夹: ```csharp var engine = OCREngine.GetInstance("myfont"); var result = engine.RecognizeText("test.png"); ``` 详细训练指南请查看 [README.md](README.md) --- ## ❓ 常见问题 ### Q: 识别结果为空或错误? **检查清单:** 1. tessdata 文件夹是否存在且包含语言文件 2. 图片路径是否正确 3. 图片格式是否支持(PNG, JPG, BMP, TIFF) 4. 图片是否清晰(至少 200 DPI) ### Q: 如何提高中文识别准确率? 1. 使用 `chi_sim` 或 `chi_sim+eng` 语言 2. 启用图像预处理 3. 确保图片清晰度高 4. 考虑训练专用模型 ### Q: 识别速度太慢? 1. 使用 `EngineMode.LstmOnly` 2. 设置字符白名单 3. 降低图片分辨率(不低于 200 DPI) 4. 裁剪无关区域 5. 复用引擎实例 ### Q: 内存占用高? 定期清理: ```csharp OCREngine.Cleanup(); ``` --- ## 📚 更多资源 - [完整使用文档](README.md) - [Tesseract 官方文档](https://tesseract-ocr.github.io/) - [语言数据下载](https://github.com/tesseract-ocr/tessdata) - [训练工具下载](https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/) --- ## 🚀 下一步 1. ✅ 完成快速开始 2. 📖 阅读完整文档了解高级功能 3. 🎯 根据实际需求调整配置 4. 🎓 如需更高准确率,训练专用模型 5. 💬 遇到问题查看常见问题或提交 Issue **祝你使用愉快!** 🎉