当前位置: 首页 > news >正文

蓝耘Ubantu服务器测试最新 PP-StructureV3 教程

一、服务器配置

二、安装Anaconda3

进入云服务器后删除minconda文件夹

官网: https://repo.anaconda.com/archive/

在里面找到自己系统的安装包,然后右击复制链接安装。

一定要选择Anaconda,因为很多依赖问题用Minconda容易报错。

wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh

进入到存放 Anaconda3-2024.10-1-Linux-x86_64.sh的文件下解压

bash Anaconda3-2024.10-1-Linux-x86_64.sh

创建和激活虚拟环境,建议用python3.10,因为我们用的最新版本的框架,不然会遇到如下报错。

conda create -n ppstructureV3 python=3.10 -y

conda activate ppstructureV3

 这是由 ​​Python 3.8 的类型注解限制​​ 导致的。在Python 3.9之前的版本中,原生类型(如list、dict)不能直接使用下标语法(如list[int]),必须使用typing模块中的泛型类型(如List[int])

三、安装paddlepaddle

参考安装官网:

使用教程 - PaddleOCR 文档

安装 - PaddleOCR 文档

3.1 查看系统最高支持的cuda版本

nvidia-smi

我的系统cuda支持最高版本12.4,cuda可以向下兼容,所以选择11.8版本的,不能选12.6

我们去官网开始使用_飞桨-源于产业实践的开源深度学习平台下载最新的3.0的版本paddlepaddle,一定要下载3.0的才有最新的ppstructureV3

 python -m pip install paddlepaddle-gpu==3.0.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/ 

 

3.2 安装paddleocr最新版(目前是3.0) 

python -m pip install paddleocr  # 默认是最新的

或者从源码安装(默认为开发分支):

python -m pip install "git+https://github.com/PaddlePaddle/PaddleOCR.git" 

 3.3 检测是否安装好相关环境

python -c "import paddle; paddle.utils.run_check()"

PaddlePaddle is installed successfully! Let's start deep learning with PaddlePaddle now. 说明 paddlepaddle-gpu安装成功。

 

四、图片测试 

4.1 一行代码快速测试

paddleocr pp_structurev3 -i https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/pp_structure_v3_demo.png

https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/pp_structure_v3_demo.png

测试图片原图

识别效果:

 

4.2 python角本测试本地的带框表格图片

新建3.py 和 png 文件保存图片

from paddleocr import PPStructureV3

import time  # 新增导入time模块

# 初始化模型(此步骤耗时不计入推理时间)

pipeline = PPStructureV3(device="gpu")

# 开始计时(精确到微秒级)

start_time = time.perf_counter()  # 网页1/网页2/网页5推荐的高精度计时方式

# 执行推理

output = pipeline.predict(r"/root/lanyun-tmp/png/信息.png")

# 结束计时并计算差值

elapsed = time.perf_counter() - start_time  # 网页6提到的精度控制方法

# 打印三位小数秒数(格式化为xxx.xxx秒)

print(f"推理耗时: {elapsed:.3f} 秒")  # 网页6中.3f实现三位小数

# 结果处理

for res in output:

    res.print()

    res.save_to_json(save_path="/root/lanyun-tmp/output")

    res.save_to_markdown(save_path="/root/lanyun-tmp/output")

测试图片:

 

输出结果:

用md工具打开那个文件可以看到,识别的准确度很高,仅仅序号7识别错了,但是印章信息还是不能识别,后续可能要用专门的印章识别工具。 

推理用时:8.48秒 速度很慢,相比ppocr同用文字识别的0.5s

 

资源使用情况:峰值 5 G (可以新开一个终端 pip install nvitop下载一个资源监控包,如何新的终端运行nvitop专门做资源检测终端)

4.3 测试4.1的非洲图片识别效果

4.4 测试公式图片

原图:

测试输出的md格式:

4.5 测试无框的身份证信息图片

测试图片:

输出的md格式:

推理耗时: 6.980 秒

可以看到,输出的内容模糊的还是看不到,但是比ppocr的输出结果好一点,至少输出内容语义没有断开。

五、PDF文件识别

参考官方代码修改得到下面代码

# 导入必要的模块

from pathlib import Path  # 用于处理文件路径

from paddleocr import PPStructureV3  # PaddleOCR的V3版文档结构分析模型

import time  # 新增导入time模块(当前代码中未使用,可能计划用于性能计时)

# 设置输入文件路径和输出目录

input_file = r"/root/lanyun-tmp/png/your_pdf.pdf"  # 需要处理的PDF文件路径

output_path = Path("/root/lanyun-tmp/output_pdf")  # 输出目录的Path对象

# 初始化PPStructureV3文档分析流水线

pipeline = PPStructureV3()

start_time = time.perf_counter()  # 记录推理开始时间

# 对输入文件进行结构化分析,获取包含文本和布局信息的输出结果

output = pipeline.predict(r"/root/lanyun-tmp/png/your_pdf.pdf")

end_time = time.perf_counter()  # 记录推理结束时间

# 打印推理耗时(单位:秒,保留3位小数)

print(f"\n[推理耗时] {end_time - start_time:.3f} 秒\n")

# 初始化存储Markdown内容和图片的列表

markdown_list = []  # 存储各页面的Markdown信息

markdown_images = []  # 存储各页面的图片数据

# 遍历处理每个页面的分析结果

for res in output:

    # 获取当前页面的Markdown格式信息

    md_info = res.markdown

    markdown_list.append(md_info)  # 将Markdown信息添加到列表

    # 提取当前页面的图片数据(如果有的话),并添加到图片列表

    markdown_images.append(md_info.get("markdown_images", {}))

print(markdown_list) # 测试有没有每一页的md信息

# 将多页的Markdown内容合并为完整的文档

# markdown_texts = pipeline.concatenate_markdown_pages(markdown_list)

# 手动合并多页Markdown内容

markdown_texts = "\n\n".join([

    page_res["markdown_text"]

    for page_res in markdown_list

    if page_res.get("markdown_text")

])

# 构建输出Markdown文件路径(保持与原文件同名,后缀改为.md)

mkd_file_path = output_path / f"{Path(input_file).stem}.md"

mkd_file_path.parent.mkdir(parents=True, exist_ok=True)  # 确保输出目录存在

# 将合并后的Markdown内容写入文件

with open(mkd_file_path, "w", encoding="utf-8") as f:

    f.write(markdown_texts)

# 处理并保存文档中的图片

for item in markdown_images:

    if item:  # 检查是否存在图片数据

        for path, image in item.items():  # 遍历图片路径和图片对象

            file_path = output_path / path  # 构建完整图片保存路径

            file_path.parent.mkdir(parents=True, exist_ok=True)  # 创建图片存储目录

            image.save(file_path)  # 保存图片到指定路径

注意 # markdown_texts = pipeline.concatenate_markdown_pages(markdown_list),我们最新版的也会出现下面的报错,应该是移除了这个函数。所以注释掉官方代码,重新写一个。

识别效果:时间8.055秒 

 

资源使用情况:

六、总结

1.  PP-StructureV3 的效果还可以尤其是对版面信息、有框图表格的识别效果。

2. 推理时间较长,后续看看百度的加速推理框架。

3. 对于身份证、营业执照等信息的抽取还是不行、后续看看 PP-Structure的kie模块。

 

http://www.xdnf.cn/news/570925.html

相关文章:

  • linux 查看java的安装路径
  • Java面试问题基础篇
  • Wireshark 抓包工具使用
  • Visual Studio Code插件离线安装指南:从市场获取并手动部署
  • Android Framework学习八:SystemServer及startService原理
  • 鸿蒙开发——9.wrapBuilder与@BuilderParam对比解析
  • Oracle 11g post PSU Oct18 设置ssl连接(使用jks)
  • 拉普拉斯高斯(LoG)滤波器掩模的注意事项
  • 计及可再生能源不确定性的经济优化调度方法
  • AI与IT从业者的关系更似“进化催化剂“而非“职业终结者“
  • 太阳能电池IV测试设备AAA型AMG1.5太阳光模拟器
  • 道可云人工智能每日资讯|浙江省人民政府印发《关于支持人工智能创新发展的若干措施》
  • [特殊字符] 遇见Flask
  • 【HTML-4】HTML段落标签:构建内容结构的基础
  • 递归+反射+注解(动态拼接建表语句)
  • 机动车授权签字人有哪些权利和义务?
  • 【Element UI排序】JavaScript 的表格排序sortable=“custom“和 @sort-change
  • 欢乐熊大话蓝牙知识7:如何用蓝牙芯片实现一个 BLE 传感器节点?
  • SAR ADC 是选择先置位再比较,还是先比较再置位
  • 【聚合MQ管理 第一章】一个项目管理多种MQ 之 ActiveMq
  • Mac安装redis
  • epoll_wait未触发的小Bug
  • adb抓包
  • 元宇宙数字人设计大赛:往届获奖作品赏析
  • 公司OA系统中金格iWebOffice2015智能文档中间件不能用了怎么办?
  • 深入解析C++静态成员变量与函数
  • ABC 354
  • Linux上运行程序加载动态库失败
  • Redis语法大全
  • 【Flutter】创建BMI计算器应用并添加依赖和打包