偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

MinerU 2.0部署教程!

人工智能
MinerU 2帶來了諸多重要更新,主要涵蓋架構(gòu)、性能、體驗(yàn)、模型、兼容性等方面。

1、MinerU簡介

MinerU 2帶來了諸多重要更新,主要涵蓋架構(gòu)、性能、體驗(yàn)、模型、兼容性等方面。

在架構(gòu)上,深度重構(gòu)代碼組織與交互方式,去除對pymupdf的依賴,無需手動編輯JSON配置文件,新增模型自動下載與更新機(jī)制。性能優(yōu)化顯著,大幅提升特定分辨率文檔的預(yù)處理速度、pipeline后端批量處理少量頁數(shù)文檔時(shí)的后處理速度以及l(fā)ayout分析速度,在滿足一定配置的設(shè)備上整體解析速度提升超50%。

體驗(yàn)上,內(nèi)置fastapi servicegradio webui,適配sglang 0.4.8版本降低顯存要求,支持參數(shù)透傳和基于配置文件的功能擴(kuò)展。集成了小參數(shù)量、高性能多模態(tài)文檔解析模型,解析精度超越傳統(tǒng)72B級別的VLM,單卡NVIDIA 4090上推理速度峰值吞吐量超10,000 token/s。

此外,還解決了一些兼容性問題,支持Python 3.13等,同時(shí)優(yōu)化了多方面的解析效果和在線demo功能。

https://gitee.com/myhloli/MinerU

2、MinerU私有化部署

軟硬件環(huán)境準(zhǔn)備

在開始安裝之前,需要確保你的系統(tǒng)滿足以下軟硬件要求:

解析后端

pipeline

vlm-transformers

vlm-sglang

操作系統(tǒng)

Linux/Windows/macOS

Linux/ Windows

Linux/ Windows (via WSL2)

CPU 推理支持

?

?

?

GPU 要求

Turing 及以后架構(gòu),6G 顯存以上或 Apple Silicon

Turing 及以后架構(gòu),8G 顯存以上

Turing 及以后架構(gòu),8G 顯存以上

內(nèi)存要求

最低 16G 以上,推薦 32G 以上

最低 16G 以上,推薦 32G 以上

最低 16G 以上,推薦 32G 以上

磁盤空間要求

20G 以上,推薦使用 SSD

20G 以上,推薦使用 SSD

20G 以上,推薦使用 SSD

Python 版本

3.10 - 3.13

3.10 - 3.13

3.10 - 3.13

安裝依賴包

conda create -n mineru pythnotallow=3.10 
conda activate mineru
pip install uv -i https://mirrors.aliyun.com/pypi/simple
uv pip install -U "mineru[core]" -i https://mirrors.aliyun.com/pypi/simple

提示mineru[core] 包含除 sglang 加速外的所有核心功能,兼容 Windows / Linux / macOS 系統(tǒng),適合絕大多數(shù)用戶。如果你有使用 sglang 加速 VLM 模型推理,或是在邊緣設(shè)備安裝輕量版 client 端等需求,可以參考文檔擴(kuò)展模塊安裝指南。

使用本地模型

模型權(quán)重下載

方法一:從 ModelScope下載模型

將MinerU代碼clone到本地,使用python腳本 從ModelScope下載模型文件

python mineru/cli/models_download.py
方法二:使用交互式命令行工具選擇模型下載:
mineru-models-download
詳細(xì)參考如何下載模型文件2.配置文件
詳細(xì)參考如何下載模型文件
2.配置文件

windows的用戶目錄為 "C:\Users\用戶名", linux用戶目錄為 "/home/用戶名", macOS用戶目錄為 "/Users/用戶名"

  • 下載完成后,模型路徑會在當(dāng)前終端窗口輸出,并自動寫入用戶目錄下的 mineru.json
  • 您也可以通過將配置模板文件復(fù)制到用戶目錄下并重命名為 mineru.json 來創(chuàng)建配置文件。
  • 模型下載到本地后,您可以自由移動模型文件夾到其他位置,同時(shí)需要在 mineru.json 中更新模型路徑。
  • 如您將模型文件夾部署到其他服務(wù)器上,請確保將 mineru.json文件一同移動到新設(shè)備的用戶目錄中并正確配置模型路徑。
  • 如您需要更新模型文件,可以再次運(yùn)行 mineru-models-download 命令,模型更新暫不支持自定義路徑,如您沒有移動本地模型文件夾,模型文件會增量更新;如您移動了模型文件夾,模型文件會重新下載到默認(rèn)位置并更新mineru.json。

3、解析代碼

process_pdf是核心解析函數(shù),主要功能包括:

  • 自動識別 PDF 類型(普通文本 PDF 或掃描版 PDF),支持多種文件格式,包括 .pdf.png、.jpeg.jpg 等,可自動將圖片文件轉(zhuǎn)換為 PDF 進(jìn)行處理。
  • 提取文本內(nèi)容和圖片資源,能夠根據(jù)設(shè)置的起始和結(jié)束頁碼進(jìn)行精準(zhǔn)解析,支持多語言識別,可提高 OCR 識別的準(zhǔn)確性。
  • 生成 Markdown 格式的輸出,支持 LaTeX 公式和表格的解析與輸出,能夠根據(jù)不同的后端和模式進(jìn)行靈活處理。
  • 可選生成可視化分析結(jié)果,提供布局和文本塊的可視化分析結(jié)果,方便用戶進(jìn)行調(diào)試和檢查。

參數(shù)

類型

默認(rèn)值

描述

pdf_file_name

str

要解析的 PDF 文件路徑,支持 .pdf、.png.jpeg、.jpg 等格式

output_dir

str

"output"

輸出文件的主目錄,程序會在該目錄下為每個(gè)處理的文件創(chuàng)建單獨(dú)的子目錄

image_subdir

str

"images"

存放圖片的子目錄名稱,位于每個(gè)文件的子目錄下

simple_output

bool

True

是否使用簡單輸出模式(True 時(shí)只輸出 Markdown 和內(nèi)容列表),F(xiàn)alse 時(shí)輸出所有解析結(jié)果,包括可視化分析結(jié)果、中間 JSON 文件和模型輸出文件

backend

str

"pipeline"

解析 PDF 的后端,可選值包括 pipelinevlm-transformers、vlm-sglang-enginevlm-sglang-client。pipeline 更通用,vlm-xxx 系列則提供了更快的處理速度

method

str

"auto"

解析 PDF 的方法,可選值包括 auto、txt、ocr。auto 會自動根據(jù)文件類型確定解析方法,txt 使用文本提取方法,ocr 使用 OCR 方法處理圖像型 PDF。僅適用于 pipeline 后端

lang

str

"ch"

輸入 PDF 中的語言,可選值包括 chch_server、ch_lite、enkorean、japanchinese_cht、tate、ka 等。輸入已知的語言可提高 OCR 識別的準(zhǔn)確性,僅適用于 pipeline 后端

server_url

str

None

當(dāng)后端為 vlm-sglang-client 時(shí)需要指定的服務(wù)器 URL,例如 http://127.0.0.1:30000

start_page_id

int

0

解析的起始頁碼,從 0 開始計(jì)數(shù)

end_page_id

int

None

解析的結(jié)束頁碼,從 0 開始計(jì)數(shù),默認(rèn)為 None,表示解析到文檔末尾

輸出文件結(jié)構(gòu):

output/
  ├── [PDF文件名]/
  │   ├── images/            # 存放提取的圖片
  │   ├── [PDF文件名].md     # 生成的Markdown文件
  │   ├── [PDF文件名]_origin.pdf  # 原始 PDF 文件(完整模式)
  │   ├── [PDF文件名]_content_list.json  # 內(nèi)容列表JSON文件
  │   ├── [PDF文件名]_model.pdf   # 模型可視化結(jié)果(完整模式)
  │   ├── [PDF文件名]_middle.pdf   # 模型中間處理結(jié)果(完整模式)
  │   ├── [PDF文件名]_layout.pdf  # 布局可視化結(jié)果(完整模式)
  │   └── [PDF文件名]_spans.pdf   # 文本塊可視化結(jié)果(完整模式)
import os
os.environ['MINERU_MODEL_SOURCE'] = "local"
from pathlib import Path
from loguru import logger
from mineru.cli.common import convert_pdf_bytes_to_bytes_by_pypdfium2, prepare_env, read_fn
from mineru.data.data_reader_writer import FileBasedDataWriter
from mineru.utils.draw_bbox import draw_layout_bbox, draw_span_bbox
from mineru.utils.enum_class import MakeMode
from mineru.backend.vlm.vlm_analyze import doc_analyze as vlm_doc_analyze
from mineru.backend.pipeline.pipeline_analyze import doc_analyze as pipeline_doc_analyze
from mineru.backend.pipeline.pipeline_middle_json_mkcontent import union_make as pipeline_union_make
from mineru.backend.pipeline.model_json_to_middle_json import result_to_middle_json as pipeline_result_to_middle_json
from mineru.backend.vlm.vlm_middle_json_mkcontent import union_make as vlm_union_make
def process_pdf(pdf_file_name, output_dir="output", image_subdir="images", simple_output=True, backend="pipeline", method="auto", lang="ch", server_url=None, start_page_id=0, end_page_id=None):
    """
    處理PDF文件,將其轉(zhuǎn)換為Markdown格式并保存相關(guān)資源
    :param pdf_file_name: PDF文件名
    :param output_dir: 輸出目錄,默認(rèn)為'output'
    :param image_subdir: 圖片子目錄名,默認(rèn)為'images'
    :param simple_output: 是否使用簡單輸出模式,默認(rèn)為False
    :param backend: 解析PDF的后端,默認(rèn)為'pipeline'
    :param method: 解析PDF的方法,默認(rèn)為'auto'
    :param lang: 輸入PDF中的語言,默認(rèn)為'ch'
    :param server_url: 當(dāng)后端為`vlm-sglang-client`時(shí)需要指定的服務(wù)器URL
    :param start_page_id: 解析的起始頁碼,默認(rèn)為0
    :param end_page_id: 解析的結(jié)束頁碼,默認(rèn)為None
    """
    # 獲取不帶后綴的文件名
    name_without_suff = os.path.splitext(os.path.basename(pdf_file_name))[0]
    # 構(gòu)建圖片目錄和markdown目錄的路徑
    local_image_dir = os.path.join(output_dir, output_subdir, image_subdir)
    local_md_dir = output_dir
    # 創(chuàng)建必要的目錄
    os.makedirs(local_image_dir, exist_ok=True)
    os.makedirs(local_md_dir, exist_ok=True)
    # 創(chuàng)建文件寫入器
    image_writer, md_writer = FileBasedDataWriter(local_image_dir), FileBasedDataWriter(local_md_dir)
    # 讀取PDF文件
    pdf_bytes = read_fn(pdf_file_name)
    pdf_file_names = [name_without_suff]
    pdf_bytes_list = [pdf_bytes]
    p_lang_list = [lang]
    if backend == "pipeline":
        new_pdf_bytes = convert_pdf_bytes_to_bytes_by_pypdfium2(pdf_bytes, start_page_id, end_page_id)
        pdf_bytes_list[0] = new_pdf_bytes
        infer_results, all_image_lists, all_pdf_docs, lang_list, ocr_enabled_list = pipeline_doc_analyze(pdf_bytes_list, p_lang_list, parse_method=method, formula_enable=True, table_enable=True)
        model_list = infer_results[0]
        model_json = model_list.copy()
        images_list = all_image_lists[0]
        pdf_doc = all_pdf_docs[0]
        _lang = lang_list[0]
        _ocr_enable = ocr_enabled_list[0]
        middle_json = pipeline_result_to_middle_json(model_list, images_list, pdf_doc, image_writer, _lang, _ocr_enable, True)
        pdf_info = middle_json["pdf_info"]
        pdf_bytes = pdf_bytes_list[0]
        # 生成Markdown文件和內(nèi)容列表(無論哪種模式都需要)
        md_content_str = pipeline_union_make(pdf_info, MakeMode.MM_MD, image_dir)
        md_writer.write_string(
            f"{name_without_suff}.md",
            md_content_str,
        )
        content_list = pipeline_union_make(pdf_info, MakeMode.CONTENT_LIST, image_dir)
        md_writer.write_string(
            f"{name_without_suff}_content_list.json",
            str(content_list),
        )


        # 僅在完整輸出模式下生成額外文件
        if not simple_output:
            # 生成布局可視化文件
            draw_layout_bbox(pdf_info, pdf_bytes, local_md_dir, f"{name_without_suff}_layout.pdf")


            # 生成文本塊可視化文件
            draw_span_bbox(pdf_info, pdf_bytes, local_md_dir, f"{name_without_suff}_span.pdf")


            # 保存原始PDF文件
            md_writer.write(
                f"{name_without_suff}_origin.pdf",
                pdf_bytes,
            )


            # 保存中間JSON和模型輸出
            md_writer.write_string(
                f"{name_without_suff}_middle.json",
                str(middle_json),
            )
            md_writer.write_string(
                f"{name_without_suff}_model.json",
                str(model_json),
            )


        logger.info(f"local output dir is {local_md_dir}")
    else:
        if backend.startswith("vlm-"):
            backend = backend[4:]
        f_draw_span_bbox = False
        parse_method = "vlm"
        pdf_bytes = convert_pdf_bytes_to_bytes_by_pypdfium2(pdf_bytes, start_page_id, end_page_id)
        middle_json, infer_result = vlm_doc_analyze(pdf_bytes, image_writer=image_writer, backend=backend, server_url=server_url)
        pdf_info = middle_json["pdf_info"]
        if not simple_output:
            if True:
                draw_layout_bbox(pdf_info, pdf_bytes, local_md_dir, f"{name_without_suff}_layout.pdf")
            if f_draw_span_bbox:
                draw_span_bbox(pdf_info, pdf_bytes, local_md_dir, f"{name_without_suff}_span.pdf")
            if True:
                md_writer.write(
                    f"{name_without_suff}_origin.pdf",
                    pdf_bytes,
                )
        image_dir = str(os.path.basename(local_image_dir))
        if simple_output:
            # 簡單輸出模式:只輸出markdown和內(nèi)容列表
            md_content_str = vlm_union_make(pdf_info, MakeMode.MM_MD, image_dir)
            md_writer.write_string(
                f"{name_without_suff}.md",
                md_content_str,
            )
            content_list = vlm_union_make(pdf_info, MakeMode.CONTENT_LIST, image_dir)
            md_writer.write_string(
                f"{name_without_suff}_content_list.json",
                str(content_list),
            )
        else:
            # 完整輸出模式:輸出所有內(nèi)容
            md_content_str = vlm_union_make(pdf_info, MakeMode.MM_MD, image_dir)
            md_writer.write_string(
                f"{name_without_suff}.md",
                md_content_str,
            )
            content_list = vlm_union_make(pdf_info, MakeMode.CONTENT_LIST, image_dir)
            md_writer.write_string(
                f"{name_without_suff}_content_list.json",
                str(content_list),
            )
            md_writer.write_string(
                f"{name_without_suff}_middle.json",
                str(middle_json),
            )
            model_output = ("\n" + "-" * 50 + "\n").join(infer_result)
            md_writer.write_string(
                f"{name_without_suff}_model_output.txt",
                model_output,
            )
        logger.info(f"local output dir is {local_md_dir}")
    # 構(gòu)建markdown文件的完整路徑
    md_file_path = os.path.join(os.getcwd(), local_md_dir, f"{name_without_suff}.md")
    abs_md_file_path = os.path.abspath(md_file_path)
    return abs_md_file_path
if __name__ == "__main__":
    # 指定要處理的PDF文件名
    pdf_file_name = "/home/MinerU/demo/pdfs/demo1.pdf"
    # 處理PDF文件并獲取生成的markdown文件路徑
    md_file_path = process_pdf(pdf_file_name, output_dir="/home/MinerU/demo/output", simple_output=False, backend="pipeline")
    # 打印生成的markdown文件路徑
    print(md_file_path)

4、API封裝

from flask import Flask, request, send_file, jsonify
import os
os.environ['MINERU_MODEL_SOURCE'] = "local"
import shutil
import zipfile
from scripts.process_pdf import process_pdf
from pathlib import Path
from mineru.cli.common import read_fn, pdf_suffixes, image_suffixes
app = Flask(__name__)
def create_zip_from_directory(directory_path, zip_file_path):
    with zipfile.ZipFile(zip_file_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
        for root, dirs, files in os.walk(directory_path):
            for file in files:
                file_path = os.path.join(root, file)
                arcname = os.path.relpath(file_path, directory_path)
                zipf.write(file_path, arcname)
@app.route('/process_file', methods=['POST'])
def process_file_api():
    # 檢查請求中是否包含文件
    if 'file' not in request.files:
        return jsonify({'error': 'No file part'}), 400
    file = request.files['file']
    if file.filename == '':
        return jsonify({'error': 'No selected file'}), 400
    file_path = Path(file.filename)
    # 檢查文件類型是否支持
    if file_path.suffix.lower() not in pdf_suffixes + image_suffixes:
        return jsonify({'error': f"Unsupported file type: {file_path.suffix}"}), 400
    # 獲取文件名(不含擴(kuò)展名)用于創(chuàng)建子文件夾
    file_stem = file_path.stem


    # 創(chuàng)建以文件名命名的臨時(shí)子文件夾
    temp_subdir = os.path.join('temp', file_stem)
    os.makedirs(temp_subdir, exist_ok=True)


    # 保存上傳的文件到臨時(shí)子文件夾
    input_file_path = os.path.join(temp_subdir, file.filename)
    file.save(input_file_path)
    try:
        # 讀取文件內(nèi)容
        pdf_bytes = read_fn(input_file_path)
        # 僅當(dāng)輸入不是PDF時(shí),保存轉(zhuǎn)換后的PDF
        temp_pdf_path = None
        if file_path.suffix.lower() not in pdf_suffixes:
            temp_pdf_path = os.path.join(temp_subdir, f"{file_stem}.pdf")
            with open(temp_pdf_path, 'wb') as f:
                f.write(pdf_bytes)
        else:
            # 輸入是PDF,直接使用原文件路徑
            temp_pdf_path = input_file_path
        # 處理文件
        markdown_file_path = process_pdf(
            temp_pdf_path,
            output_dir=temp_subdir,
        )
        # 直接在temp_subdir下創(chuàng)建ZIP文件
        name_without_suff = os.path.splitext(os.path.basename(input_file_path))[0]
        zip_file_path = os.path.join(temp_subdir, f"{name_without_suff}.zip")
        create_zip_from_directory(temp_subdir, zip_file_path)
        # 發(fā)送ZIP文件作為響應(yīng)
        return send_file(zip_file_path, as_attachment=True)
    except Exception as e:
        return jsonify({'error': str(e)}), 500
    finally:
        # 僅清理ZIP文件,保留其他臨時(shí)文件
        if os.path.exists(zip_file_path):
            os.remove(zip_file_path)
if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=6601)

API文檔

1)API 端點(diǎn)  

  • URL: http://localhost:6601/process_file
  • 方法: POST
  • 內(nèi)容類型: multipart/form-data

2)請求參數(shù)  

參數(shù)

類型

描述

file

文件

要解析的文件,支持 .pdf、.png.jpeg、.jpg 等格式

output_dir

字符串

輸出目錄,默認(rèn)為 "output"

image_subdir

字符串

圖片子目錄,默認(rèn)為 "images"

simple_output

布爾值

是否使用簡單輸出,默認(rèn)為 False

backend

字符串

解析 PDF 的后端,默認(rèn)為 "pipeline"

method

字符串

解析 PDF 的方法,默認(rèn)為 "auto"

lang

字符串

文檔語言,默認(rèn)為 "ch"

server_url

字符串

服務(wù)器 URL,默認(rèn)為 None

start_page_id

整數(shù)

開始解析的頁碼,默認(rèn)為 0

end_page_id

整數(shù)

結(jié)束解析的頁碼,默認(rèn)為 None

3)響應(yīng)  

  • 成功: 返回包含所有解析結(jié)果的 ZIP 文件
  • 失敗: 返回 JSON 格式的錯(cuò)誤信息

4)狀態(tài)碼  

狀態(tài)碼

描述

200

成功處理并返回 ZIP 文件

400

請求參數(shù)錯(cuò)誤,如未提供文件、文件類型不支持等

500

服務(wù)器內(nèi)部錯(cuò)誤

5、調(diào)用示例代碼

最后提供了三種調(diào)用示例,可以根據(jù)需要選擇使用:

import requests
import os
import zipfile
import io
def parse_pdf_api_to_path(pdf_file_path, output_dir):
    url = "http://localhost:6601/process_pdf"
    # 確保輸出目錄存在
    os.makedirs(output_dir, exist_ok=True)
    # 獲取 PDF 文件的基礎(chǔ)名稱(不帶擴(kuò)展名)
    base_filename = os.path.splitext(os.path.basename(pdf_file_path))[0]
    with open(pdf_file_path, 'rb') as pdf_file:
        files = {'pdf_file': pdf_file}
        response = requests.post(url, files=files)
    if response.status_code == 200:
        # 保存返回的 zip 文件到指定目錄,使用與 PDF 相同的基礎(chǔ)文件名
        output_zip_path = os.path.join(output_dir, f'{base_filename}.zip')
        with open(output_zip_path, 'wb') as f:
            f.write(response.content)
        print(f"Test passed: Received zip file and saved to {output_zip_path}.")
    else:
        print(f"Test failed: {response.status_code} - {response.json()}")
def parse_pdf_api_to_content(pdf_file_path):
    url = "http://localhost:6601/process_pdf"
    # 獲取 PDF 文件的基礎(chǔ)名稱(不帶擴(kuò)展名)
    base_filename = os.path.splitext(os.path.basename(pdf_file_path))[0]
    with open(pdf_file_path, 'rb') as pdf_file:
        files = {'pdf_file': pdf_file}
        response = requests.post(url, files=files)
    if response.status_code == 200:
        # 返回壓縮包內(nèi)容
        print(f"Request successful: Received zip file for {base_filename}.")
        return response.content
    else:
        error_message = f"Request failed: {response.status_code} - {response.json()}"
        print(error_message)
        raise Exception(error_message)
def save_zip_content_to_directory(zip_content, output_dir):
    # 確保輸出目錄存在
    os.makedirs(output_dir, exist_ok=True)
    # 使用 zipfile 模塊解壓縮內(nèi)容
    with zipfile.ZipFile(io.BytesIO(zip_content)) as z:
        z.extractall(output_dir)
    print(f"Files extracted to {output_dir}")
def save_zip_and_content_to_directory(zip_content, output_dir, zip_filename):
    # 確保輸出目錄存在
    os.makedirs(output_dir, exist_ok=True)
    # 保存壓縮包到指定目錄
    zip_path = os.path.join(output_dir, zip_filename)
    with open(zip_path, 'wb') as f:
        f.write(zip_content)
    print(f"Zip file saved to {zip_path}")
    # 使用 zipfile 模塊解壓縮內(nèi)容
    with zipfile.ZipFile(io.BytesIO(zip_content)) as z:
        z.extractall(output_dir)
    print(f"Files extracted to {output_dir}")
if __name__ == "__main__":
    pdf_file_path = "/path/to/your.pdf"
    output_unzip_dir = "/path/to/output/dir"
    try:
        # 獲取壓縮包內(nèi)容
        zip_content = parse_pdf_api_to_content(pdf_file_path)
        # 定義壓縮包文件名
        zip_filename = os.path.splitext(os.path.basename(pdf_file_path))[0] + ".zip"
        # 解壓并保存到指定目錄
        # save_zip_content_to_directory(zip_content, output_unzip_dir)
        # 保存壓縮包到指定目錄并解壓
        save_zip_and_content_to_directory(zip_content, output_unzip_dir, zip_filename)
    except Exception as e:
        print(f"An error occurred: {e}")

用例1: 直接解壓并保存到指定目錄

pdf_file_path = "/path/to/your.pdf"
output_unzip_dir = "/path/to/output/dir"
# 獲取壓縮包內(nèi)容
zip_content = parse_pdf_api_to_content(pdf_file_path)
# 解壓并保存到指定目錄
save_zip_content_to_directory(zip_content, output_unzip_dir)

用例2: 保存壓縮包到指定目錄并解壓

pdf_file_path = "/path/to/your.pdf"
output_unzip_dir = "/path/to/output/dir"
# 獲取壓縮包內(nèi)容
zip_content = parse_pdf_api_to_content(pdf_file_path)
# 定義壓縮包文件名
zip_filename = os.path.splitext(os.path.basename(pdf_file_path))[0] + ".zip"
# 保存壓縮包并解壓
save_zip_and_content_to_directory(zip_content, output_unzip_dir, zip_filename)

用例3: 將解析內(nèi)容保存到本地

pdf_file_path = "/path/to/your.pdf"
output_dir = "/path/to/output/dir"
# 直接調(diào)用API并將結(jié)果保存到指定目錄
parse_pdf_api_to_path(pdf_file_path, output_dir)


責(zé)任編輯:龐桂玉 來源: 小白學(xué)AI算法
相關(guān)推薦

2009-07-20 16:03:14

ASP.NET 2.0

2014-07-17 14:09:31

Spark

2009-09-11 08:12:36

Windows 7企業(yè)部署網(wǎng)絡(luò)部署

2009-09-18 08:40:56

Windows 7企業(yè)部署VHD

2010-05-28 12:33:11

IPv6部署

2016-12-26 09:19:38

CentOS 7RabbitMQ服務(wù)

2010-06-07 15:21:00

hadoop-0.20

2009-08-04 09:32:27

部署Silverlig

2024-04-17 08:00:00

2010-06-07 16:34:07

Hadoop0.20.

2011-01-12 11:56:36

Visual Stud

2010-02-24 08:11:59

Windows 7企業(yè)部署

2010-06-13 10:48:33

微軟虛擬化SCVMM2008

2022-07-14 10:37:15

Jenkins持續(xù)集成

2010-03-23 08:45:00

Windows 7企業(yè)部署安全性

2020-10-24 17:35:19

Web應(yīng)用程序開發(fā)

2010-01-13 08:52:21

Windows 7系統(tǒng)部署

2009-09-15 08:30:36

Windows 7系統(tǒng)部署系統(tǒng)遷移

2009-11-25 14:53:58

VS2003部署項(xiàng)目

2010-03-12 08:55:48

Windows 7企業(yè)部署
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號