上一篇
如何用C代码快速识别图片中的文字?
- 行业动态
- 2025-05-12
- 5
C#可通过Tesseract或Azure Cognitive Services等库实现图片文字识别,代码需引入OCR库,读取图像文件,预处理后调用API提取文本,适用于文档扫描、自动化数据录入等场景,需注意图像清晰度及依赖库配置。
在C#中实现图片文字识别(OCR)功能,可以通过集成开源库Tesseract完成,以下为详细实现步骤及代码示例,适用于Windows、Linux和跨平台环境。
环境准备
安装NuGet包
Install-Package Tesseract Install-Package System.Drawing.Common # 支持跨平台图像处理
下载语言数据包
从Tesseract官方GitHub下载语言训练文件(如eng.traineddata
),保存到项目下的tessdata
文件夹。
核心代码实现
using System; using Tesseract; using System.Drawing; public class OCRProcessor { public static string RecognizeText(string imagePath, string language = "eng") { try { using (var engine = new TesseractEngine("./tessdata", language, EngineMode.Default)) using (var img = Pix.LoadFromFile(imagePath)) { using (var page = engine.Process(img)) { return page.GetText(); } } } catch (Exception ex) { return $"识别失败: {ex.Message}"; } } }
调用示例
// 示例:识别本地图片 var result = OCRProcessor.RecognizeText(@"D:test.png"); Console.WriteLine(result); // 示例:识别内存中的Bitmap图像 using (var bitmap = new Bitmap("test.jpg")) { var memoryStream = new System.IO.MemoryStream(); bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png); var pixImage = Pix.LoadFromMemory(memoryStream.ToArray()); var result = OCRProcessor.RecognizeText(pixImage); }
性能优化建议
图片预处理
- 转换为灰度图降低干扰
- 调整对比度/亮度
- 使用二值化处理(黑白化)
配置参数调整
engine.SetVariable("tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"); engine.SetVariable("tessedit_pageseg_mode", "7"); // 单行文本模式
常见问题处理
问题现象 | 解决方案 |
---|---|
空白输出 | 检查tessdata 目录路径是否正确 |
符号识别错误 | 调整char_whitelist 参数 |
多语言混合识别 | 使用语言1+语言2 格式(如chi_sim+eng ) |
进阶功能扩展
- 表格识别:结合OpenCV进行表格区域定位
- 手写体识别:使用专门的手写训练模型
- 异步处理:
Task.Run
实现后台识别public async Task<string> RecognizeAsync(string imagePath) { return await Task.Run(() => OCRProcessor.RecognizeText(imagePath)); }
安全注意事项
- 验证用户上传的图片格式及大小
- 进行结果过滤
- 使用
using
语句确保资源释放
引用说明
- Tesseract OCR引擎:Apache 2.0许可开源项目
- .NET封装库:Tesseract.NET SDK
- 微软图像处理库:System.Drawing.Common