如何从 C# 中的流中读取用于 OCR 的信息
IronOCR 通过将流传递给 OcrInput 或 OcrImageInput 构造函数,直接从 C# 流中读取图像数据,从而无需将文件保存到磁盘即可实现高效的 OCR 处理。
流是可读可写的二进制信息的连续流。 在编程中,流通过将数据分成易于管理的块来有效地处理对于内存来说过大的数据。
IronOCR 的导入方法直接接受图像数据流。 将流数据传入导入方法,该方法会自动处理所有必要的步骤。 对于高级场景,请探索 OcrInput 类,它提供了丰富的选项来处理各种输入格式。
快速入门:几秒内使用流作为OCR输入
此示例演示了即时 OCR 功能:将 System.IO.Stream 输入 IronOCR,跳过文件路径,仅用极少代码即可获取识别出的文本。
最小工作流程(5 个步骤)
- 下载一个用于从流中读取数据的 C# 库。
- 获取和准备图像流数据
- 将图像流传递给OcrImageInput构造函数以导入图像
- 使用
Read方法执行 OCR - 通过指定裁剪区域定义读取区域
如何使用 IronOCR 读取流?
首先,实例化 IronTesseract 类以执行 OCR。 使用 FromFile 的 AnyBitmap 方法导入图像文件。该 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)
基于流的 OCR 有利于网络应用程序接收上传的图像、处理数据库中的图像或处理不应写入磁盘的临时数据。 流式处理方法可与 System.Drawing 对象及其他图像处理库无缝集成。
为什么使用流进行 OCR?
对于 .NET 开发人员来说,使用流工作有几个优势:
- 内存效率:分块处理数据而不是将整个文件加载到内存中
- 安全性:处理敏感文件而不在磁盘上创建临时文件
- 性能:消除来自文件系统操作的I/O开销
- 灵活性:处理网页上传、数据库BLOB和内存内转换
对于处理多页文档或处理 PDF 流,IronOCR 保持了相同的简单 API,同时提供了强大的性能。 在处理扫描文档时,您还可以利用 IronOCR 的功能,通过流处理高效读取扫描文档。
如何为流 OCR 指定扫描区域?
为提升大尺寸图像的处理性能并从特定区域获取具体读数,请使用 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)
当您需要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
要增强图像处理能力,请考虑使用 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
为获得最佳效果,请考虑在处理低分辨率流时调整 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
结果对象还提供了导出为可搜索 PDF 文件或hOCR HTML 格式的方法,从而可以轻松地从您的流输入创建可搜索文档档案。 出于调试目的,您可以使用高亮文本功能来直观查看 IronOCR 在图像中检测到的内容。
我应该了解哪些性能注意事项?
在处理多个数据流或实施高吞吐量 OCR 解决方案时,请考虑这些优化策略:
- 复用
IronTesseract实例:创建单个实例并在多个操作中复用 - 实现进度跟踪:对于大型流,使用进度跟踪来监控处理状态
- 并行处理:
IronOCR支持多流并行处理 - 优化图像质量:预处理流以确保最佳的分辨率和清晰度
为获得最高性能,请探索快速 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 与其他图像处理工作流结合起来。
IronOCR可以集成到现有应用程序中吗?
IronOCR设计为易于使用C#集成到现有应用程序中,允许开发人员以最小的努力为他们的软件添加OCR功能。
使用IronOCR进行文档管理有什么好处?
使用IronOCR进行文档管理可以通过将扫描的文档转换为可搜索和可编辑文本来简化工作流程,减少手动数据输入的需要,提高文档可访问性。
IronOCR如何提高数据准确性?
IronOCR通过其高级识别算法和图像校正功能提高数据准确性,确保文本提取过程既可靠又精确。
IronOCR 有免费试用版吗?
是的,Iron Software 提供IronOCR 的免费试用,使用户在做出购买决定之前可以测试其功能和能力。

