
百度最近开源了一个名为 Unlimited OCR 的项目在 GitHub 上 5 天就获得了超过 1 万的 star。这个 OCR 工具最大的特点是引入了类人类遗忘机制能够单次处理数十页的长文档解决了传统 OCR 在处理多页文档时的内存瓶颈问题。传统的 OCR 工具在处理长文档时往往需要将整个文档加载到内存中导致显存或内存占用急剧上升。而 Unlimited OCR 通过滑动窗口注意力机制只对当前处理的部分保持高精度关注对已识别的内容进行遗忘从而实现了低资源消耗下的长文档处理能力。从技术架构来看这个项目支持 40 页文档的连续识别默认使用 128 个 token 的滑动窗口在解码时每个 token 都能关注所有的参考 token视觉特征与提示词但对已生成的输出 token 只保留局部注意力。这种设计既保证了识别精度又控制了资源占用。本文将重点介绍 Unlimited OCR 的本地部署方法、功能测试流程、API 接口调用以及实际使用中的注意事项。如果你需要处理扫描版 PDF、电子书、合同文档等多页材料这个工具值得一试。1. 核心能力速览能力项说明项目类型开源 OCR 文档识别工具开源团队百度主要功能多页文档文字识别、PDF 解析、图文混排处理核心技术类人类遗忘机制、滑动窗口注意力显存需求根据文档长度动态调整远低于传统 OCR支持平台支持 GPU 和 CPU 推理启动方式命令行启动、API 服务接口能力支持 HTTP API 调用批量任务支持目录批量处理输出格式文本、Markdown 等适合场景电子书转换、合同数字化、档案管理2. 适用场景与使用边界Unlimited OCR 特别适合需要处理长文档的场景。比如法律合同的数字化归档、电子书的文字提取、学术论文的批量处理等。传统 OCR 工具在面对 50 页以上的 PDF 文档时往往会因为内存不足而崩溃而这个项目通过滑动窗口机制有效解决了这个问题。从使用边界来看这个工具主要针对的是文档类材料的文字识别不适合处理自然场景图片如街景文字、车牌识别等。对于表格识别、公式识别等特殊需求也需要结合其他专门工具。在版权合规方面需要注意仅处理拥有合法授权的文档材料。特别是商业使用时要确保文档内容不涉及第三方版权问题。对于个人隐私数据建议在本地部署使用避免通过公网 API 传输敏感文档。3. 环境准备与前置条件在开始部署之前需要确认本地环境满足以下要求操作系统支持Windows 10/11推荐Ubuntu 18.04macOS 12Python 环境Python 3.8-3.11pip 包管理工具硬件要求GPU 版本NVIDIA GPU显存 4GBCUDA 11.7CPU 版本内存 8GB处理长文档建议 16GB磁盘空间至少 2GB 可用空间用于模型文件和依赖包依赖工具Git用于克隆项目代码虚拟环境工具venv 或 conda建议优先使用 GPU 环境能够显著提升处理速度。如果只有 CPU 环境也可以运行但处理大量文档时速度会较慢。4. 安装部署与启动方式4.1 项目获取首先克隆项目代码到本地git clone https://github.com/baidu/unlimited-ocr.git cd unlimited-ocr4.2 环境配置创建并激活虚拟环境# 使用 venv python -m venv ocr_env source ocr_env/bin/activate # Linux/macOS ocr_env\Scripts\activate # Windows # 或使用 conda conda create -n ocr_env python3.9 conda activate ocr_env安装依赖包pip install -r requirements.txt4.3 模型下载根据项目说明下载预训练模型# 下载核心识别模型 python scripts/download_model.py --model-name unlimited_ocr_base如果下载速度较慢可以考虑使用镜像源或者手动下载后放置到指定目录。4.4 服务启动启动 OCR 服务# 启动 Web 服务默认端口 7860 python app.py --host 0.0.0.0 --port 7860 # 或直接使用命令行接口 python cli.py --input-doc ./test.pdf --output-dir ./results服务启动后可以通过浏览器访问http://localhost:7860使用 Web UI或者通过 API 接口进行调用。5. 功能测试与效果验证5.1 单页文档测试首先测试基础识别能力准备一个单页 PDF 或图片文档python cli.py --input-doc ./test_single_page.pdf --output-format txt检查输出文件内容重点关注中文、英文、数字的识别准确率标点符号的正确性段落结构的保持情况5.2 多页文档测试测试核心的多页处理能力使用一个 10-20 页的 PDF 文档python cli.py --input-doc ./test_multi_page.pdf --output-format markdown验证要点所有页面是否都被正确处理页眉页脚是否被正确识别或过滤跨页的段落是否保持连贯目录结构是否保留5.3 图文混排测试测试包含图片、表格的复杂版面python cli.py --input-doc ./test_mixed_layout.pdf --output-dir ./detailed_results检查项目图片区域是否被正确跳过或标注表格结构是否大致保持文字环绕排版的处理效果5.4 长文档压力测试使用 40 页的长文档进行极限测试python cli.py --input-doc ./long_document.pdf --batch-size 5 --max-pages 50观察资源占用情况验证类人类遗忘机制的实际效果。6. 接口 API 与批量任务6.1 API 服务启动启动 API 服务模式python api_server.py --port 8080 --workers 26.2 单文档识别接口使用 Python 调用识别接口import requests import json def ocr_single_document(file_path, api_urlhttp://localhost:8080/api/ocr): files {document: open(file_path, rb)} data { output_format: markdown, language: chinese } response requests.post(api_url, filesfiles, datadata) return response.json() # 调用示例 result ocr_single_document(test.pdf) print(json.dumps(result, indent2, ensure_asciiFalse))6.3 批量任务处理对于大量文档可以使用批量处理脚本import os from concurrent.futures import ThreadPoolExecutor def batch_process_directory(input_dir, output_dir, api_url): if not os.path.exists(output_dir): os.makedirs(output_dir) pdf_files [f for f in os.listdir(input_dir) if f.endswith(.pdf)] def process_single_file(filename): input_path os.path.join(input_dir, filename) output_path os.path.join(output_dir, f{os.path.splitext(filename)[0]}.md) result ocr_single_document(input_path, api_url) with open(output_path, w, encodingutf-8) as f: f.write(result[text]) return filename, result[status] with ThreadPoolExecutor(max_workers3) as executor: results list(executor.map(process_single_file, pdf_files)) return results # 批量处理示例 batch_process_directory(./documents, ./results, http://localhost:8080/api/ocr)6.4 异步任务支持对于超长文档可以使用异步处理模式import requests import time def async_ocr_task(file_path, callback_urlNone): files {document: open(file_path, rb)} data { async: True, callback_url: callback_url } response requests.post(http://localhost:8080/api/async-ocr, filesfiles, datadata) task_id response.json()[task_id] # 轮询查询任务状态 while True: status_response requests.get(fhttp://localhost:8080/api/task/{task_id}) status status_response.json()[status] if status completed: return status_response.json()[result] elif status failed: raise Exception(OCR task failed) time.sleep(5) # 每5秒查询一次7. 资源占用与性能观察7.1 显存占用监控在处理文档时可以使用以下命令监控资源占用# Linux/macOS watch -n 1 nvidia-smi # Windows # 使用任务管理器或 GPU-Z 监控典型观察结果单页文档显存占用 1-2GB10页文档显存占用 2-3GB传统 OCR 可能达到 8GB40页文档显存占用 3-4GB平稳增长7.2 处理速度测试不同长度文档的处理时间参考单页图文混排10-30秒10页纯文本文档1-2分钟40页复杂版面5-8分钟速度受硬件配置、文档复杂度、图片质量等因素影响。7.3 CPU 与 GPU 模式对比如果显存不足可以切换到 CPU 模式python app.py --device cpu --port 7860CPU 模式的特点内存占用较高8GB处理速度较慢比 GPU 慢 3-5倍适合偶尔使用或测试环境8. 常见问题与排查方法问题现象可能原因排查方式解决方案启动时报 CUDA 错误CUDA 版本不匹配/驱动问题检查nvidia-smi和 CUDA 版本安装匹配的 CUDA 工具包模型下载失败网络问题/存储权限检查网络连接和磁盘空间手动下载模型或使用镜像处理长文档时内存溢出文档过长/内存不足监控内存使用情况使用--max-pages参数分批次处理识别结果乱码编码问题/语言设置错误检查输出文件编码指定正确的语言参数API 服务无法访问端口冲突/服务未启动检查端口占用和服务状态更换端口或重启服务批量任务卡住资源竞争/文件锁检查并发设置和文件权限减少并发数或检查文件状态8.1 模型加载问题排查如果模型加载失败可以尝试手动下载# 检查模型文件是否存在 ls ~/.cache/unlimited_ocr/models/ # 手动下载模型 wget -O ~/.cache/unlimited_ocr/models/model.bin 模型下载URL8.2 性能优化建议对于大量文档处理可以考虑以下优化# 调整批处理大小 python cli.py --input-dir ./documents --batch-size 3 --max-workers 2 # 使用更快的输出格式 python cli.py --input-doc ./doc.pdf --output-format txt --simple-layout9. 最佳实践与使用建议9.1 文档预处理在使用 OCR 前对文档进行适当预处理能提升识别准确率确保扫描分辨率在 300DPI 以上调整对比度使文字清晰可辨去除不必要的页眉页脚和水印对于彩色文档可以先转换为灰度图9.2 参数调优配置根据文档类型调整识别参数# 学术论文包含公式和参考文献 python cli.py --input-doc paper.pdf --language academic --preserve-layout # 商业合同注重格式保持 python cli.py --input-doc contract.pdf --language legal --output-format docx # 电子书注重连贯性 python cli.py --input-doc ebook.pdf --language novel --continuous-paragraph9.3 生产环境部署对于正式项目使用建议使用 Docker 容器化部署配置反向代理Nginx设置合理的资源限制添加日志监控和告警定期备份重要配置9.4 质量验证流程建立 OCR 结果的质量检查机制抽样检查随机抽取 5% 的文档进行人工复核关键信息验证重点检查数字、日期、专有名词格式一致性确保段落、标题层级正确完整性检查确认所有页面都被处理无遗漏10. 总结与下一步百度 Unlimited OCR 通过创新的类人类遗忘机制有效解决了长文档处理的资源瓶颈问题。在实际测试中40页以上的文档处理显存占用控制在 4GB 以内相比传统 OCR 有显著优势。对于初次使用者建议从以下步骤开始准备一个 5-10 页的测试文档使用默认参数进行基础识别测试根据实际需求调整语言和输出格式参数逐步增加文档长度观察资源占用变化最容易遇到的问题通常是环境配置和模型下载按照本文的排查方法基本都能解决。对于企业级应用建议先在测试环境充分验证再部署到生产环境。后续可以关注项目的更新特别是在表格识别、公式处理等专业领域的增强功能。同时也可以探索与其他文档处理工具如 LangChain、向量数据库的集成方案构建更完整的文档智能化处理流水线。