freep2w


Namefreep2w JSON
Version 1.0.3 PyPI version JSON
download
home_pagehttps://github.com/zstar1003/FreeP2W
SummaryFree PDF to Word Converter
upload_time2025-10-25 13:40:09
maintainerNone
docs_urlNone
authorzstar
requires_python>=3.8
licenseMIT
keywords pdf docx converter formula recognition yolo unimernet
VCS
bugtrack_url
requirements aiohappyeyeballs aiohttp aiosignal albucore albumentations altgraph annotated-types antlr4-python3-runtime anyio async-timeout attrs backports-tarfile braceexpand certifi cffi charset-normalizer colorama contourpy contourpy cryptography cycler datasets dill docutils evaluate exceptiongroup fairscale filelock fire fonttools frozenlist fsspec ftfy h11 hf-xet httpcore httpx huggingface-hub id idna importlib-metadata iopath jaraco-classes jaraco-context jaraco-functools jeepney jinja2 keyring kiwisolver lxml macholib markdown-it-py markupsafe matplotlib mdurl more-itertools mpmath multidict multiprocess networkx networkx nh3 numpy nvidia-cublas-cu12 nvidia-cuda-cupti-cu12 nvidia-cuda-nvrtc-cu12 nvidia-cuda-runtime-cu12 nvidia-cudnn-cu12 nvidia-cufft-cu12 nvidia-cufile-cu12 nvidia-curand-cu12 nvidia-cusolver-cu12 nvidia-cusparse-cu12 nvidia-cusparselt-cu12 nvidia-nccl-cu12 nvidia-nvjitlink-cu12 nvidia-nvshmem-cu12 nvidia-nvtx-cu12 omegaconf opencv-python-headless packaging pandas pefile pillow portalocker propcache psutil pyarrow pycparser pydantic pydantic-core pygments pyinstaller pyinstaller-hooks-contrib pymupdf pyparsing python-dateutil python-docx pytz pywin32 pywin32-ctypes pyyaml rapidfuzz readme-renderer regex requests requests-toolbelt rfc3986 rich safetensors scipy scipy secretstorage setuptools simsimd six sniffio stringzilla sympy termcolor timm tokenizers torch torch torchvision torchvision torchvision tqdm transformers triton twine typing-extensions typing-inspection tzdata urllib3 wcwidth webdataset xxhash yarl zipp
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # FreeP2W - Free PDF to Word Converter

<div align="center">

📄 一个基于深度学习的高质量 PDF 转 Word 工具

[![Python](https://img.shields.io/badge/Python-3.8+-blue.svg)](https://www.python.org/downloads/)
[![PyPI](https://img.shields.io/badge/PyPI-v1.0.0-orange.svg)](https://pypi.org/project/freep2w/)
[![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)

[功能特性](#功能特性) •
[快速开始](#快速开始) •
[使用方法](#使用方法) •
[技术架构](#技术架构) •
[常见问题](#常见问题)

</div>

---

## 简介

FreeP2W 是一款基于深度学习的 PDF 到 Word 转换工具,结合了最先进的文档布局分析和公式识别技术,能够高质量地将 PDF 文档转换为可编辑的 Word 文档。

### 核心优势

- 🎯 **高精度识别**: 使用 DocLayout-YOLO 进行精准的文档布局检测
- 🔬 **公式识别**: 集成 UniMERNet 实现数学公式的精确识别和转换
- 📊 **表格保留**: 完整保留原文档的表格结构和格式
- 🖼️ **图片处理**: 智能提取和定位文档中的图片
- ⚡ **一键转换**: 简单的命令行界面,无需复杂配置
- 🔄 **自动下载**: 首次运行自动下载所需模型文件

---

## 功能特性

### ✨ 主要功能

- **文本提取**: 高质量的文本内容提取,保留原有格式
- **公式转换**: 将 PDF 中的数学公式转换为可编辑的 MathML 格式
- **图片定位**: 精确识别和提取文档中的图片
- **表格识别**: 保留表格结构和单元格内容
- **布局还原**: 尽可能还原原文档的版面布局

### 🚀 技术栈

- **DocLayout-YOLO**: 文档元素检测(图片、公式、表格等)
- **UniMERNet**: 数学公式识别和转换
- **pdf2docx**: PDF 到 DOCX 的基础转换
- **PyMuPDF (fitz)**: PDF 文档解析

---

## 快速开始

### 系统要求

- Python 3.8 或更高版本
- Windows / Linux / macOS
- 至少 4GB 可用磁盘空间(用于存储模型文件)
- 推荐使用 GPU(可选,CPU 也可运行)

### 安装

#### 方式 1: 从 PyPI 安装(推荐)

```bash
pip install freep2w
```

#### 方式 2: 从源码安装

```bash
# 克隆仓库
git clone https://github.com/zstar1003/FreeP2W.git
cd FreeP2W

# 安装依赖
pip install -e .
```

### 首次运行

首次运行时,FreeP2W 会自动下载所需的模型文件:

- **YOLO 模型** (~39 MB): 文档布局检测模型
- **UniMERNet 模型** (~1.6 GB): 数学公式识别模型

模型文件会被下载到用户目录:
- Windows: `C:\Users\<用户名>\.freep2w\weights\`
- Linux/Mac: `~/.freep2w/weights/`

---

## 使用方法

### 命令行界面

#### 基本用法

```bash
# 转换 PDF 文件(输出文件名自动生成)
freep2w input.pdf

# 指定输出文件名
freep2w input.pdf -o output.docx

# 完整路径示例
freep2w /path/to/input.pdf -o /path/to/output.docx
```

#### 命令行参数

```
freep2w [-h] [-o OUTPUT] [-v] input

位置参数:
  input                 输入 PDF 文件路径

可选参数:
  -h, --help            显示帮助信息
  -o OUTPUT, --output OUTPUT
                        输出 DOCX 文件路径(可选)
  -v, --version         显示版本号
```

### Python API

```python
from freep2w.cli import convert_pdf_to_docx

# 转换 PDF 文件
success = convert_pdf_to_docx(
    pdf_path='input.pdf',
    output_path='output.docx'
)

if success:
    print("转换成功!")
else:
    print("转换失败!")
```

### 使用示例

#### 示例: 转换学术论文

```bash
freep2w research_paper.pdf -o paper_converted.docx
```

## 技术架构

### 系统架构

```
┌─────────────────────────────────────────────────────────────┐
│                        FreeP2W CLI                          │
└─────────────────┬───────────────────────────────────────────┘
                  │
                  ▼
┌─────────────────────────────────────────────────────────────┐
│                   HybridConverter                           │
├─────────────────┬───────────────┬───────────────────────────┤
│                 │               │                           │
│   DocLayout     │  UniMERNet    │      pdf2docx            │
│     YOLO        │   Formula     │   Text/Table             │
│  (Layout Det.)  │   (Formula)   │   (Extraction)           │
└─────────────────┴───────────────┴───────────────────────────┘
```

### 工作流程

1. **文档分析**: 使用 DocLayout-YOLO 检测 PDF 中的布局元素(文本、图片、公式、表格)
2. **公式识别**: 对检测到的公式区域使用 UniMERNet 进行识别并转换为 MathML
3. **内容提取**: 使用 pdf2docx 提取文本、表格等内容
4. **文档合成**: 将所有识别结果合并生成最终的 DOCX 文件

### 模型说明

#### DocLayout-YOLO

- **功能**: 文档布局元素检测
- **大小**: 39 MB
- **来源**: [DocLayout-YOLO](https://github.com/opendatalab/DocLayout-YOLO)
- **检测类别**: 图片、公式、表格、标题、段落等

#### UniMERNet

- **功能**: 数学公式识别
- **大小**: ~1.6 GB
- **来源**: [UniMERNet](https://github.com/opendatalab/UniMERNet)
- **输出格式**: MathML / LaTeX

---

## 配置说明

### 模型路径配置

FreeP2W 会自动管理模型文件,但您也可以手动配置:

**用户目录结构**:
```
~/.freep2w/
└── weights/
    ├── doclayout_yolo_docstructbench_imgsz1024.pt  # YOLO 模型
    ├── demo.yaml                                    # 配置文件
    └── unimernet_small/                             # UniMERNet 模型
        ├── config.json
        ├── preprocessor_config.json
        ├── tokenizer.json
        ├── tokenizer_config.json
        └── unimernet_small.pth
```

### 手动下载模型

如果自动下载失败,可以手动下载模型文件:

1. **YOLO 模型**:
   ```
   https://github.com/zstar1003/FreeP2W/releases/download/v0.0.1/doclayout_yolo_docstructbench_imgsz1024.pt
   ```
   放置到: `~/.freep2w/weights/doclayout_yolo_docstructbench_imgsz1024.pt`

2. **UniMERNet 模型**:
   ```
   https://github.com/zstar1003/FreeP2W/releases/download/v0.0.1/unimernet_small.zip
   ```
   解压到: `~/.freep2w/weights/unimernet_small/`

---

## 常见问题

### Q1: 首次运行时下载很慢怎么办?

**A**: UniMERNet 模型文件较大(~1.6GB),下载时间取决于网络速度。建议:
- 使用稳定的网络连接
- 或者手动下载模型文件(见[手动下载模型](#手动下载模型))

### Q2: 转换失败提示找不到模型?

**A**: 检查以下几点:
```bash
# 检查模型目录是否存在
ls ~/.freep2w/weights/

# 重新下载模型
python -m freep2w.model_downloader
```

### Q3: 如何提高转换质量?

**A**:
- 确保 PDF 质量较高(非扫描版)
- 对于扫描版 PDF,建议先进行 OCR 处理
- 复杂公式可能需要手动调整

### Q4: 支持批量转换吗?

**A**: 支持。参见[示例 2: 批量转换](#示例-2-批量转换)

- 

### Q6: 转换后的格式有问题?

**A**:
- PDF 到 Word 的转换是一个复杂过程,完美还原较困难
- 转换后建议手动检查和调整格式
- 对于重要文档,建议对比原文进行校对

---

## 开发说明

### 项目结构

```
FreeP2W/
├── freep2w/                     # 主包
│   ├── __init__.py             # 包初始化
│   ├── cli.py                  # 命令行接口
│   ├── hybrid_converter.py     # 混合转换器
│   ├── model_downloader.py     # 模型下载器
│   └── demo.yaml               # 配置模板
├── doclayout_yolo/              # YOLO 模块(本地)
├── pdf2docx/                    # PDF2DOCX 模块(本地)
├── unimernet/                   # UniMERNet 模块(本地)
├── setup.py                     # 安装配置
├── pyproject.toml               # 项目配置
├── requirements.txt             # 依赖列表
└── README.md                    # 本文件
```

### 从源码运行

```bash
# 克隆仓库
git clone https://github.com/zstar1003/FreeP2W.git
cd FreeP2W

# 安装开发模式
pip install -e .

# 运行测试
freep2w test.pdf -o output.docx
```

### 运行测试

```bash
# 测试模型下载
python -m freep2w.model_downloader

# 测试转换功能
freep2w test_files/sample.pdf -o test_output.docx
```

---

## 性能指标

### 转换速度

| PDF 页数 | CPU (Intel i7) | GPU (NVIDIA RTX 3060) |
|---------|----------------|----------------------|
| 1-10 页  | ~30-60 秒      | ~10-20 秒            |
| 10-50 页 | ~2-5 分钟      | ~30-90 秒            |
| 50-100 页| ~5-15 分钟     | ~2-5 分钟            |

*注: 实际速度取决于文档复杂度和硬件配置*

### 识别准确率

- **文本识别**: >95%(非扫描版 PDF)
- **公式识别**: ~90%(简单公式),~75%(复杂公式)
- **表格识别**: ~85%(结构简单),~70%(结构复杂)
- **布局还原**: ~80%

---

## 路线图

### 当前版本 (v1.0.0)

- ✅ 基础 PDF 到 Word 转换
- ✅ 公式识别和转换
- ✅ 图片提取和定位
- ✅ 表格识别
- ✅ 自动模型下载

### 计划功能

- [ ] GUI 图形界面
- [ ] 批量转换工具
- [ ] 云端 API 服务
- [ ] 更多格式支持(PDF → Markdown, HTML 等)
- [ ] OCR 支持(扫描版 PDF)
- [ ] 自定义模型训练

---

## 贡献指南

欢迎贡献代码、报告问题或提出建议!

### 如何贡献

1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启 Pull Request

### 报告问题

请在 [GitHub Issues](https://github.com/zstar1003/FreeP2W/issues) 提交问题报告。

提交前请确认:
- 搜索是否有相同的问题已被报告
- 提供详细的错误信息和复现步骤
- 附上系统环境信息(操作系统、Python 版本等)

---

## 致谢

本项目使用了以下开源项目:

- [DocLayout-YOLO](https://github.com/opendatalab/DocLayout-YOLO) - 文档布局检测
- [UniMERNet](https://github.com/opendatalab/UniMERNet) - 数学公式识别
- [pdf2docx](https://github.com/dothinking/pdf2docx) - PDF 到 DOCX 转换
- [PyMuPDF](https://github.com/pymupdf/PyMuPDF) - PDF 文档处理

感谢这些优秀的开源项目!

---

## 许可证

本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件。

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/zstar1003/FreeP2W",
    "name": "freep2w",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "pdf, docx, converter, formula, recognition, yolo, unimernet",
    "author": "zstar",
    "author_email": "zstar <zstar1003@163.com>",
    "download_url": "https://files.pythonhosted.org/packages/f6/81/ee47d447082696568ba310c251860dafcef2b22cfa1da13939b155e2f3b5/freep2w-1.0.3.tar.gz",
    "platform": null,
    "description": "# FreeP2W - Free PDF to Word Converter\r\n\r\n<div align=\"center\">\r\n\r\n\ud83d\udcc4 \u4e00\u4e2a\u57fa\u4e8e\u6df1\u5ea6\u5b66\u4e60\u7684\u9ad8\u8d28\u91cf PDF \u8f6c Word \u5de5\u5177\r\n\r\n[![Python](https://img.shields.io/badge/Python-3.8+-blue.svg)](https://www.python.org/downloads/)\r\n[![PyPI](https://img.shields.io/badge/PyPI-v1.0.0-orange.svg)](https://pypi.org/project/freep2w/)\r\n[![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)\r\n\r\n[\u529f\u80fd\u7279\u6027](#\u529f\u80fd\u7279\u6027) \u2022\r\n[\u5feb\u901f\u5f00\u59cb](#\u5feb\u901f\u5f00\u59cb) \u2022\r\n[\u4f7f\u7528\u65b9\u6cd5](#\u4f7f\u7528\u65b9\u6cd5) \u2022\r\n[\u6280\u672f\u67b6\u6784](#\u6280\u672f\u67b6\u6784) \u2022\r\n[\u5e38\u89c1\u95ee\u9898](#\u5e38\u89c1\u95ee\u9898)\r\n\r\n</div>\r\n\r\n---\r\n\r\n## \u7b80\u4ecb\r\n\r\nFreeP2W \u662f\u4e00\u6b3e\u57fa\u4e8e\u6df1\u5ea6\u5b66\u4e60\u7684 PDF \u5230 Word \u8f6c\u6362\u5de5\u5177\uff0c\u7ed3\u5408\u4e86\u6700\u5148\u8fdb\u7684\u6587\u6863\u5e03\u5c40\u5206\u6790\u548c\u516c\u5f0f\u8bc6\u522b\u6280\u672f\uff0c\u80fd\u591f\u9ad8\u8d28\u91cf\u5730\u5c06 PDF \u6587\u6863\u8f6c\u6362\u4e3a\u53ef\u7f16\u8f91\u7684 Word \u6587\u6863\u3002\r\n\r\n### \u6838\u5fc3\u4f18\u52bf\r\n\r\n- \ud83c\udfaf **\u9ad8\u7cbe\u5ea6\u8bc6\u522b**: \u4f7f\u7528 DocLayout-YOLO \u8fdb\u884c\u7cbe\u51c6\u7684\u6587\u6863\u5e03\u5c40\u68c0\u6d4b\r\n- \ud83d\udd2c **\u516c\u5f0f\u8bc6\u522b**: \u96c6\u6210 UniMERNet \u5b9e\u73b0\u6570\u5b66\u516c\u5f0f\u7684\u7cbe\u786e\u8bc6\u522b\u548c\u8f6c\u6362\r\n- \ud83d\udcca **\u8868\u683c\u4fdd\u7559**: \u5b8c\u6574\u4fdd\u7559\u539f\u6587\u6863\u7684\u8868\u683c\u7ed3\u6784\u548c\u683c\u5f0f\r\n- \ud83d\uddbc\ufe0f **\u56fe\u7247\u5904\u7406**: \u667a\u80fd\u63d0\u53d6\u548c\u5b9a\u4f4d\u6587\u6863\u4e2d\u7684\u56fe\u7247\r\n- \u26a1 **\u4e00\u952e\u8f6c\u6362**: \u7b80\u5355\u7684\u547d\u4ee4\u884c\u754c\u9762\uff0c\u65e0\u9700\u590d\u6742\u914d\u7f6e\r\n- \ud83d\udd04 **\u81ea\u52a8\u4e0b\u8f7d**: \u9996\u6b21\u8fd0\u884c\u81ea\u52a8\u4e0b\u8f7d\u6240\u9700\u6a21\u578b\u6587\u4ef6\r\n\r\n---\r\n\r\n## \u529f\u80fd\u7279\u6027\r\n\r\n### \u2728 \u4e3b\u8981\u529f\u80fd\r\n\r\n- **\u6587\u672c\u63d0\u53d6**: \u9ad8\u8d28\u91cf\u7684\u6587\u672c\u5185\u5bb9\u63d0\u53d6\uff0c\u4fdd\u7559\u539f\u6709\u683c\u5f0f\r\n- **\u516c\u5f0f\u8f6c\u6362**: \u5c06 PDF \u4e2d\u7684\u6570\u5b66\u516c\u5f0f\u8f6c\u6362\u4e3a\u53ef\u7f16\u8f91\u7684 MathML \u683c\u5f0f\r\n- **\u56fe\u7247\u5b9a\u4f4d**: \u7cbe\u786e\u8bc6\u522b\u548c\u63d0\u53d6\u6587\u6863\u4e2d\u7684\u56fe\u7247\r\n- **\u8868\u683c\u8bc6\u522b**: \u4fdd\u7559\u8868\u683c\u7ed3\u6784\u548c\u5355\u5143\u683c\u5185\u5bb9\r\n- **\u5e03\u5c40\u8fd8\u539f**: \u5c3d\u53ef\u80fd\u8fd8\u539f\u539f\u6587\u6863\u7684\u7248\u9762\u5e03\u5c40\r\n\r\n### \ud83d\ude80 \u6280\u672f\u6808\r\n\r\n- **DocLayout-YOLO**: \u6587\u6863\u5143\u7d20\u68c0\u6d4b\uff08\u56fe\u7247\u3001\u516c\u5f0f\u3001\u8868\u683c\u7b49\uff09\r\n- **UniMERNet**: \u6570\u5b66\u516c\u5f0f\u8bc6\u522b\u548c\u8f6c\u6362\r\n- **pdf2docx**: PDF \u5230 DOCX \u7684\u57fa\u7840\u8f6c\u6362\r\n- **PyMuPDF (fitz)**: PDF \u6587\u6863\u89e3\u6790\r\n\r\n---\r\n\r\n## \u5feb\u901f\u5f00\u59cb\r\n\r\n### \u7cfb\u7edf\u8981\u6c42\r\n\r\n- Python 3.8 \u6216\u66f4\u9ad8\u7248\u672c\r\n- Windows / Linux / macOS\r\n- \u81f3\u5c11 4GB \u53ef\u7528\u78c1\u76d8\u7a7a\u95f4\uff08\u7528\u4e8e\u5b58\u50a8\u6a21\u578b\u6587\u4ef6\uff09\r\n- \u63a8\u8350\u4f7f\u7528 GPU\uff08\u53ef\u9009\uff0cCPU \u4e5f\u53ef\u8fd0\u884c\uff09\r\n\r\n### \u5b89\u88c5\r\n\r\n#### \u65b9\u5f0f 1: \u4ece PyPI \u5b89\u88c5\uff08\u63a8\u8350\uff09\r\n\r\n```bash\r\npip install freep2w\r\n```\r\n\r\n#### \u65b9\u5f0f 2: \u4ece\u6e90\u7801\u5b89\u88c5\r\n\r\n```bash\r\n# \u514b\u9686\u4ed3\u5e93\r\ngit clone https://github.com/zstar1003/FreeP2W.git\r\ncd FreeP2W\r\n\r\n# \u5b89\u88c5\u4f9d\u8d56\r\npip install -e .\r\n```\r\n\r\n### \u9996\u6b21\u8fd0\u884c\r\n\r\n\u9996\u6b21\u8fd0\u884c\u65f6\uff0cFreeP2W \u4f1a\u81ea\u52a8\u4e0b\u8f7d\u6240\u9700\u7684\u6a21\u578b\u6587\u4ef6\uff1a\r\n\r\n- **YOLO \u6a21\u578b** (~39 MB): \u6587\u6863\u5e03\u5c40\u68c0\u6d4b\u6a21\u578b\r\n- **UniMERNet \u6a21\u578b** (~1.6 GB): \u6570\u5b66\u516c\u5f0f\u8bc6\u522b\u6a21\u578b\r\n\r\n\u6a21\u578b\u6587\u4ef6\u4f1a\u88ab\u4e0b\u8f7d\u5230\u7528\u6237\u76ee\u5f55\uff1a\r\n- Windows: `C:\\Users\\<\u7528\u6237\u540d>\\.freep2w\\weights\\`\r\n- Linux/Mac: `~/.freep2w/weights/`\r\n\r\n---\r\n\r\n## \u4f7f\u7528\u65b9\u6cd5\r\n\r\n### \u547d\u4ee4\u884c\u754c\u9762\r\n\r\n#### \u57fa\u672c\u7528\u6cd5\r\n\r\n```bash\r\n# \u8f6c\u6362 PDF \u6587\u4ef6\uff08\u8f93\u51fa\u6587\u4ef6\u540d\u81ea\u52a8\u751f\u6210\uff09\r\nfreep2w input.pdf\r\n\r\n# \u6307\u5b9a\u8f93\u51fa\u6587\u4ef6\u540d\r\nfreep2w input.pdf -o output.docx\r\n\r\n# \u5b8c\u6574\u8def\u5f84\u793a\u4f8b\r\nfreep2w /path/to/input.pdf -o /path/to/output.docx\r\n```\r\n\r\n#### \u547d\u4ee4\u884c\u53c2\u6570\r\n\r\n```\r\nfreep2w [-h] [-o OUTPUT] [-v] input\r\n\r\n\u4f4d\u7f6e\u53c2\u6570:\r\n  input                 \u8f93\u5165 PDF \u6587\u4ef6\u8def\u5f84\r\n\r\n\u53ef\u9009\u53c2\u6570:\r\n  -h, --help            \u663e\u793a\u5e2e\u52a9\u4fe1\u606f\r\n  -o OUTPUT, --output OUTPUT\r\n                        \u8f93\u51fa DOCX \u6587\u4ef6\u8def\u5f84\uff08\u53ef\u9009\uff09\r\n  -v, --version         \u663e\u793a\u7248\u672c\u53f7\r\n```\r\n\r\n### Python API\r\n\r\n```python\r\nfrom freep2w.cli import convert_pdf_to_docx\r\n\r\n# \u8f6c\u6362 PDF \u6587\u4ef6\r\nsuccess = convert_pdf_to_docx(\r\n    pdf_path='input.pdf',\r\n    output_path='output.docx'\r\n)\r\n\r\nif success:\r\n    print(\"\u8f6c\u6362\u6210\u529f\uff01\")\r\nelse:\r\n    print(\"\u8f6c\u6362\u5931\u8d25\uff01\")\r\n```\r\n\r\n### \u4f7f\u7528\u793a\u4f8b\r\n\r\n#### \u793a\u4f8b: \u8f6c\u6362\u5b66\u672f\u8bba\u6587\r\n\r\n```bash\r\nfreep2w research_paper.pdf -o paper_converted.docx\r\n```\r\n\r\n## \u6280\u672f\u67b6\u6784\r\n\r\n### \u7cfb\u7edf\u67b6\u6784\r\n\r\n```\r\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502                        FreeP2W CLI                          \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\r\n                  \u2502\r\n                  \u25bc\r\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502                   HybridConverter                           \u2502\r\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502                 \u2502               \u2502                           \u2502\r\n\u2502   DocLayout     \u2502  UniMERNet    \u2502      pdf2docx            \u2502\r\n\u2502     YOLO        \u2502   Formula     \u2502   Text/Table             \u2502\r\n\u2502  (Layout Det.)  \u2502   (Formula)   \u2502   (Extraction)           \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\r\n```\r\n\r\n### \u5de5\u4f5c\u6d41\u7a0b\r\n\r\n1. **\u6587\u6863\u5206\u6790**: \u4f7f\u7528 DocLayout-YOLO \u68c0\u6d4b PDF \u4e2d\u7684\u5e03\u5c40\u5143\u7d20\uff08\u6587\u672c\u3001\u56fe\u7247\u3001\u516c\u5f0f\u3001\u8868\u683c\uff09\r\n2. **\u516c\u5f0f\u8bc6\u522b**: \u5bf9\u68c0\u6d4b\u5230\u7684\u516c\u5f0f\u533a\u57df\u4f7f\u7528 UniMERNet \u8fdb\u884c\u8bc6\u522b\u5e76\u8f6c\u6362\u4e3a MathML\r\n3. **\u5185\u5bb9\u63d0\u53d6**: \u4f7f\u7528 pdf2docx \u63d0\u53d6\u6587\u672c\u3001\u8868\u683c\u7b49\u5185\u5bb9\r\n4. **\u6587\u6863\u5408\u6210**: \u5c06\u6240\u6709\u8bc6\u522b\u7ed3\u679c\u5408\u5e76\u751f\u6210\u6700\u7ec8\u7684 DOCX \u6587\u4ef6\r\n\r\n### \u6a21\u578b\u8bf4\u660e\r\n\r\n#### DocLayout-YOLO\r\n\r\n- **\u529f\u80fd**: \u6587\u6863\u5e03\u5c40\u5143\u7d20\u68c0\u6d4b\r\n- **\u5927\u5c0f**: 39 MB\r\n- **\u6765\u6e90**: [DocLayout-YOLO](https://github.com/opendatalab/DocLayout-YOLO)\r\n- **\u68c0\u6d4b\u7c7b\u522b**: \u56fe\u7247\u3001\u516c\u5f0f\u3001\u8868\u683c\u3001\u6807\u9898\u3001\u6bb5\u843d\u7b49\r\n\r\n#### UniMERNet\r\n\r\n- **\u529f\u80fd**: \u6570\u5b66\u516c\u5f0f\u8bc6\u522b\r\n- **\u5927\u5c0f**: ~1.6 GB\r\n- **\u6765\u6e90**: [UniMERNet](https://github.com/opendatalab/UniMERNet)\r\n- **\u8f93\u51fa\u683c\u5f0f**: MathML / LaTeX\r\n\r\n---\r\n\r\n## \u914d\u7f6e\u8bf4\u660e\r\n\r\n### \u6a21\u578b\u8def\u5f84\u914d\u7f6e\r\n\r\nFreeP2W \u4f1a\u81ea\u52a8\u7ba1\u7406\u6a21\u578b\u6587\u4ef6\uff0c\u4f46\u60a8\u4e5f\u53ef\u4ee5\u624b\u52a8\u914d\u7f6e\uff1a\r\n\r\n**\u7528\u6237\u76ee\u5f55\u7ed3\u6784**:\r\n```\r\n~/.freep2w/\r\n\u2514\u2500\u2500 weights/\r\n    \u251c\u2500\u2500 doclayout_yolo_docstructbench_imgsz1024.pt  # YOLO \u6a21\u578b\r\n    \u251c\u2500\u2500 demo.yaml                                    # \u914d\u7f6e\u6587\u4ef6\r\n    \u2514\u2500\u2500 unimernet_small/                             # UniMERNet \u6a21\u578b\r\n        \u251c\u2500\u2500 config.json\r\n        \u251c\u2500\u2500 preprocessor_config.json\r\n        \u251c\u2500\u2500 tokenizer.json\r\n        \u251c\u2500\u2500 tokenizer_config.json\r\n        \u2514\u2500\u2500 unimernet_small.pth\r\n```\r\n\r\n### \u624b\u52a8\u4e0b\u8f7d\u6a21\u578b\r\n\r\n\u5982\u679c\u81ea\u52a8\u4e0b\u8f7d\u5931\u8d25\uff0c\u53ef\u4ee5\u624b\u52a8\u4e0b\u8f7d\u6a21\u578b\u6587\u4ef6\uff1a\r\n\r\n1. **YOLO \u6a21\u578b**:\r\n   ```\r\n   https://github.com/zstar1003/FreeP2W/releases/download/v0.0.1/doclayout_yolo_docstructbench_imgsz1024.pt\r\n   ```\r\n   \u653e\u7f6e\u5230: `~/.freep2w/weights/doclayout_yolo_docstructbench_imgsz1024.pt`\r\n\r\n2. **UniMERNet \u6a21\u578b**:\r\n   ```\r\n   https://github.com/zstar1003/FreeP2W/releases/download/v0.0.1/unimernet_small.zip\r\n   ```\r\n   \u89e3\u538b\u5230: `~/.freep2w/weights/unimernet_small/`\r\n\r\n---\r\n\r\n## \u5e38\u89c1\u95ee\u9898\r\n\r\n### Q1: \u9996\u6b21\u8fd0\u884c\u65f6\u4e0b\u8f7d\u5f88\u6162\u600e\u4e48\u529e\uff1f\r\n\r\n**A**: UniMERNet \u6a21\u578b\u6587\u4ef6\u8f83\u5927\uff08~1.6GB\uff09\uff0c\u4e0b\u8f7d\u65f6\u95f4\u53d6\u51b3\u4e8e\u7f51\u7edc\u901f\u5ea6\u3002\u5efa\u8bae\uff1a\r\n- \u4f7f\u7528\u7a33\u5b9a\u7684\u7f51\u7edc\u8fde\u63a5\r\n- \u6216\u8005\u624b\u52a8\u4e0b\u8f7d\u6a21\u578b\u6587\u4ef6\uff08\u89c1[\u624b\u52a8\u4e0b\u8f7d\u6a21\u578b](#\u624b\u52a8\u4e0b\u8f7d\u6a21\u578b)\uff09\r\n\r\n### Q2: \u8f6c\u6362\u5931\u8d25\u63d0\u793a\u627e\u4e0d\u5230\u6a21\u578b\uff1f\r\n\r\n**A**: \u68c0\u67e5\u4ee5\u4e0b\u51e0\u70b9\uff1a\r\n```bash\r\n# \u68c0\u67e5\u6a21\u578b\u76ee\u5f55\u662f\u5426\u5b58\u5728\r\nls ~/.freep2w/weights/\r\n\r\n# \u91cd\u65b0\u4e0b\u8f7d\u6a21\u578b\r\npython -m freep2w.model_downloader\r\n```\r\n\r\n### Q3: \u5982\u4f55\u63d0\u9ad8\u8f6c\u6362\u8d28\u91cf\uff1f\r\n\r\n**A**:\r\n- \u786e\u4fdd PDF \u8d28\u91cf\u8f83\u9ad8\uff08\u975e\u626b\u63cf\u7248\uff09\r\n- \u5bf9\u4e8e\u626b\u63cf\u7248 PDF\uff0c\u5efa\u8bae\u5148\u8fdb\u884c OCR \u5904\u7406\r\n- \u590d\u6742\u516c\u5f0f\u53ef\u80fd\u9700\u8981\u624b\u52a8\u8c03\u6574\r\n\r\n### Q4: \u652f\u6301\u6279\u91cf\u8f6c\u6362\u5417\uff1f\r\n\r\n**A**: \u652f\u6301\u3002\u53c2\u89c1[\u793a\u4f8b 2: \u6279\u91cf\u8f6c\u6362](#\u793a\u4f8b-2-\u6279\u91cf\u8f6c\u6362)\r\n\r\n- \r\n\r\n### Q6: \u8f6c\u6362\u540e\u7684\u683c\u5f0f\u6709\u95ee\u9898\uff1f\r\n\r\n**A**:\r\n- PDF \u5230 Word \u7684\u8f6c\u6362\u662f\u4e00\u4e2a\u590d\u6742\u8fc7\u7a0b\uff0c\u5b8c\u7f8e\u8fd8\u539f\u8f83\u56f0\u96be\r\n- \u8f6c\u6362\u540e\u5efa\u8bae\u624b\u52a8\u68c0\u67e5\u548c\u8c03\u6574\u683c\u5f0f\r\n- \u5bf9\u4e8e\u91cd\u8981\u6587\u6863\uff0c\u5efa\u8bae\u5bf9\u6bd4\u539f\u6587\u8fdb\u884c\u6821\u5bf9\r\n\r\n---\r\n\r\n## \u5f00\u53d1\u8bf4\u660e\r\n\r\n### \u9879\u76ee\u7ed3\u6784\r\n\r\n```\r\nFreeP2W/\r\n\u251c\u2500\u2500 freep2w/                     # \u4e3b\u5305\r\n\u2502   \u251c\u2500\u2500 __init__.py             # \u5305\u521d\u59cb\u5316\r\n\u2502   \u251c\u2500\u2500 cli.py                  # \u547d\u4ee4\u884c\u63a5\u53e3\r\n\u2502   \u251c\u2500\u2500 hybrid_converter.py     # \u6df7\u5408\u8f6c\u6362\u5668\r\n\u2502   \u251c\u2500\u2500 model_downloader.py     # \u6a21\u578b\u4e0b\u8f7d\u5668\r\n\u2502   \u2514\u2500\u2500 demo.yaml               # \u914d\u7f6e\u6a21\u677f\r\n\u251c\u2500\u2500 doclayout_yolo/              # YOLO \u6a21\u5757\uff08\u672c\u5730\uff09\r\n\u251c\u2500\u2500 pdf2docx/                    # PDF2DOCX \u6a21\u5757\uff08\u672c\u5730\uff09\r\n\u251c\u2500\u2500 unimernet/                   # UniMERNet \u6a21\u5757\uff08\u672c\u5730\uff09\r\n\u251c\u2500\u2500 setup.py                     # \u5b89\u88c5\u914d\u7f6e\r\n\u251c\u2500\u2500 pyproject.toml               # \u9879\u76ee\u914d\u7f6e\r\n\u251c\u2500\u2500 requirements.txt             # \u4f9d\u8d56\u5217\u8868\r\n\u2514\u2500\u2500 README.md                    # \u672c\u6587\u4ef6\r\n```\r\n\r\n### \u4ece\u6e90\u7801\u8fd0\u884c\r\n\r\n```bash\r\n# \u514b\u9686\u4ed3\u5e93\r\ngit clone https://github.com/zstar1003/FreeP2W.git\r\ncd FreeP2W\r\n\r\n# \u5b89\u88c5\u5f00\u53d1\u6a21\u5f0f\r\npip install -e .\r\n\r\n# \u8fd0\u884c\u6d4b\u8bd5\r\nfreep2w test.pdf -o output.docx\r\n```\r\n\r\n### \u8fd0\u884c\u6d4b\u8bd5\r\n\r\n```bash\r\n# \u6d4b\u8bd5\u6a21\u578b\u4e0b\u8f7d\r\npython -m freep2w.model_downloader\r\n\r\n# \u6d4b\u8bd5\u8f6c\u6362\u529f\u80fd\r\nfreep2w test_files/sample.pdf -o test_output.docx\r\n```\r\n\r\n---\r\n\r\n## \u6027\u80fd\u6307\u6807\r\n\r\n### \u8f6c\u6362\u901f\u5ea6\r\n\r\n| PDF \u9875\u6570 | CPU (Intel i7) | GPU (NVIDIA RTX 3060) |\r\n|---------|----------------|----------------------|\r\n| 1-10 \u9875  | ~30-60 \u79d2      | ~10-20 \u79d2            |\r\n| 10-50 \u9875 | ~2-5 \u5206\u949f      | ~30-90 \u79d2            |\r\n| 50-100 \u9875| ~5-15 \u5206\u949f     | ~2-5 \u5206\u949f            |\r\n\r\n*\u6ce8: \u5b9e\u9645\u901f\u5ea6\u53d6\u51b3\u4e8e\u6587\u6863\u590d\u6742\u5ea6\u548c\u786c\u4ef6\u914d\u7f6e*\r\n\r\n### \u8bc6\u522b\u51c6\u786e\u7387\r\n\r\n- **\u6587\u672c\u8bc6\u522b**: >95%\uff08\u975e\u626b\u63cf\u7248 PDF\uff09\r\n- **\u516c\u5f0f\u8bc6\u522b**: ~90%\uff08\u7b80\u5355\u516c\u5f0f\uff09\uff0c~75%\uff08\u590d\u6742\u516c\u5f0f\uff09\r\n- **\u8868\u683c\u8bc6\u522b**: ~85%\uff08\u7ed3\u6784\u7b80\u5355\uff09\uff0c~70%\uff08\u7ed3\u6784\u590d\u6742\uff09\r\n- **\u5e03\u5c40\u8fd8\u539f**: ~80%\r\n\r\n---\r\n\r\n## \u8def\u7ebf\u56fe\r\n\r\n### \u5f53\u524d\u7248\u672c (v1.0.0)\r\n\r\n- \u2705 \u57fa\u7840 PDF \u5230 Word \u8f6c\u6362\r\n- \u2705 \u516c\u5f0f\u8bc6\u522b\u548c\u8f6c\u6362\r\n- \u2705 \u56fe\u7247\u63d0\u53d6\u548c\u5b9a\u4f4d\r\n- \u2705 \u8868\u683c\u8bc6\u522b\r\n- \u2705 \u81ea\u52a8\u6a21\u578b\u4e0b\u8f7d\r\n\r\n### \u8ba1\u5212\u529f\u80fd\r\n\r\n- [ ] GUI \u56fe\u5f62\u754c\u9762\r\n- [ ] \u6279\u91cf\u8f6c\u6362\u5de5\u5177\r\n- [ ] \u4e91\u7aef API \u670d\u52a1\r\n- [ ] \u66f4\u591a\u683c\u5f0f\u652f\u6301\uff08PDF \u2192 Markdown, HTML \u7b49\uff09\r\n- [ ] OCR \u652f\u6301\uff08\u626b\u63cf\u7248 PDF\uff09\r\n- [ ] \u81ea\u5b9a\u4e49\u6a21\u578b\u8bad\u7ec3\r\n\r\n---\r\n\r\n## \u8d21\u732e\u6307\u5357\r\n\r\n\u6b22\u8fce\u8d21\u732e\u4ee3\u7801\u3001\u62a5\u544a\u95ee\u9898\u6216\u63d0\u51fa\u5efa\u8bae\uff01\r\n\r\n### \u5982\u4f55\u8d21\u732e\r\n\r\n1. Fork \u672c\u4ed3\u5e93\r\n2. \u521b\u5efa\u7279\u6027\u5206\u652f (`git checkout -b feature/AmazingFeature`)\r\n3. \u63d0\u4ea4\u66f4\u6539 (`git commit -m 'Add some AmazingFeature'`)\r\n4. \u63a8\u9001\u5230\u5206\u652f (`git push origin feature/AmazingFeature`)\r\n5. \u5f00\u542f Pull Request\r\n\r\n### \u62a5\u544a\u95ee\u9898\r\n\r\n\u8bf7\u5728 [GitHub Issues](https://github.com/zstar1003/FreeP2W/issues) \u63d0\u4ea4\u95ee\u9898\u62a5\u544a\u3002\r\n\r\n\u63d0\u4ea4\u524d\u8bf7\u786e\u8ba4\uff1a\r\n- \u641c\u7d22\u662f\u5426\u6709\u76f8\u540c\u7684\u95ee\u9898\u5df2\u88ab\u62a5\u544a\r\n- \u63d0\u4f9b\u8be6\u7ec6\u7684\u9519\u8bef\u4fe1\u606f\u548c\u590d\u73b0\u6b65\u9aa4\r\n- \u9644\u4e0a\u7cfb\u7edf\u73af\u5883\u4fe1\u606f\uff08\u64cd\u4f5c\u7cfb\u7edf\u3001Python \u7248\u672c\u7b49\uff09\r\n\r\n---\r\n\r\n## \u81f4\u8c22\r\n\r\n\u672c\u9879\u76ee\u4f7f\u7528\u4e86\u4ee5\u4e0b\u5f00\u6e90\u9879\u76ee\uff1a\r\n\r\n- [DocLayout-YOLO](https://github.com/opendatalab/DocLayout-YOLO) - \u6587\u6863\u5e03\u5c40\u68c0\u6d4b\r\n- [UniMERNet](https://github.com/opendatalab/UniMERNet) - \u6570\u5b66\u516c\u5f0f\u8bc6\u522b\r\n- [pdf2docx](https://github.com/dothinking/pdf2docx) - PDF \u5230 DOCX \u8f6c\u6362\r\n- [PyMuPDF](https://github.com/pymupdf/PyMuPDF) - PDF \u6587\u6863\u5904\u7406\r\n\r\n\u611f\u8c22\u8fd9\u4e9b\u4f18\u79c0\u7684\u5f00\u6e90\u9879\u76ee\uff01\r\n\r\n---\r\n\r\n## \u8bb8\u53ef\u8bc1\r\n\r\n\u672c\u9879\u76ee\u91c7\u7528 MIT \u8bb8\u53ef\u8bc1 - \u8be6\u89c1 [LICENSE](LICENSE) \u6587\u4ef6\u3002\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Free PDF to Word Converter",
    "version": "1.0.3",
    "project_urls": {
        "Bug Tracker": "https://github.com/zstar1003/FreeP2W/issues",
        "Documentation": "https://github.com/zstar1003/FreeP2W/wiki",
        "Homepage": "https://github.com/zstar1003/FreeP2W",
        "Repository": "https://github.com/zstar1003/FreeP2W"
    },
    "split_keywords": [
        "pdf",
        " docx",
        " converter",
        " formula",
        " recognition",
        " yolo",
        " unimernet"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a51ea971d0664a53f0ef079584ef40c5538aa5849f8a33c0ff1f0af8ffb0a797",
                "md5": "7e75ea17acc4aea02ea5e0b39cde68cb",
                "sha256": "be282c94374f5b08ad60444369a4c06b763e27e77e385222dea2b75dd58340a3"
            },
            "downloads": -1,
            "filename": "freep2w-1.0.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7e75ea17acc4aea02ea5e0b39cde68cb",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 815104,
            "upload_time": "2025-10-25T13:40:08",
            "upload_time_iso_8601": "2025-10-25T13:40:08.127917Z",
            "url": "https://files.pythonhosted.org/packages/a5/1e/a971d0664a53f0ef079584ef40c5538aa5849f8a33c0ff1f0af8ffb0a797/freep2w-1.0.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f681ee47d447082696568ba310c251860dafcef2b22cfa1da13939b155e2f3b5",
                "md5": "515f318bfc5a7234094c1c8fb22c2134",
                "sha256": "a89b43bf1dc6c6eeb685f4bacb7942064d3b9ae92a9bf8ffd9669d49f36c4468"
            },
            "downloads": -1,
            "filename": "freep2w-1.0.3.tar.gz",
            "has_sig": false,
            "md5_digest": "515f318bfc5a7234094c1c8fb22c2134",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 655738,
            "upload_time": "2025-10-25T13:40:09",
            "upload_time_iso_8601": "2025-10-25T13:40:09.984382Z",
            "url": "https://files.pythonhosted.org/packages/f6/81/ee47d447082696568ba310c251860dafcef2b22cfa1da13939b155e2f3b5/freep2w-1.0.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-25 13:40:09",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "zstar1003",
    "github_project": "FreeP2W",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "aiohappyeyeballs",
            "specs": [
                [
                    "==",
                    "2.6.1"
                ]
            ]
        },
        {
            "name": "aiohttp",
            "specs": [
                [
                    "==",
                    "3.13.1"
                ]
            ]
        },
        {
            "name": "aiosignal",
            "specs": [
                [
                    "==",
                    "1.4.0"
                ]
            ]
        },
        {
            "name": "albucore",
            "specs": [
                [
                    "==",
                    "0.0.24"
                ]
            ]
        },
        {
            "name": "albumentations",
            "specs": [
                [
                    "==",
                    "2.0.8"
                ]
            ]
        },
        {
            "name": "altgraph",
            "specs": [
                [
                    "==",
                    "0.17.4"
                ]
            ]
        },
        {
            "name": "annotated-types",
            "specs": [
                [
                    "==",
                    "0.7.0"
                ]
            ]
        },
        {
            "name": "antlr4-python3-runtime",
            "specs": [
                [
                    "==",
                    "4.9.3"
                ]
            ]
        },
        {
            "name": "anyio",
            "specs": [
                [
                    "==",
                    "4.11.0"
                ]
            ]
        },
        {
            "name": "async-timeout",
            "specs": [
                [
                    "==",
                    "5.0.1"
                ]
            ]
        },
        {
            "name": "attrs",
            "specs": [
                [
                    "==",
                    "25.4.0"
                ]
            ]
        },
        {
            "name": "backports-tarfile",
            "specs": [
                [
                    "==",
                    "1.2.0"
                ]
            ]
        },
        {
            "name": "braceexpand",
            "specs": [
                [
                    "==",
                    "0.1.7"
                ]
            ]
        },
        {
            "name": "certifi",
            "specs": [
                [
                    "==",
                    "2025.10.5"
                ]
            ]
        },
        {
            "name": "cffi",
            "specs": [
                [
                    "==",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "charset-normalizer",
            "specs": [
                [
                    "==",
                    "3.4.4"
                ]
            ]
        },
        {
            "name": "colorama",
            "specs": [
                [
                    "==",
                    "0.4.6"
                ]
            ]
        },
        {
            "name": "contourpy",
            "specs": [
                [
                    "==",
                    "1.3.2"
                ]
            ]
        },
        {
            "name": "contourpy",
            "specs": [
                [
                    "==",
                    "1.3.3"
                ]
            ]
        },
        {
            "name": "cryptography",
            "specs": [
                [
                    "==",
                    "46.0.3"
                ]
            ]
        },
        {
            "name": "cycler",
            "specs": [
                [
                    "==",
                    "0.12.1"
                ]
            ]
        },
        {
            "name": "datasets",
            "specs": [
                [
                    "==",
                    "4.2.0"
                ]
            ]
        },
        {
            "name": "dill",
            "specs": [
                [
                    "==",
                    "0.4.0"
                ]
            ]
        },
        {
            "name": "docutils",
            "specs": [
                [
                    "==",
                    "0.22.2"
                ]
            ]
        },
        {
            "name": "evaluate",
            "specs": [
                [
                    "==",
                    "0.4.6"
                ]
            ]
        },
        {
            "name": "exceptiongroup",
            "specs": [
                [
                    "==",
                    "1.3.0"
                ]
            ]
        },
        {
            "name": "fairscale",
            "specs": [
                [
                    "==",
                    "0.4.13"
                ]
            ]
        },
        {
            "name": "filelock",
            "specs": [
                [
                    "==",
                    "3.20.0"
                ]
            ]
        },
        {
            "name": "fire",
            "specs": [
                [
                    "==",
                    "0.7.1"
                ]
            ]
        },
        {
            "name": "fonttools",
            "specs": [
                [
                    "==",
                    "4.60.1"
                ]
            ]
        },
        {
            "name": "frozenlist",
            "specs": [
                [
                    "==",
                    "1.8.0"
                ]
            ]
        },
        {
            "name": "fsspec",
            "specs": [
                [
                    "==",
                    "2025.9.0"
                ]
            ]
        },
        {
            "name": "ftfy",
            "specs": [
                [
                    "==",
                    "6.3.1"
                ]
            ]
        },
        {
            "name": "h11",
            "specs": [
                [
                    "==",
                    "0.16.0"
                ]
            ]
        },
        {
            "name": "hf-xet",
            "specs": [
                [
                    "==",
                    "1.1.10"
                ]
            ]
        },
        {
            "name": "httpcore",
            "specs": [
                [
                    "==",
                    "1.0.9"
                ]
            ]
        },
        {
            "name": "httpx",
            "specs": [
                [
                    "==",
                    "0.28.1"
                ]
            ]
        },
        {
            "name": "huggingface-hub",
            "specs": [
                [
                    "==",
                    "0.35.3"
                ]
            ]
        },
        {
            "name": "id",
            "specs": [
                [
                    "==",
                    "1.5.0"
                ]
            ]
        },
        {
            "name": "idna",
            "specs": [
                [
                    "==",
                    "3.11"
                ]
            ]
        },
        {
            "name": "importlib-metadata",
            "specs": [
                [
                    "==",
                    "8.7.0"
                ]
            ]
        },
        {
            "name": "iopath",
            "specs": [
                [
                    "==",
                    "0.1.10"
                ]
            ]
        },
        {
            "name": "jaraco-classes",
            "specs": [
                [
                    "==",
                    "3.4.0"
                ]
            ]
        },
        {
            "name": "jaraco-context",
            "specs": [
                [
                    "==",
                    "6.0.1"
                ]
            ]
        },
        {
            "name": "jaraco-functools",
            "specs": [
                [
                    "==",
                    "4.3.0"
                ]
            ]
        },
        {
            "name": "jeepney",
            "specs": [
                [
                    "==",
                    "0.9.0"
                ]
            ]
        },
        {
            "name": "jinja2",
            "specs": [
                [
                    "==",
                    "3.1.6"
                ]
            ]
        },
        {
            "name": "keyring",
            "specs": [
                [
                    "==",
                    "25.6.0"
                ]
            ]
        },
        {
            "name": "kiwisolver",
            "specs": [
                [
                    "==",
                    "1.4.9"
                ]
            ]
        },
        {
            "name": "lxml",
            "specs": [
                [
                    "==",
                    "6.0.2"
                ]
            ]
        },
        {
            "name": "macholib",
            "specs": [
                [
                    "==",
                    "1.16.3"
                ]
            ]
        },
        {
            "name": "markdown-it-py",
            "specs": [
                [
                    "==",
                    "4.0.0"
                ]
            ]
        },
        {
            "name": "markupsafe",
            "specs": [
                [
                    "==",
                    "3.0.3"
                ]
            ]
        },
        {
            "name": "matplotlib",
            "specs": [
                [
                    "==",
                    "3.10.7"
                ]
            ]
        },
        {
            "name": "mdurl",
            "specs": [
                [
                    "==",
                    "0.1.2"
                ]
            ]
        },
        {
            "name": "more-itertools",
            "specs": [
                [
                    "==",
                    "10.8.0"
                ]
            ]
        },
        {
            "name": "mpmath",
            "specs": [
                [
                    "==",
                    "1.3.0"
                ]
            ]
        },
        {
            "name": "multidict",
            "specs": [
                [
                    "==",
                    "6.7.0"
                ]
            ]
        },
        {
            "name": "multiprocess",
            "specs": [
                [
                    "==",
                    "0.70.16"
                ]
            ]
        },
        {
            "name": "networkx",
            "specs": [
                [
                    "==",
                    "3.4.2"
                ]
            ]
        },
        {
            "name": "networkx",
            "specs": [
                [
                    "==",
                    "3.5"
                ]
            ]
        },
        {
            "name": "nh3",
            "specs": [
                [
                    "==",
                    "0.3.1"
                ]
            ]
        },
        {
            "name": "numpy",
            "specs": [
                [
                    "==",
                    "1.26.4"
                ]
            ]
        },
        {
            "name": "nvidia-cublas-cu12",
            "specs": [
                [
                    "==",
                    "12.6.4.1"
                ]
            ]
        },
        {
            "name": "nvidia-cuda-cupti-cu12",
            "specs": [
                [
                    "==",
                    "12.6.80"
                ]
            ]
        },
        {
            "name": "nvidia-cuda-nvrtc-cu12",
            "specs": [
                [
                    "==",
                    "12.6.77"
                ]
            ]
        },
        {
            "name": "nvidia-cuda-runtime-cu12",
            "specs": [
                [
                    "==",
                    "12.6.77"
                ]
            ]
        },
        {
            "name": "nvidia-cudnn-cu12",
            "specs": [
                [
                    "==",
                    "9.10.2.21"
                ]
            ]
        },
        {
            "name": "nvidia-cufft-cu12",
            "specs": [
                [
                    "==",
                    "11.3.0.4"
                ]
            ]
        },
        {
            "name": "nvidia-cufile-cu12",
            "specs": [
                [
                    "==",
                    "1.11.1.6"
                ]
            ]
        },
        {
            "name": "nvidia-curand-cu12",
            "specs": [
                [
                    "==",
                    "10.3.7.77"
                ]
            ]
        },
        {
            "name": "nvidia-cusolver-cu12",
            "specs": [
                [
                    "==",
                    "11.7.1.2"
                ]
            ]
        },
        {
            "name": "nvidia-cusparse-cu12",
            "specs": [
                [
                    "==",
                    "12.5.4.2"
                ]
            ]
        },
        {
            "name": "nvidia-cusparselt-cu12",
            "specs": [
                [
                    "==",
                    "0.7.1"
                ]
            ]
        },
        {
            "name": "nvidia-nccl-cu12",
            "specs": [
                [
                    "==",
                    "2.27.5"
                ]
            ]
        },
        {
            "name": "nvidia-nvjitlink-cu12",
            "specs": [
                [
                    "==",
                    "12.6.85"
                ]
            ]
        },
        {
            "name": "nvidia-nvshmem-cu12",
            "specs": [
                [
                    "==",
                    "3.3.20"
                ]
            ]
        },
        {
            "name": "nvidia-nvtx-cu12",
            "specs": [
                [
                    "==",
                    "12.6.77"
                ]
            ]
        },
        {
            "name": "omegaconf",
            "specs": [
                [
                    "==",
                    "2.3.0"
                ]
            ]
        },
        {
            "name": "opencv-python-headless",
            "specs": [
                [
                    "==",
                    "4.11.0.86"
                ]
            ]
        },
        {
            "name": "packaging",
            "specs": [
                [
                    "==",
                    "25.0"
                ]
            ]
        },
        {
            "name": "pandas",
            "specs": [
                [
                    "==",
                    "2.3.3"
                ]
            ]
        },
        {
            "name": "pefile",
            "specs": [
                [
                    "==",
                    "2023.2.7"
                ]
            ]
        },
        {
            "name": "pillow",
            "specs": [
                [
                    "==",
                    "10.4.0"
                ]
            ]
        },
        {
            "name": "portalocker",
            "specs": [
                [
                    "==",
                    "3.2.0"
                ]
            ]
        },
        {
            "name": "propcache",
            "specs": [
                [
                    "==",
                    "0.4.1"
                ]
            ]
        },
        {
            "name": "psutil",
            "specs": [
                [
                    "==",
                    "7.1.1"
                ]
            ]
        },
        {
            "name": "pyarrow",
            "specs": [
                [
                    "==",
                    "21.0.0"
                ]
            ]
        },
        {
            "name": "pycparser",
            "specs": [
                [
                    "==",
                    "2.23"
                ]
            ]
        },
        {
            "name": "pydantic",
            "specs": [
                [
                    "==",
                    "2.12.3"
                ]
            ]
        },
        {
            "name": "pydantic-core",
            "specs": [
                [
                    "==",
                    "2.41.4"
                ]
            ]
        },
        {
            "name": "pygments",
            "specs": [
                [
                    "==",
                    "2.19.2"
                ]
            ]
        },
        {
            "name": "pyinstaller",
            "specs": [
                [
                    "==",
                    "6.16.0"
                ]
            ]
        },
        {
            "name": "pyinstaller-hooks-contrib",
            "specs": [
                [
                    "==",
                    "2025.9"
                ]
            ]
        },
        {
            "name": "pymupdf",
            "specs": [
                [
                    "==",
                    "1.26.5"
                ]
            ]
        },
        {
            "name": "pyparsing",
            "specs": [
                [
                    "==",
                    "3.2.5"
                ]
            ]
        },
        {
            "name": "python-dateutil",
            "specs": [
                [
                    "==",
                    "2.9.0.post0"
                ]
            ]
        },
        {
            "name": "python-docx",
            "specs": [
                [
                    "==",
                    "1.2.0"
                ]
            ]
        },
        {
            "name": "pytz",
            "specs": [
                [
                    "==",
                    "2025.2"
                ]
            ]
        },
        {
            "name": "pywin32",
            "specs": [
                [
                    "==",
                    "311"
                ]
            ]
        },
        {
            "name": "pywin32-ctypes",
            "specs": [
                [
                    "==",
                    "0.2.3"
                ]
            ]
        },
        {
            "name": "pyyaml",
            "specs": [
                [
                    "==",
                    "6.0.3"
                ]
            ]
        },
        {
            "name": "rapidfuzz",
            "specs": [
                [
                    "==",
                    "3.14.1"
                ]
            ]
        },
        {
            "name": "readme-renderer",
            "specs": [
                [
                    "==",
                    "44.0"
                ]
            ]
        },
        {
            "name": "regex",
            "specs": [
                [
                    "==",
                    "2025.10.22"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    "==",
                    "2.32.5"
                ]
            ]
        },
        {
            "name": "requests-toolbelt",
            "specs": [
                [
                    "==",
                    "1.0.0"
                ]
            ]
        },
        {
            "name": "rfc3986",
            "specs": [
                [
                    "==",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "rich",
            "specs": [
                [
                    "==",
                    "14.2.0"
                ]
            ]
        },
        {
            "name": "safetensors",
            "specs": [
                [
                    "==",
                    "0.6.2"
                ]
            ]
        },
        {
            "name": "scipy",
            "specs": [
                [
                    "==",
                    "1.15.3"
                ]
            ]
        },
        {
            "name": "scipy",
            "specs": [
                [
                    "==",
                    "1.16.2"
                ]
            ]
        },
        {
            "name": "secretstorage",
            "specs": [
                [
                    "==",
                    "3.4.0"
                ]
            ]
        },
        {
            "name": "setuptools",
            "specs": [
                [
                    "==",
                    "80.9.0"
                ]
            ]
        },
        {
            "name": "simsimd",
            "specs": [
                [
                    "==",
                    "6.5.3"
                ]
            ]
        },
        {
            "name": "six",
            "specs": [
                [
                    "==",
                    "1.17.0"
                ]
            ]
        },
        {
            "name": "sniffio",
            "specs": [
                [
                    "==",
                    "1.3.1"
                ]
            ]
        },
        {
            "name": "stringzilla",
            "specs": [
                [
                    "==",
                    "4.2.1"
                ]
            ]
        },
        {
            "name": "sympy",
            "specs": [
                [
                    "==",
                    "1.14.0"
                ]
            ]
        },
        {
            "name": "termcolor",
            "specs": [
                [
                    "==",
                    "3.1.0"
                ]
            ]
        },
        {
            "name": "timm",
            "specs": [
                [
                    "==",
                    "1.0.20"
                ]
            ]
        },
        {
            "name": "tokenizers",
            "specs": [
                [
                    "==",
                    "0.19.1"
                ]
            ]
        },
        {
            "name": "torch",
            "specs": [
                [
                    "==",
                    "2.9.0"
                ]
            ]
        },
        {
            "name": "torch",
            "specs": [
                [
                    "==",
                    "2.9.0+cu126"
                ]
            ]
        },
        {
            "name": "torchvision",
            "specs": [
                [
                    "==",
                    "0.24.0"
                ]
            ]
        },
        {
            "name": "torchvision",
            "specs": [
                [
                    "==",
                    "0.24.0"
                ]
            ]
        },
        {
            "name": "torchvision",
            "specs": [
                [
                    "==",
                    "0.24.0+cu126"
                ]
            ]
        },
        {
            "name": "tqdm",
            "specs": [
                [
                    "==",
                    "4.67.1"
                ]
            ]
        },
        {
            "name": "transformers",
            "specs": [
                [
                    "==",
                    "4.42.4"
                ]
            ]
        },
        {
            "name": "triton",
            "specs": [
                [
                    "==",
                    "3.5.0"
                ]
            ]
        },
        {
            "name": "twine",
            "specs": [
                [
                    "==",
                    "6.2.0"
                ]
            ]
        },
        {
            "name": "typing-extensions",
            "specs": [
                [
                    "==",
                    "4.15.0"
                ]
            ]
        },
        {
            "name": "typing-inspection",
            "specs": [
                [
                    "==",
                    "0.4.2"
                ]
            ]
        },
        {
            "name": "tzdata",
            "specs": [
                [
                    "==",
                    "2025.2"
                ]
            ]
        },
        {
            "name": "urllib3",
            "specs": [
                [
                    "==",
                    "2.5.0"
                ]
            ]
        },
        {
            "name": "wcwidth",
            "specs": [
                [
                    "==",
                    "0.2.14"
                ]
            ]
        },
        {
            "name": "webdataset",
            "specs": [
                [
                    "==",
                    "1.0.2"
                ]
            ]
        },
        {
            "name": "xxhash",
            "specs": [
                [
                    "==",
                    "3.6.0"
                ]
            ]
        },
        {
            "name": "yarl",
            "specs": [
                [
                    "==",
                    "1.22.0"
                ]
            ]
        },
        {
            "name": "zipp",
            "specs": [
                [
                    "==",
                    "3.23.0"
                ]
            ]
        }
    ],
    "lcname": "freep2w"
}
        
Elapsed time: 0.62194s