LLMs之OCR:llm_aided_ocr(基于LLM辅助的OCR项目)的简介、安装和使用方法、案例应用之详细攻略
目录
[安装Pyenv和Python 3.12(如果需要):](#安装Pyenv和Python 3.12(如果需要):)
[安装Tesseract OCR引擎(如果尚未安装):](#安装Tesseract OCR引擎(如果尚未安装):)
llm_aided_ocr的简介
2024年8月,LLM辅助OCR项目是一个先进的系统,旨在显著提高光学字符识别(OCR)输出的质量。通过利用尖端的自然语言处理技术和大型语言模型(LLMs),该项目将原始OCR文本转换为高度准确、格式良好且可读性强的文档。
1、特性
>> PDF到图像的转换
>> 使用Tesseract进行OCR
>> 使用LLM(本地或基于API)进行高级错误校正
>> 智能文本分块以提高处理效率
>> 可选的Markdown格式化选项
>> 标题和页码抑制(可选)
>> 最终输出的质量评估
>> 支持本地LLM和基于云的API提供商(OpenAI, Anthropic)
>> 异步处理以提高性能
>> 详细的日志记录用于过程跟踪和调试
>> GPU加速本地LLM推理
2、详细技术概览
PDF处理和OCR
PDF到图像转换
功能:convert_pdf_to_images()
使用pdf2image库将PDF页面转换为图像
支持使用max_pages和skip_first_n_pages参数处理页面子集
OCR处理
功能:ocr_image()
利用pytesseract进行文本提取
包含预处理图像的preprocess_image()函数:
将图像转换为灰度
使用Otsu方法应用二值阈值
执行膨胀以增强文本清晰度
文本处理流程
分块创建
process_document()函数将全文拆分为可管理的块
使用句子边界进行自然分割
实现块之间的重叠以保持上下文
错误校正与格式化
核心功能:process_chunk()
两步骤过程:a. OCR校正:
使用LLM修复由OCR引起的错误
维护原始结构和内容 b. Markdown格式化(可选):
将文本转换为适当的Markdown格式
处理标题、列表、强调等
重复内容移除
在Markdown格式化步骤中实现
识别并移除完全相同或近乎相同的重复段落
保留独特内容并确保文本流畅
标题和页码抑制(可选)
可配置以移除或以不同格式显示标题、页脚和页码
LLM集成
灵活的LLM支持
支持本地LLM和基于云的API提供商(OpenAI, Anthropic)
通过环境变量配置
本地LLM处理
功能:generate_completion_from_local_llm()
使用llama_cpp库进行本地LLM推理
支持自定义语法以获得结构化输出
基于API的LLM处理
功能:generate_completion_from_claude() 和 generate_completion_from_openai()
实现了适当的错误处理和重试逻辑
管理令牌限制并动态调整请求大小
异步处理
使用asyncio并发处理基于API的LLM时的块
保持处理块的顺序以保证最终输出的一致性
令牌管理
令牌估计
功能:estimate_tokens()
在可用时使用特定于模型的分词器
回退到approximate_tokens()进行快速估计
动态令牌调整
根据提示长度和模型限制调整max_tokens参数
实现TOKEN_BUFFER和TOKEN_CUSHION以安全地管理令牌
质量评估
输出质量评估
功能:assess_output_quality()
比较原始OCR文本与处理后的输出
使用LLM提供质量评分和解释
日志记录与错误处理
代码库中的全面日志记录
详细的错误消息和堆栈跟踪用于调试
抑制HTTP请求日志以减少噪音
3、配置与定制
项目使用.env文件进行轻松配置。关键设置包括:
LLM选择(本地或基于API)
API提供商选择
不同提供商的模型选择
令牌限制和缓冲区大小
Markdown格式化选项
4、输出与文件处理
原始OCR输出:保存为{base_name}__raw_ocr_output.txt
LLM校正后的输出:保存为{base_name}_llm_corrected.md 或 .txt
脚本生成整个过程的详细日志,包括时间信息和质量评估。
llm_aided_ocr的安装和使用方法
1、安装
环境需求
Python 3.12+
Tesseract OCR引擎
PDF2Image库
PyTesseract
OpenAI API(可选)
Anthropic API(可选)
本地LLM支持(可选,需要兼容的GGUF模型)
安装
安装Pyenv和Python 3.12(如果需要):
如果需要安装Pyenv和python 3.12,并使用它来创建虚拟环境
设置项目:
使用pyenv创建虚拟环境:
安装Tesseract OCR引擎(如果尚未安装):
对于Ubuntu: sudo apt-get install tesseract-ocr
对于macOS: brew install tesseract
对于Windows: 从GitHub下载并安装
在.env文件中设置您的环境变量:
2、使用
将您的PDF文件放置在项目目录中。
更新main()函数中的input_pdf_file_path变量,使用您的PDF文件名。
运行脚本:
python llm_aided_ocr.py
脚本将生成多个输出文件,包括最终后处理的文本。
3、工作原理
LLM辅助OCR项目采用多步骤过程将原始OCR输出转换为高质量、易读的文本:
PDF转换:使用pdf2image将输入PDF转换为图像。
OCR:应用Tesseract OCR从图像中提取文本。
文本分块:将原始OCR输出拆分为可管理的块以便处理。
错误校正:每个块都经过LLM处理,以纠正OCR错误并提高可读性。
Markdown格式化(可选):将校正后的文本重新格式化为干净一致的Markdown。
质量评估:基于LLM的评估比较最终输出质量与原始OCR文本。
4、代码优化
并发处理:当使用基于API的模型时,块被并发处理以提高速度。
上下文保留:每个块都包含与前一个块的小部分重叠以维持上下文。
自适应令牌管理:系统根据输入大小和模型约束动态调整LLM请求使用的令牌数量。
5、配置
项目使用.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的上下文大小。
6、输出文件
脚本生成多个输出文件:
{base_name}__raw_ocr_output.txt:来自Tesseract的原始OCR输出。
{base_name}_llm_corrected.md:最终LLM校正并格式化的文本。
7、限制与未来改进
系统性能严重依赖所使用的LLM的质量。
处理非常大的文档可能耗时较长,可能需要大量的计算资源。
llm_aided_ocr的案例应用
1、示例输出
要查看LLM辅助OCR项目可以做什么,请参阅这些示例输出: