PaddleOCRSharp增加PDF识别,让你的代码更高效

前言:    在实际项目中,经常会遇到需要从 PDF 文件中提取文本信息的需求。由于 PDF 文档通常包含多种格式和布局,直接使用 OCR 技术对其进行识别并不总是最优的选择。因此,在进行 OCR 之前,通常需要将 PDF 内容转换为图像文件,以便更有效地应用 OCR 算法。一般步骤是:
  1. 读取 PDF 文件

    • 使用pdf库来读取 PDF 文件的内容。这些库可以解析 PDF 文档,并提取页面内容。
  2. 将 PDF 页面转换为图像

    • 利用 PDF 库,它可以将每一页的 PDF 内容转换为单独的图像文件或直接保存为多页图像文件。
  3. 处理图像质量

    • 转换后的图像可能需要进一步优化。例如,可以通过调整分辨率、对比度等参数来提高 OCR 识别的效果。
  4. 应用 OCR 技术

    • 使用如 PaddleOCRTesseract 或其他 OCR 库对转换后的图像进行文字识别。

正文:

那么如何利用一个方法解决以上几个步骤?

PaddleOCRSharp目前增加扩展组件库PaddleOCRSharp.PDF,在nuget上安装PaddleOCRSharp包之后再安装PaddleOCRSharp.PDF包即可。

 

关键代码也就一行。
 PaddleOCREngine engine = new PaddleOCREngine();

 var result = engine.DetectTextPDF(“PDF文件或者byte数组”);

返回结果是一个对象包含一个Pages属性Pages属性包含PDF的每一页的OCRResult信息。OCRResult就是PaddleOCRSharp的OCR图片识别结果,包含文本坐标置信度等信息。
//
// 摘要:
//     PDF识别结果
public class PDFOCRResult
{
    //
    // 摘要:
    //     PDF识别每页结果集合
    public List<OCRResult> Pages { get; set; } = new List<OCRResult>();

}
PaddleOCRSharp.PDF包含两个重载方法,分别满足传参文件路径和文件流。

/// <summary>
/// PDF识别
/// </summary>
/// <param name="engine">OCR引擎</param>
/// <param name="pdffile">PDF文件</param>
/// <param name="dpi">导出图片的分辨,分辨率越高越清晰,图片像素越大</param>
/// <param name="pageAction">拆分第几页事件回调</param>
/// <returns>PDF识别结果</returns>
public static PDFOCRResult DetectTextPDF(this PaddleOCREngine engine, string pdffile, float dpi = 150, Action<int> pageAction = null)

/// <summary>
 /// PDF识别
 /// </summary>
 /// <param name="engine">OCR引擎</param>
 /// <param name="pdfbytes">PDF文件byte数组</param>
 /// <param name="dpi">导出图片的分辨,分辨率越高越清晰,图片像素越大</param>
 /// <param name="pageAction">拆分第几页事件回调</param>
 /// <returns>PDF识别结果</returns>
 public static PDFOCRResult DetectTextPDF(this PaddleOCREngine engine, byte[] pdfbytes, float dpi = 150, Action<int> pageAction = null)

 


完整示例代码:
using PaddleOCRSharp;
namespace ConsoleApp
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string pdf = "input.pdf";
            PaddleOCREngine engine = new PaddleOCREngine();
            DateTime dt1 = DateTime.Now;
            Action<int> action = new Action<int>(page => {
                Console.WriteLine($"正在处理第:{page}页");
            });
            var result = engine.DetectTextPDF(pdf,150, action);
            int pagecount = result.Pages.Count;
            Console.WriteLine($"总页数:{pagecount}");
            DateTime dt2 = DateTime.Now;
            foreach (var page in result.Pages)
            {
                Console.WriteLine(page.Text);
            }
            Console.WriteLine($"总耗时:{(dt2 - dt1).TotalMilliseconds}ms");
            Console.WriteLine($"平均耗时:{(dt2 - dt1).TotalMilliseconds / pagecount}ms");
            Console.ReadLine();
        }
    }
}

 


写在最后:

PaddleOCRSharp适合哪些场景

PaddleOCRSharp主要应用场景:

文档数字化处理: 对于大量的纸质文档,PaddleOCRSharp可以快速地将其转化为电子文档,方便存储、检索和编辑。这在企业级应用中尤为重要,如图书馆、档案馆、政府部门等需要对大量文档进行数字化处理的场景。

自动识别表单数据: 在需要自动化处理表单数据的场景中,PaddleOCRSharp可以识别表单中的文字信息,并将其转化为结构化数据。这大大提高了数据录入的效率和准确性,特别适用于银行、保险、医疗等行业需要处理大量表单数据的场景。

车牌识别: PaddleOCRSharp也支持车牌识别功能,可以准确地识别出车辆的车牌号码。这对于交通管理、停车场管理、安防监控等场景非常有用,可以帮助实现车辆的快速识别和追踪。

图像文字提取: 在需要从图像中提取文字信息的场景中,如从截图、图片或PDF文件中提取文字,PaddleOCRSharp都能提供高精度的识别结果。这对于研究人员、学者、学生等需要处理大量图像文字信息的用户来说非常便捷。

多语言识别: PaddleOCRSharp支持多种语言的识别,包括中文、英文等常用语言。这使得它可以在国际化的应用场景中发挥重要作用,如跨境电商、国际交流等领域。

定制化需求: 对于有特殊需求的用户,PaddleOCRSharp提供了丰富的接口和模型库,可以根据具体需求进行定制化和扩展。这为用户提供了更多的灵活性和可能性,可以满足不同场景下的特定需求。 PaddleOCRSharp凭借其强大的OCR功能和广泛的应用场景,成为了.NET开发者在处理OCR任务时的有力工具。无论是企业级应用还是个人开发者,都可以通过PaddleOCRSharp快速实现OCR功能,提高工作效率和数据处理的准确性。

项目地址:

码云:https://gitee.com/raoyutian/PaddleOCRSharp

Github: https://github.com/raoyutian/PaddleOCRSharp

 

欢迎加入QQ交流群:318860399进行技术交流

 

 

posted on 2025-06-13 16:24  英田科技-明月心  阅读(633)  评论(1)    收藏  举报