当前位置: 首页 > news >正文

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中引入的特性&#xff0c;在编译阶段约束操作的数据类型&#xff0c;并进行检查 泛型格式&#xff1a;<数据类型> 泛型只能支持引用数据类型&#xff0c;如果写基本数据类型需要写对…...

GPU硬件如何实现光栅化?

版权声明 本文为“优梦创客”原创文章&#xff0c;您可以自由转载&#xff0c;但必须加入完整的版权声明文章内容不得删减、修改、演绎本文视频版本&#xff1a;见文末 引言 大家好&#xff0c;我是老雷&#xff0c;今天我想从GPU硬件原理出发&#xff0c;给大家分享在图形渲…...

Python写入文件内容:从入门到精通

在日常编程工作中&#xff0c;我们常常会遇到需要将数据保存至磁盘的需求。无论是日志记录、配置文件管理还是数据持久化&#xff0c;掌握如何有效地使用Python来写入文件内容都是必不可少的一项技能。本文将从基础语法开始&#xff0c;逐步深入探讨Python中写入文件内容的各种…...

相亲交易系统源码详解与开发指南

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

Golang | Leetcode Golang题解之第413题等差数列划分

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

汽车总线之----FlexRay总线

Introduction 随着汽车智能化发展&#xff0c;车辆开发的ECU数量不断增加&#xff0c;人们对汽车系统的各个性能方面提出了更高的需求&#xff0c;比如更多的数据交互&#xff0c;更高的传输带宽等。现如今人们广泛接受电子功能来提高驾驶安全性&#xff0c;像ABS防抱死系统&a…...

前端代替后端做分页操作

如果后端没有分页api&#xff0c;前端如何做分页一、使用computed 这个变量应该是计算之后的值&#xff0c;是一个状态管理变量&#xff0c;跟onMounted类似import {computed} from vue // 定义ref储存rolelist&#xff0c;这里是原始数据 const roleList ref([])// 定义页码…...

L3 逻辑回归

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

Flink系列知识之:Checkpoint原理

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

智算中心动环监控:构建高效、安全的数字基础设施@卓振思众

在当今快速发展的数字经济时代&#xff0c;智算中心作为人工智能和大数据技术的核心支撑设施&#xff0c;正日益成为各行业实现智能化转型的重要基石。为了确保这些高性能计算环境的安全与稳定&#xff0c;卓振思众动环监控应运而生&#xff0c;成为智算中心管理的重要组成部分…...

PyTorch VGG16手写数字识别教程

手写数字识别教程&#xff1a;使用PyTorch和VGG16 1. 环境准备 确保你已安装以下库&#xff1a; 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辅料数据库在线免费查询-药用辅料

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

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序&#xff0c;无论是测试应用程序、搜寻漏洞还是收集情报&#xff0c;它们都能提升工作流程。 FoxyProxy 代理管理工具&#xff0c;此扩展简化了使用代理&#xff08;如 Burp…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...

起重机起升机构的安全装置有哪些?

起重机起升机构的安全装置是保障吊装作业安全的关键部件&#xff0c;主要用于防止超载、失控、断绳等危险情况。以下是常见的安全装置及其功能和原理&#xff1a; 一、超载保护装置&#xff08;核心安全装置&#xff09; 1. 起重量限制器 功能&#xff1a;实时监测起升载荷&a…...