当前位置: 首页 > 科技观察

太方便了!告别复制粘贴,Python轻松将PDF转文本!

时间:2023-03-19 20:56:26 科技观察

对于很多人来说,将PDF转换为可编辑的文本只是一种需要,但没有简单的方法。在本文介绍的项目中,K1Digital的高级机器学习工程师LucasSoares尝试使用OCR(光学字符识别)自动转录pdf幻灯片,转录效果还不错。传统讲座通常附有一组pdf幻灯片。通常,为此类讲座做笔记需要从pdf中进行大量复制粘贴。最近,来自K1Digital的高级机器学习工程师LucasSoares一直在尝试通过使用OCR(光学字符识别)自动转录pdf幻灯片来避免手动复制和粘贴pdf内容,以便直接在markdown文件中操作其内容,实现这个过程的自动化。左边是项目作者LucasSoares。项目地址:https://github.com/EnkrateiaLucca/ocr_for_transcribing_pdf_slides为什么不用传统的pdf转文本工具呢?LucasSoares发现传统工具往往会产生更多需要时间解决的问题。他曾尝试使用传统的Python包,但遇到了很多问题(例如必须用复杂的正则表达式模式解析最终输出等),因此决定尝试对象检测和OCR来解决它。基本流程可以分解为以下几个步骤:pdf转图片;检测和识别图像中的文本;显示示例输出。基于深度学习的OCRTranscribepdftotextConvertpdftoimageSoares使用的pdf幻灯片来自DavidSilver的ReinforcementLearning(参见下面的pdf幻灯片地址)。使用“pdf2image”包将每张幻灯片转换为png图像格式。示例pdf幻灯片。地址:https://www.davidsilver.uk/wp-content/uploads/2020/03/intro_RL.pdf代码如下:frompdf2imageimportconvert_from_pathfrompdf2image.exceptionsimport(PDFInfoNotInstalledError,PDFPageCountError,PDFSyntaxError)pdf_path="path/to/file/intro_RL_"images=convert_from_path(pdf_path)fori,imageinenumerate(images):fname="image"+str(i)+".png"image.save(fname,"PNG")处理后,将所有pdf幻灯片中的图片转换png格式:检测和识别图像中的文本为了检测和识别png图像中的文本,Soares使用了ocr.pytorch库中的文本检测器。按照说明下载模型并将模型保存在检查点文件夹中。ocr.pytorch库地址:https://github.com/courao/ocr.pytorch代码如下:#adaptedfromthissource:https://github.com/courao/ocr.pytorch%load_extautoreload%autoreload2importosfromocrimportocrimporttimeimportshutilimportnumpyasnpimportpathlibfromPILimportImagefromglobimportglobimportmatplotlib.pyplotaspltimportseabornassnssns.set()importpytesseractdefsingle_pic_proc(image_file):image=np.array(Image.open(image_file).convert('RGB'))result,image_framed=ocr(image)returnresult,image_framedimage_files=glob('./input_images/*.*')result_dir='./output_images_with_boxes/'#Iftheoutputfolderexistswewillremoveitandredoit.ifos.path.exists(result_dir):shutil.rmtree(result_dir)os.mkdir(result_dir)forimage_fileinsorted(image_files):result,image_framed=single_pic_proc(image_file)#detectingandrecognizingthetextfilename=pathfile.Path(图像文件路径)).nameoutput_file=os.path.join(result_dir,image_file.split('/')[-1])txt_file=os.path.join(result_dir,image_file.split('/')[-1].split('.')[0]+'.txt')txt_f=open(txt_file,'w')Image.fromarray(image_framed).save(output_file)forkeyinresult:txt_f.write(result[key][1]+'\n')txt_f.close()设置输入以及output文件夹,然后遍历所有的输入图片(转换成的pdf幻灯片),然后通过single_pic_proc()函数运行OCR模块中的检测和识别模型,最后将输出保存到继承检测的output文件夹(inherit)PytorchCTPN模型,recognition继承PytorchCRNN模型,都存在于OCR模块中。示例输出代码如下:importcv2ascvoutput_dir=pathlib.Path("./output_images_with_boxes")#image=cv.imread(str(np.random.choice(list(output_dir.iterdir()),1)[0]))image=cv.imread(f"{output_dir}/image7.png")size_reshaped=(int(image.shape[1]),int(image.shape[0]))image=cv.resize(image,size_reshaped)简历。imshow("image",image)cv.waitKey(0)cv.destroyAllWindows()下图左边是原始pdf幻灯片,右边是转录后的输出文本。转录后的准确率非常高。文字识别输出如下:filename=f"{output_dir}/image7.txt"withopen(filename,"r")astext:forlineintext.readlines():print(line.strip("\n"))通过以上方法,最终你得到了一个非常强大的工具,用于转录各种文档,从检测和识别手写笔记到检测和识别照片中的随机文本。对于某些文本内容,拥有自己的OCR工具比依赖外部软件转录文档要好得多。