LLMs之OCR:llm_aided_ocr(基于LLM辅助的OCR项目)的简介、安装和使用方法、案例应用之详细攻略

LLMs之OCR:llm_aided_ocr(基于LLM辅助的OCR项目)的简介、安装和使用方法、案例应用之详细攻略

目录

llm_aided_ocr的简介

1、特性

2、详细技术概览

PDF处理和OCR

PDF到图像转换

OCR处理

文本处理流程

分块创建

错误校正与格式化

重复内容移除

标题和页码抑制(可选)

LLM集成

灵活的LLM支持

本地LLM处理

基于API的LLM处理

异步处理

令牌管理

令牌估计

动态令牌调整

质量评估

日志记录与错误处理

3、配置与定制

4、输出与文件处理

llm_aided_ocr的安装和使用方法

1、安装

环境需求

安装

[安装Pyenv和Python 3.12(如果需要):](#安装Pyenv和Python 3.12(如果需要):)

设置项目:

[安装Tesseract OCR引擎(如果尚未安装):](#安装Tesseract OCR引擎(如果尚未安装):)

在.env文件中设置您的环境变量:

2、使用

3、工作原理

4、代码优化

5、配置

6、输出文件

7、限制与未来改进

llm_aided_ocr的案例应用

1、示例输出


llm_aided_ocr的简介

2024年8月,LLM辅助OCR项目是一个先进的系统,旨在显著提高光学字符识别(OCR)输出的质量。通过利用尖端的自然语言处理技术和大型语言模型(LLMs),该项目将原始OCR文本转换为高度准确、格式良好且可读性强的文档。

GitHub地址GitHub - Dicklesworthstone/llm_aided_ocr: Enhance Tesseract OCR output for scanned PDFs by applying Large Language Model (LLM) corrections.

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项目可以做什么,请参阅这些示例输出:

相关推荐
谷隐凡二4 小时前
python中ocr图片文字识别样例(一)
开发语言·python·ocr
GoFly开发者4 小时前
Golang开发的OCR-身份证号码识别(不依赖第三方)
开发语言·golang·ocr·go语言身份证识别
一个处女座的程序猿4 小时前
CV之OCR:GOT-OCR2.0的简介、安装和使用方法、案例应用之详细攻略
ocr·got-ocr
NewTech精选2 天前
分享一个通用OCR模型GOT-OCR2.0
ocr
知来者逆2 天前
ChemChat——大语言模型与化学的未来,以及整合外部工具和聊天机器人的潜力
人工智能·gpt·语言模型·自然语言处理·机器人·llm·大语言模型
AI领航者2 天前
大型语言模型的结构性幻觉:不可避免的局限性
人工智能·语言模型·自然语言处理·llm·大语言模型·ai大模型·大模型幻觉
VB.Net2 天前
EmguCV学习笔记 VB.Net 12.3 OCR
opencv·计算机视觉·c#·ocr·图像·vb.net·emgucv
VB.Net2 天前
EmguCV学习笔记 C# 12.3 OCR
opencv·计算机视觉·c#·ocr·vb.net·emgucv
上官猪猪2 天前
百度飞浆Paddle OCR检测和识别【OCR数据收集、标注、数据集划分、检测识别模型训练、导出模型】
ocr·paddlepaddle