如何在 C# 中检测 OCR 的页面旋转 | IronOCR

如何使用 IronOCR 在 C# 中检测页面旋转

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

IronOCR 的 DetectPageOrientation 方法可自动识别 PDF 文档和图像中的页面旋转角度(0°、90°、180°、270°)。 它可返回每个页面的 RotationAngle 属性,从而实现编程方向校正,并为准确提取文本提供置信度分数。

页面旋转检测可识别文档页面是否顺时针或逆时针旋转了 0、90、180 或 270 度。 这些信息可确保页面以正确的方向显示或处理,从而实现准确的渲染和文本提取。

快速入门:使用 DetectPageOrientation 来识别页面旋转

<! -- 待办事项:在此处添加图片 --> <! --介绍实现的示意图 --> <!--说明:说明代码概念的图表或截图 -->

本示例演示了在 PDF 上使用 IronOCR 的 DetectPageOrientation 访问 RotationAngle 属性。 它以最少的代码提供快速的页面旋转检测和校正。

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

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

    PM > Install-Package IronOcr

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

    var rotationResults = new IronOcr.OcrInput().LoadPdf("doc.pdf").DetectPageOrientation();
    Console.WriteLine(rotationResults.First().RotationAngle);
  3. 部署到您的生产环境中进行测试

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


如何检测文档中的页面旋转?

<! -- 待办事项:在此处添加图片 --> <!--!屏幕截图演示如何检测文档中的页面旋转? 在 IronPDF 中 --> <!-- 说明:显示逐步过程的截图 -->

加载文档后,使用 DetectPageOrientation 方法识别每个页面的旋转。 此方法支持 0、90、180 和 270 度。 对于超出这些标准旋转范围的倾斜图像,请使用 IronOCR 的图像校正过滤器中的 Deskew 方法。 然后使用检测到的角度将图像旋转回原始方向。 让我们使用 示例 PDF

[{i:(此功能在文本密集的文档中效果最佳。

:path=/static-assets/ocr/content-code-examples/how-to/detect-page-rotation-detect-page-rotation.cs
using IronOcr;
using System;

using var input = new OcrInput();

// Load PDF document
input.LoadPdf("Clockwise90.pdf");

// Detect page rotation
var results = input.DetectPageOrientation();

// Ouput result
foreach(var result in results)
{
    Console.WriteLine(result.PageNumber);
    Console.WriteLine(result.HighConfidence);
    Console.WriteLine(result.RotationAngle);
}
Imports IronOcr
Imports System

Private input = New OcrInput()

' Load PDF document
input.LoadPdf("Clockwise90.pdf")

' Detect page rotation
Dim results = input.DetectPageOrientation()

' Ouput result
For Each result In results
	Console.WriteLine(result.PageNumber)
	Console.WriteLine(result.HighConfidence)
	Console.WriteLine(result.RotationAngle)
Next result
$vbLabelText   $csharpLabel

检测结果意味着什么?

  • 页码:基于零的页面索引。
  • RotationAngle:旋转角度(度)。 使用 Rotate 方法纠正方向。
  • HighConfidence:对处理边缘情况的定向结果的信心级别。

何时应使用高置信度值?

HighConfidence 属性对于旋转检测可能不确定的模糊或低质量文档至关重要。 文本稀疏、布局异常或扫描质量较差的文档通常会降低置信度分数。 在这些情况下,应实施额外的验证或在检测前应用图像质量校正过滤器

使用此值可对置信度较低的页面实施后备策略或人工审核。 例如,如果置信度低于 80%,则处理页面的多个方向并比较 OCR 结果,或标记为人工审核。 IronOCR 的计算机视觉功能有助于在具有挑战性的文档中更准确地识别文本区域。

如何纠正检测到的旋转?

确定旋转角度后,使用 OcrInput 对象上的 Rotate 方法在 OCR 之前纠正方向。 这样才能确保最佳的文本识别准确性。 有关全面的方向修正,请参阅图像方向修正指南。 以下是校正过程:

// Apply rotation correction based on detection results
if (result.RotationAngle != 0)
{
    input.Rotate(360 - result.RotationAngle); // Rotate back to 0°
}
// Apply rotation correction based on detection results
if (result.RotationAngle != 0)
{
    input.Rotate(360 - result.RotationAngle); // Rotate back to 0°
}
' Apply rotation correction based on detection results
If result.RotationAngle <> 0 Then
    input.Rotate(360 - result.RotationAngle) ' Rotate back to 0°
End If
$vbLabelText   $csharpLabel

对于需要额外预处理的文档,可以考虑使用 OcrInput 类,该类在 OCR 处理之前提供了广泛的文档准备方法。

如何自定义检测速度和精度?

<! -- 待办事项:在此处添加图片 --> <!--!屏幕截图演示如何自定义检测速度和准确性? in IronPdf --> <!-- 说明:显示逐步过程的截图 -->

DetectPageOrientation 方法接受一个可选参数来控制检测细节。 通过提供 OrientationDetectionMode 枚举,您可以根据自己的要求调整检测速度和准确性。

以下是实施方法:

:path=/static-assets/ocr/content-code-examples/how-to/detect-page-rotation-detect-page-rotation-advanced.cs
using IronOcr;
using System;

using var input = new OcrInput();

// Load PDF document
input.LoadPdf("Clockwise90.pdf");

// Detect page rotation with Fast mode
var results = input.DetectPageOrientation(OrientationDetectionMode.Fast);

// Ouput result
foreach(var result in results)
{
    Console.WriteLine(result.PageNumber);
    Console.WriteLine(result.HighConfidence);
    Console.WriteLine(result.RotationAngle);
}
Imports IronOcr
Imports System

Using input As New OcrInput()
    ' Load PDF document
    input.LoadPdf("Clockwise90.pdf")

    ' Detect page rotation with Fast mode
    Dim results = input.DetectPageOrientation(OrientationDetectionMode.Fast)

    ' Output result
    For Each result In results
        Console.WriteLine(result.PageNumber)
        Console.WriteLine(result.HighConfidence)
        Console.WriteLine(result.RotationAngle)
    Next
End Using
$vbLabelText   $csharpLabel

我应该选择哪种检测模式?

OrientationDetectionMode 有四种速度选项:

[{w:(Balanced, DetailedExtremeDetailed需要 IronOcr.Extensions.AdvancedScan 软件包。 这些选项在 Windows x86 和 Mac ARM 上不可用。

  • 快速:高速检测,精度较低。 适用于对速度要求极高的草稿或批量处理。 DetectPageOrientation 的默认值。 通过多线程支持高效处理数千页。
  • 均衡:兼顾速度和准确性。 适用于生产任务。 使用 AdvancedScan 扩展功能,在保持性能的同时提高准确性。
  • 详细:低速、高精度。 最适合精确或关键任务,尤其是具有复杂布局或混合内容的文档。
  • ExtremeDetailed:速度最慢,准确度最高。 仅在 Detailed 不足或文本严重倾斜和扭曲时使用。

哪些是常见的性能考虑因素?

不同模式的性能差异很大。 快速模式每分钟可处理数百页; ExtremeDetailed 每页可能需要几秒钟。 根据准确性要求和时间限制进行选择。 实现最佳性能:

1.图像分辨率:更高的DPI 设置可提高准确性,但会增加处理时间。150-300 DPI 通常足以进行旋转检测。 2.文档类型:文本密集的文档比布局稀疏的文档处理得更快、更准确。 使用 Filter Wizard 在检测前优化图像质量。 3.资源使用:监控大批量处理时的内存使用情况。 实施进度跟踪以提供反馈并管理系统资源。 4.并行处理:对于批量操作,可使用 IronOCR 的多线程功能同时处理多个文档,同时保持准确性。

如何处理混合方向文档?

对于混合方向的文档,请使用 DetectPageOrientation 逐页处理,然后在 OCR 之前应用逐页旋转校正。 无论初始状态如何,都要确保正确的定位。 以下是一种有效的方法:

// Process each page with individual rotation detection
for (int i = 0; i < results.Count; i++)
{
    var pageResult = results[i];

    // Apply rotation only to pages that need it
    if (pageResult.RotationAngle != 0 && pageResult.HighConfidence)
    {
        // Correct the specific page
        input.Pages[i].Rotate(360 - pageResult.RotationAngle);
    }
}
// Process each page with individual rotation detection
for (int i = 0; i < results.Count; i++)
{
    var pageResult = results[i];

    // Apply rotation only to pages that need it
    if (pageResult.RotationAngle != 0 && pageResult.HighConfidence)
    {
        // Correct the specific page
        input.Pages[i].Rotate(360 - pageResult.RotationAngle);
    }
}
' Process each page with individual rotation detection
For i As Integer = 0 To results.Count - 1
    Dim pageResult = results(i)

    ' Apply rotation only to pages that need it
    If pageResult.RotationAngle <> 0 AndAlso pageResult.HighConfidence Then
        ' Correct the specific page
        input.Pages(i).Rotate(360 - pageResult.RotationAngle)
    End If
Next
$vbLabelText   $csharpLabel

对于涉及不同质量的扫描文件多页 TIFF 文件的复杂情况,请对每一页进行单独预处理,以获得最佳效果。

在处理混合格式输入时,OcrResult 类可提供详细的页面信息,从而实现复杂的错误处理和质量控制工作流。 对于高吞吐量的生产环境,请探索快速 OCR 配置选项,以平衡速度和准确性。

如果要处理同时包含文本和条形码的文档,可使用 IronOCR 的 OCR with Barcode & QR Reading 功能一次性提取所有信息,提高效率。

常见问题解答

什么是页面旋转检测,为什么它很重要?

页面旋转检测可识别文档页面是否旋转了 0°、90°、180° 或 270°。这对于 IronOCR 确保以正确方向处理页面,从而从 PDF 和图像中准确提取和呈现文本至关重要。

如何使用 C# 快速检测 PDF 中的页面旋转?

使用 IronOCR 的 DetectPageOrientation 方法,只需最少的代码:var rotationResults = new IronOcr.OcrInput().LoadPdf("doc.pdf").DetectPageOrientation(); 这将返回所有页面的旋转信息,可通过 RotationAngle 属性访问。

可以检测哪些旋转角度?

IronOCR 的 DetectPageOrientation 方法可以检测 0°、90°、180° 和 270° 度的标准旋转。对于超出这些标准旋转范围的倾斜图像,请使用 IronOCR 图像校正滤镜中的 Deskew 方法。

DetectPageOrientation 返回哪些信息?

该方法返回每个页面的三个关键属性:PageNumber (基于零的索引)、RotationAngle (以度为单位的旋转,用于 IronOCR 的 Rotate 方法)和 HighConfidence (置信度,用于处理边缘情况)。

什么时候应该使用 HighConfidence 属性?

在处理旋转检测可能不确定的模糊或低质量文档时,请使用 HighConfidence 属性。文本稀疏、布局异常或扫描质量较差的文档通常会在 IronOCR 中返回较低的置信度分数,需要额外的验证或图像质量校正过滤器。

此功能对某些类型的文档是否最有效?

IronOCR 的 DetectPageOrientation 功能在文本密集的文档中表现最佳。对于文本较少或布局复杂的文档,可考虑在检测前应用图像质量校正过滤器,以获得最佳效果。

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,384,824 | 版本: 2026.2 刚刚发布