如何将 OCR 结果保存为 HTML 文件中的 hOCR | IronOCR

使用 IronOCR 将 OCR 结果保存为 C# 中的 hOCR HTML.

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

IronOCR允许开发人员通过将 RenderHocr 设置为 true 并使用 SaveAsHocrFileSaveAsHocrString 方法,将 OCR 结果保存为 hOCR HTML 文件,从而在结构化的 HTML 格式中保留文本布局和字符坐标。

快速入门:将 OCR 输出保存为 hOCR HTML 文件

只需一次设置和一次方法调用,即可启用 hOCR 渲染并将结果直接导出到 HTML 文件。

  1. 使用 NuGet 包管理器安装 https://www.nuget.org/packages/IronOcr

    PM > Install-Package IronOcr
  2. 复制并运行这段代码。

    var hocr = new IronTesseract { Configuration = { RenderHocr = true } }.Read(new OcrInput("image.png")).SaveAsHocrString();
  3. 部署到您的生产环境中进行测试

    通过免费试用立即在您的项目中开始使用IronOCR

    arrow pointer


什么是 hOCR?

hOCR,即"基于 HTML 的 OCR",是一种用于以结构化方式表示光学字符识别 (OCR) 结果的文件格式。 hOCR 文件使用 HTML 编写,提供了一种存储识别文本、布局信息以及图像或文档中每个识别字符坐标的方法。 这种结构化的格式使 hOCR 对于需要文本位置数据的应用特别有价值,例如文档索引、无障碍工具和高级搜索实现。

hOCR 格式对于构建应用程序的开发人员来说至关重要,因为他们不仅需要了解文本的内容,还需要了解文本在原始文档中的位置。 这些空间信息可以实现以下功能:突出显示文本以进行调试、在原始图像上创建可点击的覆盖图,以及在将扫描文档转换为可访问格式时保持文档布局的完整性。 对于处理 扫描文档的企业应用程序,hOCR 为高级文档理解和提取工作流程奠定了基础。

如何将 OCR 结果导出为 hOCR 文件?

要将结果导出为 hOCR,首先要启用 Configuration.RenderHocr 属性,将其设置为 true。 从 Read 方法获取OcrResult 对象后,使用 SaveAsHocrFile 方法将 OCR 结果导出为 HTML。 此方法可输出包含输入文档阅读结果的 HTML 文件。 以下代码演示了如何使用以下示例 TIFF文件。

:path=/static-assets/ocr/content-code-examples/how-to/html-export-export-html.cs
using IronOcr;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Enable render as hOCR
ocrTesseract.Configuration.RenderHocr = true;

// Add image
using var imageInput = new OcrImageInput("Potter.tiff");
imageInput.Title = "Html Title";

// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Export as HTML
ocrResult.SaveAsHocrFile("result.html");
$vbLabelText   $csharpLabel

OcrInput 类为在 OCR 处理前准备图像提供了广泛的选项。 您可以应用过滤器、指定感兴趣的区域并处理各种输入格式,包括 多页 TIFF 文件。 在使用 PDF OCR 文本提取时,同样的 hOCR 导出方法可无缝应用。

为什么设置 RenderHocr 至关重要?

RenderHocr 属性设置为 true 会指示IronOCR在 OCR 过程中生成必要的 hOCR 结构。 如果没有此配置,SaveAsHocrFileSaveAsHocrString 方法将无法生成格式正确的 hOCR 输出并保留布局。 必须在调用 Read 方法之前设置此配置,因为它会影响Tesseract 引擎处理和构建输出数据的方式。

hOCR 格式保留了重要的元数据,包括

  • 字符级边界框
  • 单词置信度得分
  • 行和段落结构
  • 页面尺寸和 DPI 信息
  • 可检测到的字体特征

在实施计算机视觉工作流程或构建需要理解文档结构而非简单文本提取的系统时,这些元数据尤其有用。

哪些文件类型支持 hOCR 导出?

IronOCR 支持从各种图像格式导出 hOCR,包括 TIFF、PNG、JPEG、BMP 和 GIF。 PDF文档也可以处理并导出为 hOCR,在 HTML 结构中保留每一页的文本和布局信息。 该库可无缝处理单页图像和多页文档。

不同文件类型的最佳效果:

  • TIFF:扫描文件的理想选择,支持多页处理
  • PDF:非常适合混合内容(文本和图像)
  • PNG/JPEG:最适合需要 OCR 的照片或屏幕截图
  • BMP:适合高质量扫描的未压缩格式

在处理 护照 牌照等专业文档类型时,hOCR 格式有助于保留不同文本元素之间的空间关系,从而更容易根据位置提取特定字段。

如何将 OCR 结果导出为 HTML 字符串?

使用相同的 TIFF 样本图像,利用 SaveAsHocrString 方法将 OCR 结果导出为 HTML 字符串。 该方法返回 HTML 字符串。

:path=/static-assets/ocr/content-code-examples/how-to/html-export-export-html-string.cs
// Export as HTML string
string hocr = ocrResult.SaveAsHocrString();
$vbLabelText   $csharpLabel

字符串输出包含完整的 hOCR 标记,可以进一步处理、存储到数据库中或集成到网络应用程序中。 这种方法在构建可搜索 PDF 系统或实施自定义文档索引解决方案时尤其有用。 对于使用 125 种国际语言的开发人员,hOCR 格式保留了特定语言的文本属性和阅读方向信息。

何时应使用字符串输出而不是文件?

当您需要在内存中处理或操作 hOCR 数据、与网络服务集成或将结果存储到数据库中时,字符串输出是理想之选。 这种方法避免了文件系统依赖性,并能为网络应用程序动态生成 HTML。 常见的用例包括:

  • Web API 集成:在 API 响应中直接返回 hOCR 数据
  • 数据库存储:使用文档元数据存储 OCR 结果
  • 实时处理:无需磁盘 I/O 开销即可处理结果
  • 云功能:在文件访问受限的无服务器环境中工作
  • 内容管理系统:将 OCR 结果集成到现有文档工作流程中

对于需要进度跟踪的应用程序,字符串输出可在部分结果可用时立即进行处理。 这在实施 多线程 OCR 处理(同时处理多个文档)时尤其有益。

如何将多个页面处理为 HTML 字符串?

处理多页文档时,SaveAsHocrString 会将所有页面合并为一个具有正确页面划分的 HTML 字符串。 每个页面的内容都用适当的 hOCR 元素封装,保持文档结构和页面边界。

// Processing multi-page documents
using var multiPageInput = new OcrPdfInput("multi-page-document.pdf");
multiPageInput.Title = "Multi-Page Document";

 // Configure for hOCR output
 IronTesseract tesseract = new IronTesseract();
 tesseract.Configuration.RenderHocr = true;

 // Read all pages
 OcrResult result = tesseract.Read(multiPageInput);

 // Export as single HTML string with all pages
 string fullHocr = result.SaveAsHocrString();

 // Or process page by page
 foreach (var page in result.Pages)
 {
     string pageHocr = page.SaveAsHocrString();
     // Process individual page hOCR
 }
// Processing multi-page documents
using var multiPageInput = new OcrPdfInput("multi-page-document.pdf");
multiPageInput.Title = "Multi-Page Document";

 // Configure for hOCR output
 IronTesseract tesseract = new IronTesseract();
 tesseract.Configuration.RenderHocr = true;

 // Read all pages
 OcrResult result = tesseract.Read(multiPageInput);

 // Export as single HTML string with all pages
 string fullHocr = result.SaveAsHocrString();

 // Or process page by page
 foreach (var page in result.Pages)
 {
     string pageHocr = page.SaveAsHocrString();
     // Process individual page hOCR
 }
$vbLabelText   $csharpLabel

这种方法可与 PDF 流无缝协作,并支持处理特定页面范围或对不同页面应用不同 OCR 配置等高级应用场景。

高级 hOCR 实施技巧

哪些是保证 hOCR 输出质量的最佳实践?

为了最大限度地提高 hOCR 输出的质量,请考虑在处理之前应用 图像优化过滤器

var input = new OcrImageInput("document.png");
input.DeNoise();  // Remove image noise
input.Deskew();   // Correct image rotation
input.Scale(2);   // Upscale for better recognition

IronTesseract ocr = new IronTesseract();
ocr.Configuration.RenderHocr = true;
var result = ocr.Read(input);
var input = new OcrImageInput("document.png");
input.DeNoise();  // Remove image noise
input.Deskew();   // Correct image rotation
input.Scale(2);   // Upscale for better recognition

IronTesseract ocr = new IronTesseract();
ocr.Configuration.RenderHocr = true;
var result = ocr.Read(input);
$vbLabelText   $csharpLabel

对于低质量扫描,额外的预处理步骤可以显著提高 hOCR 的准确性。 过滤器向导可帮助确定特定文档类型的最佳过滤器组合。

hOCR 结构如何支持高级处理?

生成的 hOCR 遵循标准规范,采用嵌套 div 元素表示文档层次结构:

<div class='ocr_page' title='bbox 0 0 2480 3508'>
  <div class='ocr_carea' title='bbox 156 114 2324 3395'>
    <p class='ocr_par' title='bbox 157 114 2323 164'>
      <span class='ocr_line' title='bbox 157 114 2323 164'>
        <span class='ocr_word' title='bbox 157 114 294 161'>Hello</span>
        <span class='ocr_word' title='bbox 334 119 483 161'>World</span>
      </span>
    </p>
  </div>
</div>
<div class='ocr_page' title='bbox 0 0 2480 3508'>
  <div class='ocr_carea' title='bbox 156 114 2324 3395'>
    <p class='ocr_par' title='bbox 157 114 2323 164'>
      <span class='ocr_line' title='bbox 157 114 2323 164'>
        <span class='ocr_word' title='bbox 157 114 294 161'>Hello</span>
        <span class='ocr_word' title='bbox 334 119 483 161'>World</span>
      </span>
    </p>
  </div>
</div>
HTML

这种结构可以实现精确的文本位置提取和先进的文档分析功能,对于需要空间文本关系或布局保存的应用非常有价值。 在使用 表格提取时,hOCR 格式有助于保持表格结构和单元格关系。

bbox(边框)属性包含 "bbox 左上右下 "格式的坐标,为每个文本元素提供像素级精确位置数据。 这些信息对于

  • 创建具有文本选择功能的交互式文档查看器
  • 实施保留排版的节录系统
  • 构建保持阅读顺序的无障碍工具
  • 开发文档比较系统

对于需要更详细配置选项的开发人员,Tesseract详细配置指南提供了影响hOCR输出质量和结构的高级设置。

常见问题解答

什么是 hOCR,为什么它对 OCR 应用程序有用?

hOCR(基于 HTML 的 OCR)是一种以结构化 HTML 表示 OCR 结果的文件格式,同时存储识别的文本和空间信息(如字符坐标)。IronOOCR 支持 hOCR 导出,这对于需要文本位置数据、文档索引、可访问性工具以及在处理扫描文档时保持布局完整性的应用程序来说非常有价值。

如何在我的 C# OCR 应用程序中启用 hOCR 输出?

要使用 IronOCR 启用 hOCR 输出,请将 IronTesseract 实例上的 Configuration.RenderHocr 属性设置为 true。这样,IronOCR 就会以 hOCR 格式准备 OCR 结果,允许你使用 SaveAsHocrFile 或 SaveAsHocrString 方法导出这些结果。

导出 hOCR 结果有哪些方法?

IronOCR 提供了两种导出 hOCR 结果的方法:SaveAsHocrFile() 直接将输出保存到磁盘上的 HTML 文件中,而 SaveAsHocrString() 则将 hOCR HTML 返回为字符串,以便在应用程序中进一步处理或存储。

只需一行代码就能将 OCR 结果导出为 hOCR 吗?

是的,IronOCR 允许使用方法链单行导出 hOCR。你可以在一条语句中创建一个启用了 RenderHocr 的 IronTesseract 实例、读取输入内容并调用 SaveAsHocrString(): var hocr = new IronTesseract { Configuration = { RenderHocr = true }.}.Read(new OcrInput("image.png")).SaveAsHocrString();

hOCR 从 OCR 结果中保留了哪些类型的空间信息?

hOCR 保留了原始图像或文档中每个识别字符的布局信息和坐标。IronOCR 的 hOCR 导出保留了这些空间数据,可实现用于调试的文本高亮、在图像上创建可点击的叠加以及了解文本在原始文档上出现的位置等功能。

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,556,263 | 版本: 2026.3 刚刚发布
Still Scrolling Icon

还在滚动吗?

想快速获得证据? PM > Install-Package IronOcr
运行示例 观看您的图像变成可搜索文本。