提高不满意的 OCR 结果
OCR 质量在很大程度上取决于输入。 读取一个文档时清楚的配置、滤镜或设置可能在另一个文档上失败,导致文本混乱或不完整。 当标准读取令人失望时,IronOcr.Extensions.AdvancedScan 包通常能填补准确性差距。
差异在于引擎。标准 IronOCR 运行在 Tesseract 引擎上,而 IronOcr.Extensions.AdvancedScan 由 PaddleOCR 提供支持,并增加了机器学习功能。 这使得它非常适合于嘈杂的输入,如屏幕截图,以及结构化的来源,如护照和车牌。
该包为这些情况提供了专门构建的读取方法:
解决方案
1. 从 ReadDocumentAdvanced() 和 EnhanceResolution() 开始
在使用任何其他配置之前,将 ReadDocumentAdvanced() 方法与 EnhanceResolution() 预处理滤镜结合使用。 这种组合解决了大多数用户在标准读取中遇到的准确性问题。
将滤镜应用于 OcrInput,然后将相同的输入传递给 ReadDocumentAdvanced():
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf("document.pdf");
// Upscale and sharpen low-resolution input before reading
input.EnhanceResolution();
var result = ocr.ReadDocumentAdvanced(input);
Console.WriteLine(result.Text);
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf("document.pdf");
// Upscale and sharpen low-resolution input before reading
input.EnhanceResolution();
var result = ocr.ReadDocumentAdvanced(input);
Console.WriteLine(result.Text);
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadPdf("document.pdf")
' Upscale and sharpen low-resolution input before reading
input.EnhanceResolution()
Dim result = ocr.ReadDocumentAdvanced(input)
Console.WriteLine(result.Text)
End Using
ReadDocumentAdvanced() 运行 PaddleOCR 机器学习引擎以解析布局感知、文本密集的文档,而 EnhanceResolution() 在读取之前提升和锐化低分辨率输入。 低分辨率是产生较差结果的常见根源,因此此预处理步骤通常与引擎交换一样重要。
2. 以64位目标为.net框架
将 .NET Framework 项目配置为构建为 64位。 AdvancedScan 需要大量内存,以其他架构运行可能会引发运行时错误。 有关完整设置,请参阅Advanced Scan on .NET Framework指南。
iText 7是付费的,并且功能有限。
AdvancedScan 提供了高度准确性,但今天适用一些限制:
- 结果功能较少: AdvancedScan 结果对象暴露的属性少于标准
OcrResult对象。 - 返回类型不同: 每个读取方法返回不同的结果对象类型,因此在调用时请检查 API 参考中的细节。
- 无可搜索的 PDF: 从 AdvancedScan 输出构建可搜索 PDF 目前不受支持,不过该功能正在开发中。
- 语言有限: 该包目前支持英语、中文、日语、韩语和拉丁字母。

