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

本地部署大模型实现OCR识别

目录

OCR识别的难点

1.图像质量

2.复杂的文本布局

3.字体的多样性

本地大模型进行OCR识别


在数字化时代,光学字符识别(OCR)技术已成为信息处理和文档管理的重要工具。近年来,随着大模型技术的兴起,OCR技术迎来了新的发展机遇。本文将探讨大模型在OCR识别中的应用,分析其技术优势、行业实践以及未来趋势。

OCR识别的难点

OCR尽管该技术已经有了很大的进步,但在实际应用中仍然存在一些难点和挑战。

1.图像质量

图像质量是影响OCR效果的重要因素,包括低分辨率、模糊不清以及噪音等问题都会导致字符细节丢失或干扰,从而影响识别准确性。

OCR技术依赖于从图像中提取清晰、可辨认的字符信息,因此图像的质量会直接影响到识别结果的准确性。首先,图像的分辨率决定了每个字符在图像中的像素数量。如果分辨率过低,字符细节可能丢失,导致OCR引擎难以正确分辨字符形状,进而产生错误的识别结果;相反,高分辨率图像通常能提供更丰富的字符细节,有助于提高识别准确率。其次,模糊的图像可能是由于扫描或拍摄时焦距不准确、运动抖动等原因造成。这种模糊使得字符边缘变得不清晰,降低了字符与背景之间的对比度,增加了OCR引擎误读的可能性,在极端情况下,OCR可能完全无法识别某些字符。

此外,图像上的噪音如斑点、划痕或者其他形式的干扰可以被误认为是字符的一部分,或者掩盖实际存在的字符,导致OCR引擎产生错误的识别结果。去除噪音是图像预处理的一个重要步骤,能够显著提升OCR性能。文字和背景之间对比度不足也会使OCR难以区分字符和非字符区域,例如,在浅色纸张上使用淡色墨水书写或打印的文字,或是彩色文本颜色对比度低的情况下,都会降低OCR系统的识别效率。同时,当文档在扫描或拍照时发生倾斜或变形,文字行可能会扭曲,字符间距也会受到影响,这种几何失真可能导致OCR引擎错误地分割字符或单词,甚至完全误解字符结构,严重影响识别效果。

2.复杂的文本布局

复杂的排版或非标准的文档结构会显著增加识别的难度。首先,多方向排列的文本是一个常见问题。当文档中包含横向和纵向的文字混合时,OCR引擎可能难以正确地分割和识别这些不同方向的文本行。这不仅增加了处理时间,还可能导致识别错误,因为系统需要准确判断每个字符的方向。

其次,表格、图表与文本的混合排版也给OCR带来了挑战。表格中的文字通常被线条和单元格分隔开来,而图表则可能覆盖或嵌入文本之中。这种情况下,OCR必须能够准确地区分表格结构和其中的文字内容,并且理解图表与文本之间的关系。如果OCR系统无法正确解析这些元素,就容易产生错位的文本提取,甚至遗漏重要信息。

此外,无序分布或重叠的文本同样影响OCR的准确性。在一些文档中,文本不是按照传统的从左到右、从上到下的顺序排列,而是以不规则的方式散布在整个页面上;还有些文档中存在文本重叠的情况。对于这样的文档,OCR引擎需要具备高级的分析能力来确定正确的阅读顺序,并且要能够处理部分遮挡的问题。否则,输出的结果可能会是混乱的字符序列,而不是连贯的句子或段落。

3.字体的多样性

字体的多样性是OCR面临的一个显著难题。每一种字体都有其独特的形状和结构,某些字体可能具有复杂的装饰或连笔,这些特征使得OCR在解析时容易产生误判。例如,手写体或艺术字体由于其不规则性和变化性较大,对于基于印刷体训练的OCR系统来说尤其难以识别。即使是在标准的印刷字体中,也存在许多细微差异,这要求OCR引擎具备高度的灵活性以适应不同字体的识别需求。

本地大模型进行OCR识别

使用大模型进行OCR识别能够很好的解决OCR识别的难点。

我们首先来展示一下大模型进行OCR识别的效果。

这是一张药品说明书,我们使用大模型对其进行OCR识别。

 将图片输入至大模型中,并给出提示词“请对图中所有的文字进行识别,并整理成表格”,模型推理结果如下:

我们使用Markdown编辑器整理大模型输出,结果如下:

序号项目内容
1通用名称复方黄柏液涂剂
2汉语拼音Fufang Huangbaiye Tuji
3成份连翘、黄柏、金银花、蒲公英、蜈蚣
4性状本品为红棕色液体
5药理作用本品有抗革兰氏阳性菌,消炎和促进伤口愈合的作用,还能增强单核巨噬细胞的吞噬功能,提高非特异性免疫力的作用。
6功能主治清热解毒,消肿祛腐。用于疮疡溃后,伤口感染,属阳证者。
7规格每1ml相当于饮片0.2g。
8用法用量外用。浸泡纱布条外敷于感染伤口内,或破溃的脓肿内。若溃疡较深,可用直径0.5~1.0cm的无菌胶管,插人溃疡深部,以注射器抽取本品进行冲洗。用量一般10~20ml,每日1次。或遵医嘱。
9不良反应尚不明确。
10禁忌尚不明确。
11注意事项(1) 本品供外用,不可内服; (2) 使用本品前应注意按常规换药法清洁或清创病灶; (3) 开瓶后,不宜久存; (4) 孕妇慎用; (5) 本品性状发生改变时禁止使用; (6) 对本品过敏者禁用,过敏体质慎用; (7) 如正在使用其他药物请遵医嘱; (8) 请将本品放在儿童不能接触的地方; (9) 本品久贮略有沉淀,可摇匀后使用。
12贮藏密封。
13包装玻璃瓶瓶装:20ml/瓶;20ml/瓶×3瓶;20ml/瓶×5瓶;20ml/瓶×6瓶;100ml/瓶;120ml/瓶;150ml/瓶。
14有效期36个月
15执行标准《中华人民共和国药典》(2015年版一部)
16批准文号国药准字Z10950097
17生产企业山东汉方制药有限公司

大模型很好的将药品说明书中的信息整理出来,并做好整理。

接下来我们在看一个例子。

这是一本Python程序设计的封面,我们使用大模型对其进行OCR识别。识别结果如下:

书名Python程序设计 项目化教程
系列计算机类技能型理实一体化新形态系列
版本微课视频版
主编刘衍琦 杨斌 田华
副主编陈守森 许强
本书配套资源微课视频 教学大纲 教案 PPT 答案等
出版社清华大学出版社

可以看到,大模型不仅能精准的识别文字内容,还可以对识别结果进行归类,例如 微课视频 教学大纲 教案 PPT 答案等,归类到了 本书配套资源 中,这是传统的OCR识别无法具备的能力。

大模型OCR识别代码如下:

from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info
import torch
import warnings
warnings.filterwarnings("ignore")


model = Qwen2VLForConditionalGeneration.from_pretrained(
    "Qwen2-VL-2B",
    torch_dtype=torch.bfloat16,
    device_map="auto",
)
processor = AutoProcessor.from_pretrained("Qwen2-VL-2B")
messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "image",
                "image": "img.png",
            },
            {"type": "text", "text": "请对图中所有的文字进行识别,并将识别结果整理成表格"},
        ],
    }
]

# Preparation for inference
text = processor.apply_chat_template(
    messages, tokenize=False, add_generation_prompt=True
)
image_inputs, video_inputs = process_vision_info(messages)
inputs = processor(
    text=[text],
    images=image_inputs,
    videos=video_inputs,
    padding=True,
    return_tensors="pt",
)
inputs = inputs.to("cuda")

# Inference: Generation of the output
generated_ids = model.generate(**inputs, max_new_tokens=1024)
generated_ids_trimmed = [
    out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
]
output_text = processor.batch_decode(
    generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print(output_text)


http://www.kler.cn/a/517807.html

相关文章:

  • C++的类Class
  • vue3 获取百度天气
  • PSD是什么图像格式?如何把PSD转为JPG格式?
  • ansible自动化运维实战--软件包管理模块、服务模块、文件模块和收集模块setup(4)
  • 将 OneLake 数据索引到 Elasticsearch - 第二部分
  • vim如何设置制表符表示的空格数量
  • 细说Python操作之正则表达式
  • Elasticsearch——Elasticsearch实现原理解析
  • vue2在线生成二维码
  • php哪几个框架运行速度是比较快的?
  • leetcode——搜索二维矩阵II(java)
  • TCP 长连接和短连接
  • ubuntu22.04安装Gtsam解决Eigen不兼容问题
  • 深度学习笔记——循环神经网络之LSTM
  • 工业缺陷检测实战——基于深度学习YOLOv10神经网络PCB缺陷检测系统
  • 1.23学习记录
  • 【Feature Scaling】:加速梯度下降法的利器
  • NoSQL使用详解
  • 春节假期旅游热潮下,景区医疗安全如何全面升级?
  • 第R5周:天气预测
  • 竞赛算法总结
  • Flutter 给安卓签名时 使用 Android Studio 找不到 Generate Signed Bundle/APK 菜单问题
  • 基于 WPF 平台使用纯 C# 制作流体动画
  • 【软件测试】《软件测试计划》目录及内容概述
  • react中hooks之useDebugValue用法总结
  • 基于Springboot + vue实现的在线装修管理系统