开源项目用 LLM 对 Tesseract OCR 结果进行智能纠正,显著提高文本识别的准确性和可用性。
LLM 辅助 OCR 项目是一个高级系统,旨在显著提升光学字符识别(OCR)输出的质量。通过利用尖端的自然语言处理技术和大语言模型(LLM),该项目将原始 OCR 文本转化为高度准确、格式规范且可读性强的文档。
要了解 LLM 辅助 OCR 项目的功能,请查看这些示例输出:
函数:convert_pdf_to_images()
使用 pdf2image 库将 PDF 页面转换为图像
支持通过 max_pages 和 skip_first_n_pages 参数处理页面子集
函数:ocr_image()
使用 pytesseract 进行文本提取
包含使用 preprocess_image() 函数的图像预处理:
process_document() 函数将完整文本分割为可管理的块
使用句子边界进行自然分割
实现块之间的重叠以保持上下文
核心函数:process_chunk()
两步流程:
a. OCR 修正:使用 LLM 修复 OCR 引入的错误,保持原始结构和内容
b. Markdown 格式化(可选):将文本转换为适当的 markdown 格式,处理标题、列表、强调等
在 markdown 格式化步骤中实现
识别并移除完全或接近完全重复的段落
保留唯一内容并确保文本流畅
可配置为移除或特别格式化页眉、页脚和页码
支持本地 LLM 和云端 API 提供商(OpenAI、Anthropic)
通过环境变量配置
函数:generate_completion_from_local_llm()
使用 llama_cpp 库进行本地 LLM 推理
支持自定义语法以实现结构化输出
函数:generate_completion_from_claude() 和 generate_completion_from_openai()
实现适当的错误处理和重试逻辑
管理 token 限制并动态调整请求大小
使用 asyncio 在使用基于 API 的 LLM 时并发处理块
保持已处理块的顺序以实现连贯的最终输出
函数:estimate_tokens()
在可用时使用特定模型的 tokenizer
回退到 approximate_tokens() 进行快速估计
根据 prompt 长度和模型限制调整 max_tokens 参数
实现 TOKEN_BUFFER 和 TOKEN_CUSHION 以确保安全的 token 管理
函数:assess_output_quality()
比较原始 OCR 文本与处理后的输出
使用 LLM 提供质量分数和解释
该项目使用 .env 文件便于配置。关键设置包括:
原始 OCR 输出:保存为 {base_name}__raw_ocr_output.txt
LLM 修正输出:保存为 {base_name}_llm_corrected.md 或 .txt
该脚本生成整个流程的详细日志,包括时序信息和质量评估。
# Install Pyenv and python 3.12 if needed and then use it to create venv:
if ! command -v pyenv &> /dev/null; then
sudo apt-get update
sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python3-openssl git
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init --path)"' >> ~/.zshrc
source ~/.zshrc
fi
cd ~/.pyenv && git pull && cd -
pyenv install 3.12
git clone https://github.com/Dicklesworthstone/llm_aided_ocr
cd llm_aided_ocr
pyenv local 3.12
python -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip
python -m pip install wheel
python -m pip install --upgrade setuptools wheel
pip install -r requirements.txt
对于 Ubuntu:sudo apt-get install tesseract-ocr
对于 macOS:brew install tesseract
对于 Windows:从 GitHub 下载并安装
USE_LOCAL_LLM=False
API_PROVIDER=OPENAI
OPENAI_API_KEY=your_openai_api_key
ANTHROPIC_API_KEY=your_anthropic_api_key
python llm_aided_ocr.py
该脚本将生成多个输出文件,包括最终的后处理文本。
LLM 辅助 OCR 项目采用多步流程将原始 OCR 输出转化为高质量、可读的文本:
PDF 转换:使用 pdf2image 将输入 PDF 转换为图像。
OCR:应用 Tesseract OCR 从图像中提取文本。
文本分块:将原始 OCR 输出分割为可管理的块以供处理。
错误修正:每个块经过基于 LLM 的处理以修正 OCR 错误并提升可读性。
Markdown 格式化(可选):将修正后的文本重新格式化为干净、一致的 Markdown。
质量评估:基于 LLM 的评估将最终输出质量与原始 OCR 文本进行比较。
并发处理:使用基于 API 的模型时,块被并发处理以提升速度。
上下文保留:每个块与前一个块有小的重叠以保持上下文。
自适应 Token 管理:系统根据输入大小和模型约束动态调整用于 LLM 请求的 token 数量。
该项目使用 .env 文件进行配置。关键设置包括:
USE_LOCAL_LLM:设置为 True 使用本地 LLM,设置为 False 使用基于 API 的 LLM。
API_PROVIDER:在"OPENAI"或"CLAUDE"之间选择。
OPENAI_API_KEY、ANTHROPIC_API_KEY:各自服务的 API 密钥。
CLAUDE_MODEL_STRING、OPENAI_COMPLETION_MODEL:为每个提供商指定要使用的模型。
LOCAL_LLM_CONTEXT_SIZE_IN_TOKENS:为本地 LLM 设置上下文大小。
该脚本生成多个输出文件:
{base_name}__raw_ocr_output.txt:来自 Tesseract 的原始 OCR 输出。
{base_name}_llm_corrected.md:最终 LLM 修正和格式化的文本。
系统的性能在很大程度上取决于所使用的 LLM 的质量。
处理非常大的文档可能耗时较长,可能需要大量计算资源。
欢迎为该项目做出贡献!请 fork 该仓库并提交包含你建议更改的 pull request。
该项目采用 MIT 许可证(带 OpenAI/Anthropic Rider)许可。
感谢你对我的开源项目的兴趣!我希望你能找到它有用。你可能还会发现我的商业 Web 应用有用,如果你能查看一下,我会非常感激:
YoutubeTranscriptOptimizer.com 使得粘贴 YouTube 视频 URL 变得非常快捷和容易,它不仅能自动生成非常准确的直接转录,还能生成一个经过充分润色且格式美观的书面文档,可以独立于视频使用。
文档基本上遵循视频中讨论的相同材料,但听起来更像是真实的写作而不仅仅是转录。它还让你可以选择根据文档内容生成测验,可以是选择题或简答题,选择题测验会转换为可以托管和轻松共享的交互式 HTML 文件,你可以参加测验,它会为你的答案评分并给出测验成绩。
FixMyDocuments.com 让你提交任何类型的文档——PDF(包括需要 OCR 的扫描 PDF)、MS Word 和 PowerPoint 文件、图像、音频文件(mp3、m4a 等)——并将它们转换为高度优化的版本,采用美观的 markdown 格式,从中自动生成 HTML 和 PDF 版本。转换后,你也可以使用网站内置的 markdown 编辑器直接在网站上编辑它们,其中保存了运行版本历史记录并重新生成 PDF/HTML 版本。
除了获取文档的优化版本外,你还可以从原始文档生成许多其他类型的"派生文档":可以实际参加并获得评分的交互式选择题测验;看起来光滑的演示文稿幻灯片,形式为 PDF 或 HTML(使用 LaTeX 和 Reveal.js);深度总结;概念思维导图(使用 Mermaid 图表)和大纲;自定义课程计划,你可以在其中选择目标受众;你原始文档的可读性分析和等级级版本(有助于为学生简化概念);Anki 抽认卡,你可以直接导入到 Anki 应用或在网站上使用漂亮界面使用,等等。