本地部署大模型实现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)