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(如果需要):
设置项目:
安装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项目可以做什么,请参阅这些示例输出:
- Original PDF
- Raw OCR Output
- LLM-Corrected Markdown Output
相关文章:
LLMs之OCR:llm_aided_ocr(基于LLM辅助的OCR项目)的简介、安装和使用方法、案例应用之详细攻略
LLMs之OCR:llm_aided_ocr(基于LLM辅助的OCR项目)的简介、安装和使用方法、案例应用之详细攻略 目录 llm_aided_ocr的简介 1、特性 2、详细技术概览 PDF处理和OCR PDF到图像转换 OCR处理 文本处理流程 分块创建 错误校正与格式化 重复内容移除 标题和页码…...

低代码平台后端搭建-阶段完结
前言 最近又要开始为跳槽做准备了,发现还是写博客学的效率高点,在总结其他技术栈之前准备先把这个专题小完结一波。在这一篇中我又试着添加了一些实际项目中可能会用到的功能点,用来验证这个平台的扩展性,以及总结一些学过的知识。…...
暑假考研集训营游记
文章目录 摘要:1.对各大辅导机构考研封闭集训营的一些个人看法:2.对于考研原因一些感想:结语 摘要: Ashy在暑假的时候参加了所在辅导班的为期一个月的考研封闭集训营,有了一些全新的感悟,略作记录。 1.对…...
C#中的报文(Message)
在C#中,报文(Message)通常是指在网络通信中交换的数据单元。报文可以由多种不同的组成部分构成,具体取决于通信协议和应用场景。 以下是一些常见的报文组成部分: 头部(Header):包含…...
Python知识点:如何使用Python与Java进行互操作(Jython)
开篇,先说一个好消息,截止到2025年1月1日前,翻到文末找到我,赠送定制版的开题报告和任务书,先到先得!过期不候! Jython 是一种完全兼容 Java 的 Python 实现,它将 Python 代码编译成…...

ffmpeg解封装解码
文章目录 封装和解封装封装解封装 相关接口解封装的流程图关于AVPacket的解释如何区分不同的码流,视频流,音频流?第一种方式av_find_best_stream第二种方式 通过遍历流 代码 封装和解封装 封装 是把音频流 ,视频流,字…...
golang学习笔记10-循环结构
注:本人已有C,C,Python基础,只写本人认为的重点。 go的循环只有for循环,但有多个语法,可以实现C/C中的while和do while。当然,for循环也有break和continue,这点和C/C相同。 语法1: f…...
Java高级编程——泛型(泛型类、泛型接口、泛型方法,完成详解,并附有案例+代码)
文章目录 泛型21.1 概述21.2 泛型类21.3 泛型方法21.4 泛型接口 泛型 21.1 概述 JDK5中引入的特性,在编译阶段约束操作的数据类型,并进行检查 泛型格式:<数据类型> 泛型只能支持引用数据类型,如果写基本数据类型需要写对…...

GPU硬件如何实现光栅化?
版权声明 本文为“优梦创客”原创文章,您可以自由转载,但必须加入完整的版权声明文章内容不得删减、修改、演绎本文视频版本:见文末 引言 大家好,我是老雷,今天我想从GPU硬件原理出发,给大家分享在图形渲…...
Python写入文件内容:从入门到精通
在日常编程工作中,我们常常会遇到需要将数据保存至磁盘的需求。无论是日志记录、配置文件管理还是数据持久化,掌握如何有效地使用Python来写入文件内容都是必不可少的一项技能。本文将从基础语法开始,逐步深入探讨Python中写入文件内容的各种…...

相亲交易系统源码详解与开发指南
随着互联网技术的发展,越来越多的传统行业开始寻求线上转型,其中就包括婚恋服务。传统的相亲方式已经不能满足现代人快节奏的生活需求,因此,开发一款基于Web的相亲交易系统显得尤为重要开发者h17711347205。本文将详细介绍如何使用…...

Golang | Leetcode Golang题解之第413题等差数列划分
题目: 题解: func numberOfArithmeticSlices(nums []int) (ans int) {n : len(nums)if n 1 {return}d, t : nums[0]-nums[1], 0// 因为等差数列的长度至少为 3,所以可以从 i2 开始枚举for i : 2; i < n; i {if nums[i-1]-nums[i] d {t}…...

汽车总线之----FlexRay总线
Introduction 随着汽车智能化发展,车辆开发的ECU数量不断增加,人们对汽车系统的各个性能方面提出了更高的需求,比如更多的数据交互,更高的传输带宽等。现如今人们广泛接受电子功能来提高驾驶安全性,像ABS防抱死系统&a…...
前端代替后端做分页操作
如果后端没有分页api,前端如何做分页一、使用computed 这个变量应该是计算之后的值,是一个状态管理变量,跟onMounted类似import {computed} from vue // 定义ref储存rolelist,这里是原始数据 const roleList ref([])// 定义页码…...

L3 逻辑回归
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 在周将使用 LogisticRegression 函数对经典的鸢尾花 (Iris) 数据集进行分类。将详细介绍逻辑回归的数学原理。 1. 逻辑回归的数学原理 逻辑回归是一种线性分…...

Flink系列知识之:Checkpoint原理
Flink系列知识之:Checkpoint原理 在介绍checkpoint的执行流程之前,需要先明白Flink中状态的存储机制,因为状态对于检查点的持续备份至关重要。 State Backends分类 下图显示了Flink中三个内置的状态存储种类。MemoryStateBackend和FsState…...

智算中心动环监控:构建高效、安全的数字基础设施@卓振思众
在当今快速发展的数字经济时代,智算中心作为人工智能和大数据技术的核心支撑设施,正日益成为各行业实现智能化转型的重要基石。为了确保这些高性能计算环境的安全与稳定,卓振思众动环监控应运而生,成为智算中心管理的重要组成部分…...
PyTorch VGG16手写数字识别教程
手写数字识别教程:使用PyTorch和VGG16 1. 环境准备 确保你已安装以下库: pip install torch torchvision2. 导入必要的库 import torch import torch.nn as nn import torch.optim as optim import torchvision.transforms as transforms import tor…...

安卓13删除下拉栏中的设置按钮 android13删除设置按钮
总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 顶部导航栏下拉可以看到,底部这里有个设置按钮,点击可以进入设备的设置页面,这里我们将更改为删除,不同用户通过这个地方进入设置。也就是下面这个按钮。 2.问题分析…...

FDA辅料数据库在线免费查询-药用辅料
在药物制剂的研制过程中,需要确定这些药用辅料的安全用量。而美国食品药品监督管理局(FDA)的辅料数据库(IID)提供了其制剂研发中的关键参考资源,使得更多的医药研发相关人员及企业单位节省试验环节及时间成…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...

沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...