如何在 C# 中使用输入图像进行 OCR 处理

如何使用 IronOCR 在 C# 中读取图像。

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCR 使用光学字符识别技术从 JPG, PNG, GIF, TIFFBMP 格式的图像中提取文本。 安装 NuGet 软件包后,只需一行代码即可完成基本的文本提取。

OCR(光学字符识别)技术可识别和提取图像中的文本。 它通过从扫描页面、照片或其他图像文件中提取文本内容,将印刷文件数字化。 IronOCR 使用Tesseract 5的先进机器学习算法,并结合专有的图像预处理技术,实现了业界领先的准确度。

该库支持 jpg, png, gif, tiffbmp 格式。 图像过滤器通过自动纠正常见的质量问题来提高阅读能力。 IronOCR 将Tesseract 5与先进的预处理技术相结合,可对不同图像质量和格式(从高分辨率扫描到压缩的 Web 图像)提供准确的结果。

快速入门:使用 IronOCR 读取图像文件

用一行代码从图像中提取文本。 此示例使用 IronTesseract 上的 Read 方法加载图像并读取其文本。 该库可自动处理图像预处理和文本提取。

Nuget Icon立即开始使用 NuGet 创建 PDF 文件:

  1. 使用 NuGet 包管理器安装 IronOCR

    PM > Install-Package IronOcr

  2. 复制并运行这段代码。

    var result = new IronTesseract().Read(new OcrImageInput("Potter.png"));
  3. 部署到您的生产环境中进行测试

    立即开始在您的项目中使用 IronOCR,免费试用!
    arrow pointer


如何使用 IronOCR 阅读图像? 首先实例化 `IronTesseract` 类。 使用 "using "语句创建一个包含图像文件路径的 `OcrImageInput` 对象。 这样才能确保资源的妥善处理。 IronOCR 支持 jpg、png、gif、tiff 和 bmp 格式。 使用 `Read` 方法执行 OCR。 该库可自动检测图像格式并进行适当的预处理。 对于新用户,请参阅[Windows 安装指南](/csharp/ocr/get-started/windows/)或探索[NuGet 软件包选项](/csharp/ocr/get-started/Advanced-installation-nuget/)。 有关跨平台开发,请查看 [Linux 安装](/csharp/ocr/get-started/linux/) 或 [macOS 安装](/csharp/ocr/get-started/mac/)。 [{i:( 从 2025.6 版开始: - 现在加载 TIFF 图像的性能稳定提升。 - 阅读 TIFF 图像时,性能的提高取决于机器的 GPU。 一些用户可能会体验到两倍的速度,而另一些用户可能会看到与以前版本类似的性能 @@--bracket-close--@@@ ```csharp /* :path=/static-assets/ocr/content-code-examples/how-to/input-images-read.cs */ using IronOcr; // Instantiate IronTesseract IronTesseract ocrTesseract = new IronTesseract(); // Add image using var imageInput = new OcrImageInput("Potter.png"); // Perform OCR OcrResult ocrResult = ocrTesseract.Read(imageInput); // Display the extracted text Console.WriteLine(ocrResult.Text); // Get confidence level double confidence = ocrResult.Confidence; Console.WriteLine($"Confidence: {confidence}%"); ```
IronOCR 文本提取演示:在代码编辑器中将哈利-波特页面图片转换为纯文本
请访问[如何读取多帧/页 GIF 和 TIFF](/csharp/ocr/how-to/input-tiff-gif/) 以读取 TIFF 和 GIF 图像。 对于多页面,请参阅 [多页面 TIFF 处理示例](/csharp/ocr/examples/csharp-tesseract-multipage-tiff/)。

置信度为何重要? 置信度表示 IronOCR 对提取文本准确性的把握。 85% 以上的数值通常表示结果可靠。 分数较低的译文可能需要进行图像预处理或人工审核。 使用置信度分数自动标记文档以供人工验证,或触发额外的[图像优化过滤器](/csharp/ocr/features/filters/)。

何时应使用不同的图像格式? 由于采用无损压缩,PNG 和 TIFF 格式可提供最佳 OCR 效果。 单页文件使用 PNG,多页扫描文件使用 TIFF。 JPEG 可以很好地处理照片,但可能会产生压缩伪影。 BMP 可提供未压缩的质量,但文件大小较大。 GIF 适合色彩有限的简单图形。 了解有关[特定格式优化](/csharp/ocr/features/compatibility/)的更多信息。

常见的图像阅读错误有哪些? 常见错误包括图像分辨率低(低于 200 DPI)、文本歪斜、对比度差或不支持的语言。 IronOCR 可自动纠正许多问题,但严重问题可能需要人工预处理。 有关解决方案,请参见我们的 [ 故障排除指南](/csharp/ocr/troubleshooting/general-troubleshooting-ocr/)。

如何以字节形式导入图像? <!--![屏幕截图演示如何以字节形式导入图像? in IronPdf](/static-assets/images/TODO/how-can-i-import-images-as-bytes-step_screenshot.webp) --> <!-- 说明:显示逐步过程的截图 --> `OcrImageInput` 类接受文件路径、字节、`AnyBitmap`、流或图像对象形式的图像。 `AnyBitmap` 是来自 [IronSoftware.Drawing.AnyBitmap](/open-source/csharp/drawing/examples/bitmap-to-stream/)的位图对象。 这种灵活性可实现与数据库、网络 API 和云存储等各种数据源的无缝集成。 这种灵活性有助于处理数据库、网络服务或内存流中的图像。 有关高级流处理,请参阅 [使用输入流的OCR](/csharp/ocr/how-to/input-streams/)。 [System.Drawing集成指南](/csharp/ocr/how-to/input-system-drawing/)提供了更多示例,以实现传统代码的兼容性。 ```csharp :path=/static-assets/ocr/content-code-examples/how-to/input-images-import-byte.cs ```

什么情况下应使用字节数组而不是文件路径? 当图片来自数据库、网络服务或加密来源时,字节数组的效果最佳。 它们提供了更好的安全性,因为文件不需要临时磁盘存储。 在云应用程序、微服务或处理敏感文档时使用字节数组。 文件路径对于本地批量处理大型图像集仍然更有效率。 ```csharp using IronOcr; using IronSoftware.Drawing; using System.IO; // Method 1: From URL var imageFromUrl = AnyBitmap.FromUri("https://example.com/document.jpg"); using var urlInput = new OcrImageInput(imageFromUrl); // Method 2: From Stream using var fileStream = File.OpenRead("document.png"); using var streamInput = new OcrImageInput(fileStream); // Method 3: From System.Drawing (with IronSoftware.Drawing) var bitmap = AnyBitmap.FromFile("scan.bmp"); using var bitmapInput = new OcrImageInput(bitmap); // Process any of these inputs IronTesseract ocr = new IronTesseract(); OcrResult result = ocr.Read(bitmapInput); ```

为什么内存管理对图像字节很重要? 大图像会消耗大量内存,尤其是在同时处理多个文档时。 使用 "using "语句可确保适当的资源处理。 对于批处理,可考虑实施一个队列系统,限制并发操作。 [多线程指南](/csharp/ocr/how-to/async/)展示了高效的内存管理技术。

不同输入类型对性能有何影响? 文件路径可为本地文件提供最快的性能,因为 IronOCR 可直接读取数据。 字节阵列需要将整个图像加载到内存中,但具有灵活性。 流通过增量读取数据来平衡内存使用和性能。 要获得大批量运行时的最佳性能,请参阅我们的[性能调优指南](/csharp/ocr/examples/tune-tesseract-for-speed-in-dotnet/)。

如何指定扫描区域? 在实例化 `OcrImageInput` 时传递 `CropRectangle` 以指定要处理的图像区域。 限制扫描区域可显著提高性能。 下面的示例只翻译了章节号和标题。 在针对特定文档区域进行翻译时,这项技术最多可将处理时间缩短 90%。 对于复杂布局或多个区域,请参阅 [图像的OCR 区域](/csharp/ocr/how-to/ocr-region-of-an-image/)。 [ 内容区域指南](/csharp/ocr/troubleshooting/crop-regions-rectangles/)解释了高级区域选择技术。 ```csharp :path=/static-assets/ocr/content-code-examples/how-to/input-images-read-specific-region.cs ```

为什么指定区域可以提高性能? 只处理相关图像区域可减少 60-90% 的计算开销。 OCR 引擎会分析输入区域的每个像素,因此区域越小,处理速度越快。 这种方法还可以消除目标文本区域之外的页眉、页脚或装饰元素的潜在干扰,从而提高准确性。
OCR 扫描区域演示,源图像和调试输出中的红色矩形突出显示第八章标题

何时应使用多个扫描区域? 对于具有不同文本区域的文档,如表单、发票或多栏布局,可使用多个区域。 对每个区域进行单独处理,以保持合理的文本流。 这种方法适用于 [ 提取表格数据](/csharp/ocr/how-to/read-table-in-document/)或从结构化文档中读取特定字段。

坐标系有哪些约定? IronOCR 使用标准像素坐标,原点(0,0)位于左上角。 X 向右增加,Y 向下增加。 矩形参数为(X、Y、宽度、高度)。 要精确选择区域,可使用图像编辑工具来识别像素坐标,或在应用程序中实施可视化区域选择器。

如何应用高级图像处理? IronOCR 提供全面的图像预处理功能,以提高 OCR 的准确性。 在处理低质量图像、扫描文件或具有挑战性的条件时应用过滤器。 [滤镜向导](/csharp/ocr/how-to/filter-wizard/)可帮助确定特定图像的最佳滤镜组合。 ```csharp using IronOcr; IronTesseract ocr = new IronTesseract(); using var input = new OcrImageInput("low-quality-scan.jpg"); // Apply image enhancement filters input.Deskew(); // Correct image rotation input.DeNoise(); // Remove background noise input.Binarize(); // Convert to black and white input.EnhanceResolution(300); // Adjust DPI for better accuracy // Configure for better accuracy ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; ocr.Configuration.Language = OcrLanguage.English; OcrResult result = ocr.Read(input); ``` 了解[图像优化过滤器](/csharp/ocr/examples/ocr-image-filters-for-net-tesseract/)和[修复低质量扫描](/csharp/ocr/examples/ocr-low-quality-scans-tesseract/)。 有关色彩校正需求,请参阅[图像色彩校正指南](/csharp/ocr/how-to/image-color-correction/)。

何时应用图像预处理过滤器? 在处理扫描文件、文本照片或存在质量问题的图像时,应用过滤器。 常见的情况包括修复倾斜的页面、去除复印件中的背景噪音或增强褪色文本。 [DPI设置指南](/csharp/ocr/how-to/dpi-setting/)有助于优化分辨率相关问题。

为什么过滤器顺序很重要? 筛选序列对结果有很大影响。 首先应用旋转校正(`Deskew`),然后去除噪点,最后增强对比度。 二值化通常应放在最后。不正确的排序会放大问题,例如,先锐化再去噪会增加噪点的可见度。 测试不同的序列,以获得最佳效果。

常见的预处理错误有哪些? 过度处理是最常见的错误。 过度锐化会产生伪影,激进的去噪会去除文本细节,而不恰当的二值化阈值则会丢失信息。 从最少的预处理开始,只在需要时添加过滤器。 [图像质量校正指南](/csharp/ocr/how-to/image-quality-correction/)提供了详细的最佳实践。

如何优化性能? 在处理多张图片或大批量图片时,请考虑这些优化措施: 1.**重复使用 `IronTesseract` 实例**:为多个操作创建一个实例 2.**指定扫描区域**:将 OCR 限制在相关图像区域,以获得 60-90% 的收益 3.**使用适当的图像格式**:PNG 和 TIFF 比 JPEG 效果更好 4.**有选择地应用预处理**:仅在必要时使用过滤器 5.**实施并行处理**:利用多核 CPU 进行批处理操作 有关高性能应用场景,请参阅[多线程指南](/csharp/ocr/examples/csharp-tesseract-multithreading-for-speed/)和[快速 OCR 配置](/csharp/ocr/examples/tune-tesseract-for-speed-in-dotnet/)。 [进度跟踪功能](/csharp/ocr/how-to/progress-tracking/)有助于监控长期运行的操作。

为什么实例重用可以提高性能? `IronTesseract`初始化加载语言数据并配置 OCR 引擎,耗时 200-500ms。 重复使用实例可以消除后续操作的开销。 为网络应用程序创建单例实例,或为批处理创建共享实例,以最大限度地提高效率。

何时应使用并行处理? 并行处理有利于使用多个独立图像的场景。 同时处理不同的页面或文档,但避免对同一图像进行并行操作。 现代 CPU 可有效处理 4-8 次并发 OCR 操作。 监控内存使用情况,因为每次操作需要 100-500MB 的内存,具体取决于图像大小。

内存使用注意事项有哪些? OCR 操作在 RAM 中通常需要 10-20 倍的图像文件大小。 一张 5MB 的图片在处理过程中可能会占用 50-100MB 的空间。 对于大批量生产,采用生产者-消费者模式,限制并发操作。 [abort 标记示例](/csharp/ocr/examples/abort-token/)演示了取消内存密集型操作。

下一步是什么? 使用这些资源从更复杂的场景中提取文本: - [ 从 PDF 中读取文本](/csharp/ocr/how-to/input-pdfs/) - 使用 OCR 处理 PDF 文档 - [ 从屏幕截图中提取数据](/csharp/ocr/examples/read-screenshot/) - 捕捉和读取屏幕内容 - [ 处理扫描文档](/csharp/ocr/examples/read-scanned-document/) - 处理多页扫描文件 - [使用 System.Drawing 对象](/csharp/ocr/how-to/input-system-drawing/) - 与现有 .NET 图像代码集成 - [ 阅读多种语言](/csharp/ocr/how-to/ocr-multiple-languages/) - 提取 125 种以上语言的文本 - [处理特定文档类型](/csharp/ocr/tutorials/read-specific-document/) - 优化护照、发票等文档类型

常见问题解答

哪些图像格式可以读取 C# 中的文本提取?

IronOCR 支持从 JPG、PNG、GIF、TIFF 和 BMP 图像格式中读取文本。该库可自动检测图像格式,并应用适当的预处理以获得最佳文本提取效果。

如何用一行代码从图像文件中提取文本?

您可以使用 IronOCR 一行提取文本:`var result = new IronTesseract().Read(new OcrImageInput("image.png"));`.这将使用 Tesseract 5 OCR 技术自动处理图像预处理和文本提取。

什么 OCR 技术用于读取图像?

IronOCR 将 Tesseract 5 先进的机器学习算法与专有的图像预处理技术相结合。从高分辨率扫描图像到压缩网络图像,IronOCR 在不同质量和格式的图像上都能提供业界领先的准确性。

阅读图片时如何正确处理资源?

在创建 OcrImageInput 对象时使用 "using "语句,以确保适当的资源处置。该模式会自动管理内存和文件句柄:`using var ocrInput = new OcrImageInput("image.jpg");`

我能否读取图像的特定区域而不是整个文件?

是的,IronOCR 允许您指定裁剪区域,以定义图像中的特定阅读区域。该功能有助于将 OCR 处理集中在图像的相关部分,从而提高性能和准确性。

自动对图像进行了哪些预处理?

IronOCR 可自动应用图像过滤器,通过纠正常见的质量问题来增强阅读能力。该库可处理格式检测和预处理,基本用例无需手动配置。

TIFF 图像处理的性能是否有提高?

从 IronOCR 2025.6 版开始,加载 TIFF 图像的性能持续提高。读取 TIFF 图像的性能提高取决于机器的 GPU,有些用户的读取速度是以前版本的两倍。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

审核者
Jeff Fritz
Jeffrey T. Fritz
首席项目经理 - .NET 社区团队
Jeff 也是 .NET 和 Visual Studio 团队的首席项目经理。他是 .NET Conf 虚拟会议系列的执行制片人,并主持“Fritz and Friends”直播节目,每周两次与观众一起谈论技术并编写代码。Jeff 撰写研讨会、演示文稿并计划包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP 峰会在内的最大型微软开发者活动的内容。
准备开始了吗?
Nuget 下载 5,299,091 | 版本: 2025.12 刚刚发布