【源码拾贝】docext的使用

发布于:2025-06-23 ⋅ 阅读:(13) ⋅ 点赞:(0)

源代码:https://github.com/NanoNets/docext

基本信息

  1. VLM 模型:Nanonets-OCR-s,基于 qwen2.5VL-3B 训练
  2. 使用 gradio 构建交互页面以及请求接口
  3. 主要功能:关键信息提取、pdf 页面转 markdown
  4. python>=3.11

环境准备(基于 vllm)

  1. 模型,Nanonets-OCR-s 模型可以 hugging-face、huggingface 镜像、modelscope(推荐)上下载,地址分别是:https://huggingface.co/nanonets/Nanonets-OCR-shttps://hf-mirror.com/nanonets/Nanonets-OCR-shttps://modelscope.cn/models/nanonets/Nanonets-OCR-s

  2. 推理环境,需要使用 nvidia 的显卡推理环境,显存是越大越好,根据 qwen2.5vl 官方(https://github.com/QwenLM/Qwen2.5-VL),即:

至少有(5.75*1.2=6.9G),但如果想支持同时推理更多的图片则需要更多的显存。

  1. docext 安装:pip install docext,也可以源码安装

主要依赖内容

  1. Gradio
  2. VLLM
  3. LLM Prompt

启动服务

例如:

python -m docext.app.app --model_name hosted_vllm/nanonets/Nanonets-OCR-s

服务提供的主要参数有:

  1. vlm_server_port,vllm 启动的模型使用的端口, 默认使用 8000

  2. vlm_server_host,vllm/OLLAM 服务使用的 host,默认:127.0.0.1

  3. model_name,默认是 hosted_vllm/Qwen/Qwen2.5-VL-7B-Instruct-AWQ,ollama/开头的话使用的是 OLLAMA 模型,hosted_vllm 开头的话使用 vllm 启动服务

  4. ui_port,gradio 服务启动使用的端口,默认是 7860

  5. max_model_len,多模态大模型支持的最大长度,默认是 15000,如果显存比较小的话需要调小,具体可参考 vllm 参数

  6. gpu_memory_utilization,gpu 使用率,默认是 0.9,具体参数可以参考 vllm 参数

  7. max_num_imgs,一次 prompt 处理传入的最多图片数量,默认是 5

  8. vllm_start_timeout,vllm 服务启动限制时长(s),默认是 300

  9. share,是否开发 ui 服务到公网,gradio 相关参数,默认是 false

  10. max_img_size,处理图片的最大尺寸,默认是 1024

  11. concurrency_limit,接口并发请求限制,默认 1

  12. max_gen_tokens, 最大的生成 token 数量,默认是 10000
    服务启动后,需要使用 username/password:admin/admin 访问和请求。

主要功能

自定义的信息提取

这部分的信息提取主要使用的是开源的大模型,主要是 qwen2.5vl 系列模型,模型参数量源码推荐从 7B 开始,例如:Qwen/Qwen2.5-VL-7B-Instruct-AWQ(默认)。

主要流程

  1. 定义需要提取的字段以及字段的描述(字段描述是可选项);

  2. 上传文档(可以是一张图片也可以是多页面文档的多张图片)

  3. 使用 PIL.Image.resize,将图片统一处理成大小为(width x heigth)max_img_size x max_img_size 的尺寸,然后使用:

with open(image_path, "rb") as image_file:
    return base64.b64encode(image_file.read()).decode("utf-8")
  1. 使用两个线程分别对 field、table 类型的字段分别提取:
  • a.字段类型数据提取,

    • (1) 构建字段提取 prompt(message):Extract the following fields from the documents:\n 字段名:描述\nDocuments:\n 图片内容的 base64(可以多张)\nReturn a JSON with the following format:\n {“字段名”:“…”,…}. If a field is not found, return ‘’ for that field. Do not give any explanation.

    • (2) 调用大模型获取提取的字段数据 response

      <

网站公告

今日签到

点亮在社区的每一天
去签到