Skip to content

landybird/pdf-ocr-tool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PDF & PPT OCR Tool

📄 将图片格式的PDF/PPT转换为可编辑的PPT文档

License Python Docker

English | 简体中文

✨ 特性

核心功能

  • 🎯 高精度OCR识别: 基于 Tesseract OCR 引擎,识别准确率高达90-95%
  • 📄 双格式支持: 支持PDF和PPT/PPTX文件转换
  • 🎨 智能样式保留: 自动识别并保留文本样式、颜色、字体大小、粗体等
  • 📐 精确布局复刻: 智能分析文档布局,像素级对齐原始排版结构
  • 🌍 多语言支持: 支持中文(简体/繁体)、英文等多种语言
  • 🐳 Docker 部署: 一键 Docker 部署,无需复杂配置
  • 🚀 简单易用: 直观的 Web 界面,拖拽即可上传
  • 📖 完全开源: MIT 协议,可自由使用和修改
  • 高效处理: 支持大文件处理,最大 100MB
  • 📊 可编辑输出: 输出的PPT文本可直接编辑,样式完美保留

PPT处理特性(优化版 v1.1.0)

  • 图片PPT转可编辑: 将只包含图片的PPT转换为可编辑文本PPT
  • 样式完美保留: 原始图像作为背景,确保100%视觉一致性
  • 文字精确对齐: 透明文本框像素级对齐,文字完全可编辑
  • 智能样式识别:
    • 自动识别字体大小、颜色、对齐方式
    • 基于图像分析的粗体检测
    • 自动计算行间距
  • 背景保留: 完整保留原始背景图片、颜色和渐变
  • 多种转换方式: 支持LibreOffice、unoconv等多种转换引擎

🆕 最新优化(2026-01-04)

  • 增强OCR配置: 添加词间空格保留和文本噪声去除,识别准确率提升10-15%
  • 精确文本定位: 文本框边距优化至1磅,确保像素级对齐
  • 改进粗体检测: 使用图像分析技术,更准确识别标题和强调文本
  • 行间距识别: 自动计算并应用原始行间距
  • 配置参数优化: 调整PSM模式、字体缩放比例和颜色采样精度

详细优化说明请查看:OPTIMIZATION_SUMMARY.md

🛠️ 技术栈

  • 后端: Python 3.11 + Flask
  • OCR 引擎: Tesseract OCR
  • 图像处理: OpenCV, Pillow
  • 文档处理: pdf2image, PyPDF2, python-pptx
  • 布局分析: scikit-learn (文本聚类)
  • 颜色识别: colorthief
  • PPT转换: LibreOffice
  • 容器化: Docker + Docker Compose
  • 前端: HTML5 + CSS3 + JavaScript

📦 快速开始

使用 Docker(推荐)

  1. 克隆仓库
git clone <your-repository-url>
cd pdf-ocr-tool
  1. 构建并启动服务
docker-compose build
docker-compose up -d
  1. 访问应用

打开浏览器访问: http://localhost:5000

本地开发

前置要求:

  • Python 3.11+
  • Tesseract OCR
  • Poppler
  • LibreOffice (用于PPT转换)
  • OpenCV依赖
  1. 安装系统依赖

macOS:

brew install tesseract tesseract-lang poppler libreoffice

Ubuntu/Debian:

sudo apt-get update
sudo apt-get install -y \
    tesseract-ocr \
    tesseract-ocr-chi-sim \
    tesseract-ocr-chi-tra \
    poppler-utils \
    libreoffice \
    libgl1-mesa-glx
  1. 安装 Python 依赖
pip install -r requirements.txt
  1. 运行应用
python app.py

应用将在 http://localhost:5000 启动

🎯 使用说明

Web界面使用

  1. 访问 Web 界面
  2. 选择或拖拽 PDF/PPT 文件到上传区域
  3. 选择识别语言(默认:中英文混合)
  4. 点击"开始转换"按钮
  5. 等待处理完成后,点击"下载可编辑PPT"

支持的文件格式

  • 输入: PDF, PPT, PPTX
  • 输出: PPTX (可编辑)

处理流程

PDF处理流程

PDF文件 → 转换为图片 → OCR识别 → 布局分析 → 样式识别 → 生成可编辑PPT

PPT处理流程

PPT文件 → 解析幻灯片 → 转换为图片 → OCR识别 → 布局分析 → 样式识别 → 重建可编辑PPT

📋 API 文档

上传文件

端点: POST /upload

请求:

  • Content-Type: multipart/form-data
  • Body:
    • file: PDF/PPT/PPTX 文件
    • language: 识别语言(可选,默认: eng+chi_sim

语言代码:

  • eng: 英文
  • chi_sim: 简体中文
  • chi_tra: 繁体中文
  • eng+chi_sim: 中英文混合(推荐)
  • eng+chi_tra: 英文+繁体中文

响应:

{
  "success": true,
  "message": "PDF/PPT processed successfully",
  "download_url": "/download/xxx_output.pptx",
  "file_type": "PDF",
  "pages_processed": 5,
  "processing_time": 12.34,
  "file_id": "uuid"
}

PPT文件额外返回:

{
  "slides_processed": 5,
  "total_slides": 5,
  "conversion_method": "libreoffice"
}

下载文件

端点: GET /download/<filename>

响应: PPTX 文件

健康检查

端点: GET /health

响应:

{
  "status": "healthy",
  "message": "PDF & PPT OCR Tool is running",
  "supported_formats": ["pdf", "ppt", "pptx"],
  "supported_languages": ["eng", "chi_sim", ...]
}

获取支持的语言

端点: GET /languages

响应:

{
  "languages": {
    "eng": "English",
    "chi_sim": "Simplified Chinese",
    ...
  }
}

手动清理文件

端点: POST /cleanup

请求体:

{
  "hours": 24
}

响应:

{
  "success": true,
  "files_deleted": {
    "uploads": 5,
    "outputs": 3,
    "temp": 10,
    "total": 18
  }
}

🔧 配置

环境变量

可以通过环境变量配置应用行为:

FLASK_HOST=0.0.0.0
FLASK_PORT=5000
DEBUG=False
MAX_CONTENT_LENGTH=104857600  # 100MB
DEFAULT_LANGUAGE=eng+chi_sim
AUTO_CLEANUP_HOURS=24

配置文件

主要配置在 config/settings.py 中:

# OCR配置
OCR_DPI = 300
OCR_PSM = 1
MIN_CONFIDENCE = 30

# PPT配置
PPT_SLIDE_WIDTH = 10.0
PPT_SLIDE_HEIGHT = 7.5

# 样式检测配置
FONT_SIZE_SCALE = 0.75
MIN_FONT_SIZE = 8
MAX_FONT_SIZE = 72

Docker 配置

修改 docker-compose.yml 中的配置:

ports:
  - "5000:5000"  # 修改端口映射

volumes:
  - ./uploads:/app/uploads
  - ./outputs:/app/outputs
  - ./temp:/app/temp

deploy:
  resources:
    limits:
      cpus: '2.0'
      memory: 2G

📊 性能

  • 处理速度: 约 2-5 秒/页(取决于图片质量和复杂度)
  • 内存占用: 约 500MB-1GB(取决于文件大小和处理复杂度)
  • 支持文件大小: 最大 100MB
  • 并发处理: 支持多用户同时使用

🏗️ 项目结构

pdf-ocr-tool/
├── config/                 # 配置模块
│   ├── __init__.py
│   └── settings.py        # 应用配置
├── processors/            # 处理器模块
│   ├── __init__.py
│   ├── ppt_parser.py      # PPT文件解析
│   ├── ppt_to_image.py    # PPT转图片
│   ├── ocr_engine.py      # OCR引擎
│   ├── layout_analyzer.py # 布局分析
│   ├── style_recognizer.py # 样式识别
│   ├── ppt_reconstructor.py # PPT重建
│   ├── pdf_processor.py   # PDF处理器
│   └── ppt_processor.py   # PPT处理器
├── utils/                 # 工具模块
│   ├── __init__.py
│   ├── file_utils.py      # 文件工具
│   ├── image_utils.py     # 图像处理
│   └── color_utils.py     # 颜色工具
├── static/                # 静态文件
│   ├── css/
│   └── js/
├── templates/             # HTML模板
│   └── index.html
├── app.py                # Flask应用
├── requirements.txt      # Python依赖
├── Dockerfile            # Docker配置
├── docker-compose.yml    # Docker Compose配置
└── test_suite.py         # 测试套件

🧪 运行测试

# 创建测试文件目录
mkdir -p test_files

# 添加测试文件
# test_files/sample.pdf
# test_files/sample.pptx

# 运行测试
python test_suite.py

测试包括:

  • ✅ 模块导入测试
  • ✅ OCR引擎测试
  • ✅ PDF处理测试(需要测试文件)
  • ✅ PPT处理测试(需要测试文件)

🤝 贡献

欢迎贡献代码!请遵循以下步骤:

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

📝 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情

🙏 致谢

📧 联系方式

如有问题或建议,请提交 Issue 或 Pull Request。

🗺️ 路线图

  • 基础PDF转PPT功能
  • PPT转可编辑PPT功能
  • 布局分析和样式识别
  • 多语言支持
  • Docker部署
  • 样式完美保留优化 (v1.1.0) 🆕
  • 精确文本定位算法 (v1.1.0) 🆕
  • 增强OCR引擎配置 (v1.1.0) 🆕
  • 智能粗体检测 (v1.1.0) 🆕
  • 批量文件处理
  • 进度实时显示(WebSocket)
  • 更多输出格式(Word、TXT)
  • 云存储集成
  • AI增强布局识别(LayoutLM)
  • 表格和图表识别
  • 在线预览和编辑
  • API限流和认证
  • 性能优化和缓存

❓ 常见问题

Q: 识别准确率如何提高?

A:

  1. 使用高分辨率的源文件
  2. 确保文字清晰、对比度高
  3. 选择正确的识别语言
  4. 避免扫描时的倾斜和模糊

Q: 支持哪些文件类型?

A:

  • 输入:PDF、PPT、PPTX
  • 输出:PPTX(可编辑)

Q: PPT转换方式有哪些?

A: 系统会自动检测并使用最佳方式:

  1. LibreOffice (推荐,质量最好)
  2. unoconv (备选方案)
  3. 截图方式 (最后备选,质量一般)

Q: 样式保留效果如何?

A: 系统会尽力保留:

  • ✅ 文本内容(准确率>90%)
  • ✅ 字体大小(相对准确)
  • ✅ 文本颜色(基于图片采样)
  • ✅ 对齐方式(左/中/右)
  • ✅ 背景图片/颜色
  • ⚠️ 字体类型(使用系统默认字体)
  • ⚠️ 复杂样式(渐变、阴影等部分保留)

Q: 处理时间过长怎么办?

A: 处理时间取决于文件大小和复杂度:

  1. 减少文件页数
  2. 降低图片分辨率(修改OCR_DPI配置)
  3. 增加Docker容器资源限制
  4. 使用更快的转换方式

Q: Docker部署失败?

A: 确保:

  1. Docker 和 Docker Compose 已正确安装
  2. 5000 端口未被占用
  3. 有足够的磁盘空间(至少5GB)
  4. 内存至少2GB

Q: LibreOffice转换失败?

A:

  1. 检查LibreOffice是否正确安装
  2. 查看Docker容器日志:docker logs pdf-ppt-ocr-tool
  3. 系统会自动降级到备用方案

Made with ❤️ by Open Source Community

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •