摆设mineru docker流程以及踩的坑

打印 上一主题 下一主题

主题 1848|帖子 1848|积分 5544

linux摆设mineru docker流程以及踩的坑

1.摆设流程(基本是按照Mineru的web_api docker摆设文档一步步走的)

拉取项目源码

  1. git clone https://github.com/opendatalab/MinerU.git
  2. cd MinerU/projects/web_api
复制代码
在build之前做一些修改工作:
1)修改download_models.py,直接替换
  1. #!/usr/bin/env python
  2. from modelscope import snapshot_download
  3. if __name__ == "__main__":
  4.     mineru_patterns = [
  5.         # "models/Layout/LayoutLMv3/*",
  6.         "models/Layout/YOLO/*",
  7.         "models/MFD/YOLO/*",
  8.         "models/MFR/unimernet_hf_small_2503/*",
  9.         "models/OCR/paddleocr_torch/*",
  10.         # "models/TabRec/TableMaster/*",
  11.         # "models/TabRec/StructEqTable/*",
  12.     ]
  13.     model_dir = snapshot_download(
  14.         "opendatalab/PDF-Extract-Kit-1.0",
  15.         allow_patterns=mineru_patterns,
  16.         local_dir="/opt/",
  17.     )
  18.     layoutreader_pattern = [
  19.         "*.json",
  20.         "*.safetensors",
  21.     ]
  22.     layoutreader_model_dir = snapshot_download(
  23.         "ppaanngggg/layoutreader",
  24.         allow_patterns=layoutreader_pattern,
  25.         local_dir="/opt/layoutreader/",
  26.     )
  27.     model_dir = model_dir + "/models"
  28.     print(f"model_dir is: {model_dir}")
  29.     print(f"layoutreader_model_dir is: {layoutreader_model_dir}")
复制代码
2)在requirements.txt 中加一行modelscope,用于模子下载。
此处有一个坑,很有可能你的layoutreader模子下不完,推测缘故原由是比力大,几百M,或者别的缘故原由导致docker内layoutreader文件夹是空的,这时候可以在docker外运行download_models.py,注意设置模子保存位置,改两行代码,再通过mv命令移动到docker内的/opt/layoutreader/目次下(这是后话)
  1. from modelscope import snapshot_download
  2. layoutreader_model_dir = snapshot_download('ppaanngggg/layoutreader', cache_dir = "your model path")
复制代码
3)如果想在docker外方便查看mineru的结果,在app.py中的output的路径进行个人的设置:
  1. async def file_parse(
  2.     file: UploadFile = None,
  3.     file_path: str = None,
  4.     parse_method: str = "auto",
  5.     is_json_md_dump: bool = True,
  6.     output_dir: str = "workspace/MinerU/projects/web_api/output",# 这里进行修改
  7.     return_layout: bool = True,
  8.     return_info: bool = True,
  9.     return_content_list: bool = True,
  10.     return_images: bool = True,
  11. ):
复制代码
4)在build这一步,如果docker没有更改过配置源,90%会报错,这里给一个临时的解决办法,在Dockerfile里第一行改成(这里以我当时拉取的项目版本为例)
  1. FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/python:3.10-slim-bookworm AS base
复制代码
5)完成以上步调就可以运行命令:
  1. docker build -t mineru-api .
复制代码
接下来要做的就是等待,如果中心报错,80%都是由于docker源的题目,解决不掉就诚实配源吧
测试摆设的api

在docker摆设完成后,实行docker ps 命令,结果如下则证明摆设成功。

打开http://localhost:8000/提示{“detail”:“Not Found”},别急,后边加个docs,返回页面:
   http://localhost:8000/docs
  

说明大功告成,可以点开手动上传测试文件进行测试,运行完后可以在前面设置的output文件夹下看到结果,结果结构如下:

一般来说都是对.md文件进行后续处理处罚
接下来给一段长途调用mineru_api的代码:
  1. import requests
  2. import json
  3. # API配置
  4. url = "http://localhost:8888/file_parse"
  5. params = {
  6.     "parse_method": "auto",
  7.     "is_json_md_dump": "true",
  8.     "return_layout": "true",
  9.     "return_info": "true",
  10.     "return_content_list": "true",
  11.     "return_images": "true"
  12. }
  13. # 文件配置
  14. file_path = "/2.pdf"  # 确保文件存在当前目录
  15. headers = {
  16.     "accept": "application/json"
  17. }
  18. try:
  19.     with open(file_path, "rb") as f:
  20.         files = {
  21.             "file": (file_path, f, "application/pdf")
  22.         }
  23.         response = requests.post(
  24.             url,
  25.             params=params,
  26.             headers=headers,
  27.             files=files
  28.         )
  29.     # 处理响应
  30.     print(f"Status Code: {response.status_code}")
  31.    
  32.     if response.status_code == 200:
  33.         result = response.json()
  34.         # 保存结果到文件
  35.         # with open("api_response.json", "w") as f:
  36.         #     json.dump(result, f, indent=2)
  37.         md_content = result.get("md_content", "")
  38.         with open("md_content_.txt", "w", encoding="utf-8") as f:
  39.             f.write(md_content)
  40.             print("MD内容已保存到 md_content.txt")
  41.         # 打印关键信息
  42.         print(f"MD内容长度: {len(result.get('md_content', ''))} 字符")
  43.         print(f"解析图片数量: {len(result.get('images', {}))}")
  44.         print(f"内容列表条目: {len(result.get('content_list', []))}")
  45.     else:
  46.         print(f"请求失败: {response.text}")
  47. except FileNotFoundError:
  48.     print(f"错误:文件 {file_path} 不存在")
  49. except Exception as e:
  50.     print(f"发生异常: {str(e)}")
复制代码
有bug接待评论区探讨哈


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

反转基因福娃

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表