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

如何从 C# 中的流中读取用于 OCR 的信息。

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

IronOCR 通过将流传递给 OcrInputOcrImageInput 构造函数,在 C# 中直接从流中读取图像数据,无需将文件保存到磁盘即可实现高效的 OCR 处理。

流是可读可写的二进制信息的连续流。 在编程中,流通过将数据分成易于管理的块来有效地处理对于内存来说过大的数据。

IronOCR 的导入方法直接接受图像数据流。 将流数据传入导入方法,该方法会自动处理所有必要的步骤。 对于高级场景,请探索 OcrInput,该类为准备各种输入格式提供了广泛的选项。

快速入门:几秒钟内使用流进行 OCR 输入

本示例通过将 System.IO.Stream 输入 IronOCR 来演示即时 OCR,跳过文件路径并以最少的代码检索识别出的文本。

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

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

    PM > Install-Package IronOcr

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

    using var input = new IronOcr.OcrInput(stream);
    var result = new IronOcr.IronTesseract().Read(input);
  3. 部署到您的生产环境中进行测试

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


如何使用 IronOCR 读取流? <!-- 说明:显示逐步过程的截图 --> 首先,实例化 **`IronTesseract`** 类以执行 OCR。 使用 `AnyBitmap` 的 `FromFile` 方法导入图像文件。此 `AnyBitmap` 对象将图像数据转换为流。 接下来,使用 `using` 语句通过 `GetStream` 方法传递图像流来创建 `OcrImageInput` 对象。 最后,使用`Read`方法执行 OCR。 ```csharp :path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-streams.cs ``` 基于流的 OCR 有利于网络应用程序接收上传的图像、处理数据库中的图像或处理不应写入磁盘的临时数据。 流方法可与 [`System.Drawing` 对象](https://ironsoftware.com/csharp/ocr/how-to/input-system-drawing/)和其他图像处理库无缝集成。

为什么使用流进行 OCR? 对于 .NET 开发人员来说,使用流工作有几个优势: 1.**内存效率**:分块处理数据,而不是将整个文件加载到内存中 2.**安全性**:处理敏感文档时不会在磁盘上创建临时文件 3.**性能**:消除文件系统操作的 I/O 开销 4.**灵活性**:可处理网络上传、数据库 BLOB 和内存转换 对于处理多页文档或处理 [PDF 流](https://ironsoftware.com/csharp/ocr/examples/ocr-for-pdf-stream/),IronOCR 保持了相同的简单 API,同时提供了强大的性能。 在处理扫描文档时,您还可以利用 IronOCR 的功能,通过流处理[高效读取扫描文档](https://ironsoftware.com/csharp/ocr/how-to/read-scanned-document/)。

如何为流 OCR 指定扫描区域? <!--![屏幕截图演示如何为流式 OCR 指定扫描区域? in IronPDF](/static-assets/images/TODO/how-can-i-specify-a-scan-region-for-stream-ocr-step_screenshot.webp) --> <!-- 说明:显示逐步过程的截图 --> 要提高大型图像的性能并从特定区域获取特定读数,请使用 `CropRectangle` 类。 `OcrImageInput` 构造函数接受一个 `CropRectangle` 对象作为第二个参数,允许您指定应读取图像文档的哪个区域。 下面的代码示例规定只读章节号和标题区域。 ```csharp :path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-specific-region.cs ``` 当您需要[OCR图像的特定区域](https://ironsoftware.com/csharp/ocr/how-to/ocr-region-of-an-image/)或处理文本出现在可预测位置的结构化文档时,这种技术尤其有用。 对于涉及表格或结构化数据的更复杂场景,请探讨如何[读取文档中的表格](https://ironsoftware.com/csharp/ocr/how-to/read-table-in-document/)。

扫描区域在输出中是什么样子的?
OCR 演示:照片查看器中的文档,调试控制台中显示提取的文本'Chapter Eight The Deathday Party'

我可以使用哪些高级流处理技术? 在处理数据流时,利用 IronOCR 的其他功能来提高识别准确性。 [图像优化过滤器](https://ironsoftware.com/csharp/ocr/examples/ocr-image-filters-for-net-tesseract/)可在 OCR 处理之前直接应用于流数据: ```csharp using IronOcr; using IronSoftware.Drawing; using System.IO; // Process stream with filters public string ProcessStreamWithFilters(Stream imageStream) { IronTesseract ocrTesseract = new IronTesseract(); // Configure for better accuracy ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\\"; ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd; using var input = new OcrImageInput(imageStream); // Apply preprocessing filters input.Deskew(); input.DeNoise(); input.Sharpen(); var result = ocrTesseract.Read(input); return result.Text; } ``` 要增强图像处理能力,请考虑使用 [Filter Wizard](https://ironsoftware.com/csharp/ocr/how-to/filter-wizard/) 自动确定特定文档类型的最佳预处理步骤。此外,在处理数据流中旋转或倾斜的图像时,[修复图像方向](https://ironsoftware.com/csharp/ocr/how-to/image-orientation-correction/)功能可显著提高 OCR 的准确性。

如何使用不同的数据流源? IronOCR 可无缝处理各种流源。 无论是处理网络表单中的上传、检索数据库中的图像,还是在格式之间进行转换,API 都必须保持一致: ```csharp // From MemoryStream byte[] imageBytes = GetImageBytesFromDatabase(); using var memoryStream = new MemoryStream(imageBytes); using var input = new OcrImageInput(memoryStream); // From FileStream using var fileStream = new FileStream("document.png", FileMode.Open); using var input2 = new OcrImageInput(fileStream); // From network stream using var webClient = new WebClient(); using var networkStream = webClient.OpenRead("https://example.com/image.jpg"); using var input3 = new OcrImageInput(networkStream); ``` 为获得最佳效果,请考虑在处理低分辨率流时调整 [DPI 设置](https://ironsoftware.com/csharp/ocr/how-to/dpi-setting/)。 IronOCR 可自动处理 DPI 检测,但手动配置可以提高特定用例的准确性。 在处理多页文档时,探索通过流处理来处理 [ 多页 TIFF 和 GIF 文件](https://ironsoftware.com/csharp/ocr/how-to/input-tiff-gif/)。

如何处理来自数据流的 OCR 结果? 在处理您的数据流后,IronOCR 会提供丰富的结果对象,而不仅仅是简单的文本提取。 [`OcrResult` 类](https://ironsoftware.com/csharp/ocr/examples/results-objects/)包含识别文本的详细信息,包括置信度分数、定位和结构: ```csharp // Process stream and analyze results using var input = new OcrImageInput(stream); var result = new IronTesseract().Read(input); // Access detailed results foreach (var page in result.Pages) { Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%"); foreach (var paragraph in page.Paragraphs) { Console.WriteLine($"Paragraph: {paragraph.Text}"); Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}"); } } // Export results string text = result.Text; string searchablePdf = result.SaveAsSearchablePdf("output.pdf"); string hocrHtml = result.SaveAsHocrHtml("output.html"); ``` 结果对象还提供了[导出为可搜索 PDF 文件](https://ironsoftware.com/csharp/ocr/how-to/searchable-pdf/)或[hOCR HTML 格式](https://ironsoftware.com/csharp/ocr/how-to/html-hocr-export/)的方法,从而可以轻松地从您的流输入创建可搜索文档档案。 出于调试目的,您可以使用[高亮文本功能](https://ironsoftware.com/csharp/ocr/how-to/highlight-texts-as-images/)来直观查看 IronOCR 在图像中检测到的内容。

我应该了解哪些性能注意事项? 在处理多个数据流或实施高吞吐量 OCR 解决方案时,请考虑这些优化策略: 1.**重复使用 `IronTesseract` 实例**:创建单个实例并在多个操作中重复使用该实例 2.**实施进度跟踪**:对于大型数据流,使用[进度跟踪](https://ironsoftware.com/csharp/ocr/how-to/progress-tracking/)来监控处理状态 3.**并行处理**:<代码>IronOCR支持多个流的并发处理 4.**优化图像质量**:预处理数据流,确保最佳分辨率和清晰度 为获得最高性能,请探索[快速 OCR 配置](https://ironsoftware.com/csharp/ocr/examples/tune-tesseract-for-speed-in-dotnet/)选项,并考虑为批量操作实施[多线程处理](https://ironsoftware.com/csharp/ocr/how-to/async/)。 在使用对时间敏感的应用程序时,了解[超时](https://ironsoftware.com/csharp/ocr/examples/timeouts/)可帮助您有效管理长时间运行的 OCR 操作。

如何排除常见的流问题? 在使用流媒体时,您可能会遇到一些特殊的挑战。 以下是常见情况的解决方案: - **流位置**:在传递给 `IronOCR` 之前,始终将流位置重置为 `0` - **处理**:使用 `using` 语句确保正确的资源清理 - **格式支持**:IronOCR 通过流支持[各种图像格式](https://ironsoftware.com/csharp/ocr/how-to/input-images/),包括 JPEG、PNG、TIFF 和 BMP - **内存管理**:对于大数据流,请考虑分块处理或流式方法 对于复杂的文档或当标准 OCR 无法提供令人满意的结果时,[计算机视觉功能](https://ironsoftware.com/csharp/ocr/how-to/computer-vision/)可以帮助更准确地定位和提取文本。 此外,在处理低质量数据流时,请参考[修复低质量扫描](https://ironsoftware.com/csharp/ocr/examples/ocr-low-quality-scans-tesseract/)指南,了解可显著提高识别率的预处理技术。 有关使用流和其他输入方法的更多详细信息,请浏览我们全面的[操作指南](https://ironsoftware.com/csharp/ocr/how-to/input-streams/)和[代码示例](https://ironsoftware.com/csharp/ocr/examples/ocr-for-pdf-stream/)。

常见问题解答

如何在不先保存到磁盘的情况下对图像数据执行 OCR?

IronOCR 允许您通过将图像流传递给 OcrInput 或 OcrImageInput 构造函数来直接处理图像流。这样就能在不创建临时文件的情况下进行高效的 OCR 处理,非常适合处理网络上传、数据库 BLOB 或不应接触磁盘的敏感文档。

哪些类型的数据流可用作 OCR 处理的输入?

IronOCR 接受任何包含图像数据的 System.IO.Stream 流。这包括来自网络上传的内存流、来自数据库 BLOB 字段的流或来自图像处理库的流。当你将数据流传递给 OcrInput 或 OcrImageInput 时,该库会自动处理所有必要的转换步骤。

在 C# 中对数据流执行 OCR 的最简单方法是什么?

最快捷的方法是用您的数据流创建一个 OcrInput 对象,然后调用读取方法:"using var input = new IronOcr.OcrInput(stream); var result = new IronOcr.IronTesseract().Read(input); "。这段简短的代码将执行 OCR 并立即返回识别的文本。

为什么 OCR 要使用流而不是文件路径?

IronOCR 基于流的 OCR 具有以下几个优点:以块为单位处理数据,提高了内存效率;避免了磁盘上的临时文件,增强了安全性;消除了文件 I/O 开销,提高了性能;在处理网络上传或数据库 BLOB 时具有更大的灵活性。

能否指定要读取的图像流的特定区域?

是的,IronOCR 允许您在处理数据流时通过指定裁剪区域来定义阅读区域。此功能可让您将 OCR 专注于图像的特定部分,而无需处理整个文档,从而提高速度和准确性。

流处理如何与其他图像处理库集成?

IronOCR 的流方法可与 System.Drawing 对象和其他 .NET 图像处理库无缝集成。您可以使用 AnyBitmap 类,使用 GetStream 方法将图像转换为流,从而轻松地将 OCR 与其他图像处理工作流结合起来。

Chaknith Bin
软件工程师
Chaknith 在 IronXL 和 IronBarcode 工作。他在 C# 和 .NET 方面有着深厚的专业知识,帮助改进软件并支持客户。他从用户互动中获得的见解有助于更好的产品、文档和整体体验。
审核者
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,246,844 | 版本: 2025.12 刚刚发布