当前位置:首页 > 行业动态 > 正文

如何用C代码快速识别图片中的文字?

C#可通过Tesseract或Azure Cognitive Services等库实现图片文字识别,代码需引入OCR库,读取图像文件,预处理后调用API提取文本,适用于文档扫描、自动化数据录入等场景,需注意图像清晰度及依赖库配置。

在C#中实现图片文字识别(OCR)功能,可以通过集成开源库Tesseract完成,以下为详细实现步骤及代码示例,适用于Windows、Linux和跨平台环境。

如何用C代码快速识别图片中的文字?  第1张


环境准备

安装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);
}

性能优化建议

  1. 图片预处理

    • 转换为灰度图降低干扰
    • 调整对比度/亮度
    • 使用二值化处理(黑白化)
  2. 配置参数调整

    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));
    }

安全注意事项

  1. 验证用户上传的图片格式及大小
  2. 进行结果过滤
  3. 使用using语句确保资源释放

引用说明

  • Tesseract OCR引擎:Apache 2.0许可开源项目
  • .NET封装库:Tesseract.NET SDK
  • 微软图像处理库:System.Drawing.Common
0