IronOCR 操作指南 流 如何从 C# 中的流中读取用于 OCR 的信息。 Curtis Chau 已更新:2026年1月10日 下载 IronOCR NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 This article was translated from English: Does it need improvement? Translated View the article in English IronOCR 通过将流传递给 OcrInput 或 OcrImageInput 构造函数,在 C# 中直接从流中读取图像数据,无需将文件保存到磁盘即可实现高效的 OCR 处理。 流是可读可写的二进制信息的连续流。 在编程中,流通过将数据分成易于管理的块来有效地处理对于内存来说过大的数据。 IronOCR 的导入方法直接接受图像数据流。 将流数据传入导入方法,该方法会自动处理所有必要的步骤。 对于高级场景,请探索 OcrInput 类,该类为准备各种输入格式提供了广泛的选项。 快速入门:几秒钟内使用流进行 OCR 输入 本示例通过将 System.IO.Stream 输入 IronOCR 来演示即时 OCR,跳过文件路径并以最少的代码检索识别出的文本。 立即开始使用 NuGet 创建 PDF 文件: 使用 NuGet 包管理器安装 IronOCR PM > Install-Package IronOcr 复制并运行这段代码。 using var input = new IronOcr.OcrInput(stream); var result = new IronOcr.IronTesseract().Read(input); 部署到您的生产环境中进行测试 立即开始在您的项目中使用 IronOCR,免费试用! 免费试用30天 ### 最小工作流程(5 个步骤) 下载一个用于从流中读取数据的 C# 库。 获取和准备图像流数据 将图像流传递给 OcrImageInput 构造函数以导入图像 使用Read方法执行 OCR 通过指定裁剪区域定义读取区域 如何使用 IronOCR 读取流? <! -- 待办事项:在此处添加图片 --> <! -- --> <!-- 说明:显示逐步过程的截图 --> 首先,实例化 IronTesseract 类以执行 OCR。 使用 AnyBitmap 的 FromFile 方法导入图像文件。此 AnyBitmap 对象将图像数据转换为流。 接下来,使用 using 语句通过 GetStream 方法传递图像流来创建 OcrImageInput 对象。 最后,使用Read方法执行 OCR。 :path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-streams.cs using IronOcr; using IronSoftware.Drawing; // Instantiate IronTesseract IronTesseract ocrTesseract = new IronTesseract(); // Read image file to AnyBitmap AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff"); // Import image stream using var imageInput = new OcrImageInput(anyBitmap.GetStream()); // Perform OCR OcrResult ocrResult = ocrTesseract.Read(imageInput); Imports IronOcr Imports IronSoftware.Drawing ' Instantiate IronTesseract Private ocrTesseract As New IronTesseract() ' Read image file to AnyBitmap Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff") ' Import image stream Private imageInput = New OcrImageInput(anyBitmap.GetStream()) ' Perform OCR Private ocrResult As OcrResult = ocrTesseract.Read(imageInput) $vbLabelText $csharpLabel 基于流的 OCR 有利于网络应用程序接收上传的图像、处理数据库中的图像或处理不应写入磁盘的临时数据。 流方法可与 System.Drawing 对象和其他图像处理库无缝集成。 为什么使用流进行 OCR? 对于 .NET 开发人员来说,使用流工作有几个优势: 1.内存效率:分块处理数据,而不是将整个文件加载到内存中 2.安全性:处理敏感文档时不会在磁盘上创建临时文件 3.性能:消除文件系统操作的 I/O 开销 4.灵活性:可处理网络上传、数据库 BLOB 和内存转换 对于处理多页文档或处理 PDF 流,IronOCR 保持了相同的简单 API,同时提供了强大的性能。 在处理扫描文档时,您还可以利用 IronOCR 的功能,通过流处理高效读取扫描文档。 如何为流 OCR 指定扫描区域? <! -- 待办事项:在此处添加图片 --> <!--!屏幕截图演示如何为流式 OCR 指定扫描区域? 在 IronPDF 中 --> <!-- 说明:显示逐步过程的截图 --> 要提高大型图像的性能并从特定区域获取特定读数,请使用 CropRectangle 类。 OcrImageInput 构造函数接受一个 CropRectangle 对象作为第二个参数,允许您指定应读取图像文档的哪个区域。 下面的代码示例规定只读章节号和标题区域。 :path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-specific-region.cs using IronOcr; using IronSoftware.Drawing; using System; // Instantiate IronTesseract IronTesseract ocrTesseract = new IronTesseract(); // Read image file to AnyBitmap AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff"); // Specify crop region Rectangle scanRegion = new Rectangle(800, 200, 900, 400); // Add image using var imageInput = new OcrImageInput(anyBitmap.GetStream(), ContentArea: scanRegion); // Perform OCR OcrResult ocrResult = ocrTesseract.Read(imageInput); // Output the result to console Console.WriteLine(ocrResult.Text); Imports IronOcr Imports IronSoftware.Drawing Imports System ' Instantiate IronTesseract Private ocrTesseract As New IronTesseract() ' Read image file to AnyBitmap Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff") ' Specify crop region Private scanRegion As New Rectangle(800, 200, 900, 400) ' Add image Private imageInput = New OcrImageInput(anyBitmap.GetStream(), ContentArea:= scanRegion) ' Perform OCR Private ocrResult As OcrResult = ocrTesseract.Read(imageInput) ' Output the result to console Console.WriteLine(ocrResult.Text) $vbLabelText $csharpLabel 当您需要OCR图像的特定区域或处理文本出现在可预测位置的结构化文档时,这种技术尤其有用。 对于涉及表格或结构化数据的更复杂场景,请探讨如何读取文档中的表格。 扫描区域在输出中是什么样子的? 我可以使用哪些高级流处理技术? 在处理数据流时,利用 IronOCR 的其他功能来提高识别准确性。 图像优化过滤器可在 OCR 处理之前直接应用于流数据: 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; } 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; } Imports IronOcr Imports IronSoftware.Drawing Imports System.IO ' Process stream with filters Public Function ProcessStreamWithFilters(imageStream As Stream) As String Dim ocrTesseract As New IronTesseract() ' Configure for better accuracy ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\" ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd Using input As New OcrImageInput(imageStream) ' Apply preprocessing filters input.Deskew() input.DeNoise() input.Sharpen() Dim result = ocrTesseract.Read(input) Return result.Text End Using End Function $vbLabelText $csharpLabel 要增强图像处理能力,请考虑使用 Filter Wizard 自动确定特定文档类型的最佳预处理步骤。此外,在处理数据流中旋转或倾斜的图像时,修复图像方向功能可显著提高 OCR 的准确性。 如何使用不同的数据流源? IronOCR 可无缝处理各种流源。 无论是处理网络表单中的上传、检索数据库中的图像,还是在格式之间进行转换,API 都必须保持一致: // 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); // 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); Imports System.IO Imports System.Net ' From MemoryStream Dim imageBytes As Byte() = GetImageBytesFromDatabase() Using memoryStream As New MemoryStream(imageBytes) Using input As New OcrImageInput(memoryStream) ' Process input End Using End Using ' From FileStream Using fileStream As New FileStream("document.png", FileMode.Open) Using input2 As New OcrImageInput(fileStream) ' Process input2 End Using End Using ' From network stream Using webClient As New WebClient() Using networkStream As Stream = webClient.OpenRead("https://example.com/image.jpg") Using input3 As New OcrImageInput(networkStream) ' Process input3 End Using End Using End Using $vbLabelText $csharpLabel 为获得最佳效果,请考虑在处理低分辨率流时调整 DPI 设置。 IronOCR 可自动处理 DPI 检测,但手动配置可以提高特定用例的准确性。 在处理多页文档时,探索通过流处理来处理 多页 TIFF 和 GIF 文件。 如何处理来自数据流的 OCR 结果? 在处理您的数据流后,IronOCR 会提供丰富的结果对象,而不仅仅是简单的文本提取。 OcrResult 类包含识别文本的详细信息,包括置信度分数、定位和结构: // 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"); // 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"); Imports IronOcr ' Process stream and analyze results Using input As New OcrImageInput(stream) Dim result = New IronTesseract().Read(input) ' Access detailed results For Each page In result.Pages Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%") For Each paragraph In page.Paragraphs Console.WriteLine($"Paragraph: {paragraph.Text}") Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}") Next Next ' Export results Dim text As String = result.Text Dim searchablePdf As String = result.SaveAsSearchablePdf("output.pdf") Dim hocrHtml As String = result.SaveAsHocrHtml("output.html") End Using $vbLabelText $csharpLabel 结果对象还提供了导出为可搜索 PDF 文件或hOCR HTML 格式的方法,从而可以轻松地从您的流输入创建可搜索文档档案。 出于调试目的,您可以使用高亮文本功能来直观查看 IronOCR 在图像中检测到的内容。 我应该了解哪些性能注意事项? 在处理多个数据流或实施高吞吐量 OCR 解决方案时,请考虑这些优化策略: 1.重复使用 IronTesseract 实例:创建单个实例并在多个操作中重复使用该实例 2.实施进度跟踪:对于大型数据流,使用进度跟踪来监控处理状态 3.并行处理:IronOCR支持多个流的并发处理 4.优化图像质量:预处理数据流,确保最佳分辨率和清晰度 为获得最高性能,请探索快速 OCR 配置选项,并考虑为批量操作实施多线程处理。 在使用对时间敏感的应用程序时,了解超时可帮助您有效管理长时间运行的 OCR 操作。 如何排除常见的流问题? 在使用流媒体时,您可能会遇到一些特殊的挑战。 以下是常见情况的解决方案: 流位置:在传递给 IronOCR 之前,始终将流位置重置为 0 处理:使用 using 语句确保正确的资源清理 格式支持:IronOCR 通过流支持各种图像格式,包括 JPEG、PNG、TIFF 和 BMP 内存管理:对于大数据流,请考虑分块处理或流式方法 对于复杂的文档或当标准 OCR 无法提供令人满意的结果时,计算机视觉功能可以帮助更准确地定位和提取文本。 此外,在处理低质量数据流时,请参考修复低质量扫描指南,了解可显著提高识别率的预处理技术。 有关使用流和其他输入方法的更多详细信息,请浏览我们全面的操作指南和代码示例。 常见问题解答 如何在不先保存到磁盘的情况下对图像数据执行 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 与其他图像处理工作流结合起来。 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 审核者 Jeffrey T. Fritz 首席项目经理 - .NET 社区团队 Jeff 也是 .NET 和 Visual Studio 团队的首席项目经理。他是 .NET Conf 虚拟会议系列的执行制片人,并主持“Fritz and Friends”直播节目,每周两次与观众一起谈论技术并编写代码。Jeff 撰写研讨会、演示文稿并计划包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP 峰会在内的最大型微软开发者活动的内容。 准备开始了吗? Nuget 下载 5,384,824 | 版本: 2026.2 刚刚发布 免费 NuGet 下载 总下载量:5,384,824 查看许可证