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

神经网络抽取PDF表格工具来了,支持图片,还可以免费嫖谷歌GPU资源

时间:2023-03-19 23:06:01 科技观察

本文经AI新媒体量子位授权转载(公众号ID:QbitAI),转载请联系转载来源。“表哥们”还在为海量PDF文件中的表格发愁吗?百度一下,网上有很多提取PDF表格的工具,但是都只支持文本格式的PDF。但是扫描生成的图像表呢?别担心,一个使用深度神经网络识别和提取表格的开源工具可以帮助你。兼容图片,精度高,不占用本地计算资源,这样实用的工具值得拥有。测试示例如果在输入的PDF文件中检测到表格,模型会在boundingbox中标记表格边框:然后,表格数据会被转换成Panda数据框,方便后续处理:Howisit,isitvery实际的?如何使用这个工具?用手势详细讲解神经网络算法又不占用本地计算资源?是的,你没有听错,这个工具的所有代码都可以在GoogleColab上运行。也就是说,无需本地安装,即可使用Colab云资源完成训练和推理。本工具使用的深度神经网络是Keras-RetinaNet。首先需要在Colab上安装Keras-RetinaNet,一行代码即可完成:gitclonehttps://github.com/fizyr/keras-retinanet同时需要安装必要的库:pipinstall。pythonsetup.pybuild_ext—inplacetrainingKeras-RetinaNetrecognitiontable首先,构建一个用于训练的数据库。这里使用Colab工具PDF2Img,将PDF文件转为JPG格式,用于算法学习。然后将转换后的图片保存在Images文件夹中。接下来,您需要手动标记这些训练数据。这里推荐使用在线标注工具makesense.ai。将XML注释文件保存在annotations文件夹中,并创建用于训练和测试的PDF文件列表,将列表导入到train.txt和test.txt中。接下来,克隆Github项目https://github.com/ferrygun/PDFTableExtract,并安装beautifulsoup。运行以下命令将PASCALVOC格式转换为Keras-RetinaNet要求的格式:pythonbuild_logos.py运行上述命令后,您将得到retinanet_classes.csv、retinanet_test.csv和retinanet_train.csv。在retinanet_classses.csv中,由于只识别PDF文档中的表格,所以只有一个class,即class0。如果在标注过程中添加header、footer等标签,则可以相应得到多个class。完整的文件列表和文件夹结构:然后,将retinanet_classes.csv、retinanet_test.csv、retinanet_train.csv、train.txt和test.txt导入到keras-retinanet的根文件夹中:接下来,运行ColabTrainOCR,您可以调整数量根据要训练的JPG文件的数量训练epochs。训练完成后,你会得到权重文件output.h5,下载此文件并保存到本地主机。该文件稍后将用于运行测试。这里需要注意的一点是,在Colab中,文件被上传到Git并被Git克隆。运行测试在运行测试之前,您还需要安装必要的库来处理PDF文件。PyPDF2是一个能够提取文档信息、裁剪页面等功能的python工具库,使用以下命令安装该库:pipinstallPyPDF2Camelot是一个专门用于解析PDF页表的python库。使用以下命令安装此库:pipinstallcamelot-py[cv]PDF2IMG是一个将Python转换为PILImage对象的python库。使用以下命令安装此库:pipinstallpdf2imag在运行预测之前,您需要使用从训练中获得的权重文件output.h5加载模型,并从retinanet_classes.csv中定义标签类0。model_path='output.h5'model=models.load_model(model_path,backbone_name='resnet50')labels='retinanet_classes.csv'LABELS=open(labels).read().strip().split('\n')LABELS={int(L.split(',')[1]):L.sp??lit(',')[0]forLinLABELS}print(LABELS){0:'tabel'}接下来来运行测试importnumpyasnpimportcv2importmatplotlib.pyplotaspltimage_path=imgfname#image=cv2.imread(image_path)image=read_image_bgr(image_path)image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)output=image.copy()output=cv2.cvtColor(output,cv2.COLOR_BGR2RGB)print(输出.shape)#row(height)xcolumn(width)xcolor(3)image=preprocess_image(image)(image,scale)=resize_image(image)image=np.expand_dims(image,axis=0)#detectobjectsintheinputimageandcorrectfortheimagescale(boxes,scores),labels)=model.predict_on_batch(image)boxes/=scaleconfidence=0.2fromgoogle.colab.patchesimportcv2_imshowimportmatplotlib.pyplotaspltlabel_out=[]result=""#loopoverthedetectionsfor(box,score,label)inzip(boxes[0],scores[0],labels[0]):#filteroutweakdetectionsifscoreleft-topand(x2,y2)->right-bottominPDFcoordinatespace#print(bbox_camelot)interesting_areas.append(bbox_camelot)print(interesting_areas)output_camelot=camelot.read_pdf(filepath=pdf_file,pages=str(pg),flavor="stream",table_areas=interesting_areas)output_camelot[0].df表数据可以转换成Panda数据框,方便后续处理:图片怎么办对于扫描图片格式的PDF表单,可以使用Ocrmypdf包将图片格式PDF转为文本格式。Ocrmypdf是一个python包,可将基于图像的pdf转换为基于文本的pdf。通过以下命令行安装ocrmypdf,可用于macOS和Linux:通过以下命令调用brewinstallocrmypdf:ocrmypdfinput_file.pdfoutput_file.pdf之后,您可以按照上述方法提取表格。这款兼容图片、可以免费嫖谷歌GPU的PDF表格工具怎么样?传送门项目地址:https://github.com/ferrygun/PDFTableExtract在线标注工具:https://www.makesense.ai/