前言: 在实际项目中,经常会遇到需要从 PDF 文件中提取文本信息的需求。由于 PDF 文档通常包含多种格式和布局,直接使用 OCR 技术对其进行识别并不总是最优的选择。因此,在进行 OCR 之前,通常需要将 PDF 内容转换为图像文件,以便更有效地应用 OCR 算法。一般步骤是:<br>- 读取 PDF 文件:<br>
<br>- 使用pdf库来读取 PDF 文件的内容。这些库可以解析 PDF 文档,并提取页面内容。<br>
<br> - 将 PDF 页面转换为图像:<br>
<br>- 利用 PDF 库,它可以将每一页的 PDF 内容转换为单独的图像文件或直接保存为多页图像文件。<br>
<br> - 处理图像质量:<br>
<br>- 转换后的图像可能需要进一步优化。例如,可以通过调整分辨率、对比度等参数来提高 OCR 识别的效果。<br>
<br> - 应用 OCR 技术:<br>
<br>- 使用如 PaddleOCR、Tesseract 或其他 OCR 库对转换后的图像进行文字识别。<br>
<br> 正文:<br><br>那么如何利用一个方法解决以上几个步骤?PaddleOCRSharp目前增加扩展组件库PaddleOCRSharp.PDF,在nuget上安装PaddleOCRSharp包之后再安装PaddleOCRSharp.PDF包即可。<br><br> <br>关键代码也就一行。- PaddleOCREngine engine = new PaddleOCREngine();<br><br> var result = engine.DetectTextPDF(“PDF文件或者byte数组”);
复制代码- [/code]返回结果是一个对象包含一个Pages属性,Pages属性包含PDF的每一页的OCRResult信息。OCRResult就是PaddleOCRSharp的OCR图片识别结果,包含文本坐标置信度等信息。[code]//<br>// 摘要:<br>// PDF识别结果<br>public class PDFOCRResult<br>{<br> //<br> // 摘要:<br> // PDF识别每页结果集合<br> public List<OCRResult> Pages { get; set; } = new List<OCRResult>();<br><br>}
复制代码 PaddleOCRSharp.PDF包含两个重载方法,分别满足传参文件路径和文件流。- [/code][code]/// <summary><br>/// PDF识别<br>/// </summary><br>/// <param name="engine">OCR引擎</param><br>/// <param name="pdffile">PDF文件</param><br>/// <param name="dpi">导出图片的分辨,分辨率越高越清晰,图片像素越大</param><br>/// <param name="pageAction">拆分第几页事件回调</param><br>/// <returns>PDF识别结果</returns><br>public static PDFOCRResult DetectTextPDF(this PaddleOCREngine engine, string pdffile, float dpi = 150, Action<int> pageAction = null)<br><br>/// <summary><br> /// PDF识别<br> /// </summary><br> /// <param name="engine">OCR引擎</param><br> /// <param name="pdfbytes">PDF文件byte数组</param><br> /// <param name="dpi">导出图片的分辨,分辨率越高越清晰,图片像素越大</param><br> /// <param name="pageAction">拆分第几页事件回调</param><br> /// <returns>PDF识别结果</returns><br> public static PDFOCRResult DetectTextPDF(this PaddleOCREngine engine, byte[] pdfbytes, float dpi = 150, Action<int> pageAction = null)
复制代码 完整示例代码:- using PaddleOCRSharp;<br>namespace ConsoleApp<br>{<br> internal class Program<br> {<br> static void Main(string[] args)<br> {<br> string pdf = "input.pdf";<br> PaddleOCREngine engine = new PaddleOCREngine();<br> DateTime dt1 = DateTime.Now;<br> Action<int> action = new Action<int>(page => {<br> Console.WriteLine($"正在处理第:{page}页");<br> });<br> var result = engine.DetectTextPDF(pdf,150, action);<br> int pagecount = result.Pages.Count;<br> Console.WriteLine($"总页数:{pagecount}");<br> DateTime dt2 = DateTime.Now;<br> foreach (var page in result.Pages)<br> {<br> Console.WriteLine(page.Text);<br> }<br> Console.WriteLine($"总耗时:{(dt2 - dt1).TotalMilliseconds}ms");<br> Console.WriteLine($"平均耗时:{(dt2 - dt1).TotalMilliseconds / pagecount}ms");<br> Console.ReadLine();<br> }<br> }<br>}
复制代码 <br>写在最后:PaddleOCRSharp适合哪些场景<br><br> addleOCRSharp主要应用场景:<br>文档数字化处理: 对于大量的纸质文档,PaddleOCRSharp可以快速地将其转化为电子文档,方便存储、检索和编辑。这在企业级应用中尤为重要,如图书馆、档案馆、政府部门等需要对大量文档进行数字化处理的场景。<br>自动识别表单数据: 在需要自动化处理表单数据的场景中,PaddleOCRSharp可以识别表单中的文字信息,并将其转化为结构化数据。这大大提高了数据录入的效率和准确性,特别适用于银行、保险、医疗等行业需要处理大量表单数据的场景。<br>车牌识别: PaddleOCRSharp也支持车牌识别功能,可以准确地识别出车辆的车牌号码。这对于交通管理、停车场管理、安防监控等场景非常有用,可以帮助实现车辆的快速识别和追踪。<br>图像文字提取: 在需要从图像中提取文字信息的场景中,如从截图、图片或PDF文件中提取文字,PaddleOCRSharp都能提供高精度的识别结果。这对于研究人员、学者、学生等需要处理大量图像文字信息的用户来说非常便捷。<br>多语言识别: PaddleOCRSharp支持多种语言的识别,包括中文、英文等常用语言。这使得它可以在国际化的应用场景中发挥重要作用,如跨境电商、国际交流等领域。<br>定制化需求: 对于有特殊需求的用户,PaddleOCRSharp提供了丰富的接口和模型库,可以根据具体需求进行定制化和扩展。这为用户提供了更多的灵活性和可能性,可以满足不同场景下的特定需求。 PaddleOCRSharp凭借其强大的OCR功能和广泛的应用场景,成为了.NET开发者在处理OCR任务时的有力工具。无论是企业级应用还是个人开发者,都可以通过PaddleOCRSharp快速实现OCR功能,提高工作效率和数据处理的准确性。<br>项目地址:<br>码云:https://gitee.com/raoyutian/PaddleOCRSharp<br>Github: https://github.com/raoyutian/PaddleOCRSharp<br> <br>欢迎加入QQ交流群:318860399进行技术交流<br><br> <br><br> <br><br>来源:程序园用户自行投稿发布,如果侵权,请联系站长删除<br>免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |