Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

基于视觉模型的 OCR 识别探究 #82

Open
dwqs opened this issue Jan 6, 2025 · 0 comments
Open

基于视觉模型的 OCR 识别探究 #82

dwqs opened this issue Jan 6, 2025 · 0 comments

Comments

@dwqs
Copy link
Owner

dwqs commented Jan 6, 2025

目前,在日常工作中需要经常用到 OCR,而目前一些在线工具已不能满足需求,需要更高效的 OCR 工具来解决日常工作需要,于是把探究方向转向了视觉大模型。

OCR及其原理

OCR(Optical Character Recognition,光学字符识别)是一种将图像中的文字转换为可编辑文本的技术。广泛应用于文档数字化、车牌识别、手写识别等领域。其核心流程包括图像预处理、文本检测、字符识别和后处理

OCR及其原理

传统的 OCR 识别技术主要分为三类,对比如下:

技术类型 优点 缺点 适用场景
模板匹配 实现简单,速度快 对字体、大小变化敏感 固定格式文档识别
特征提取 灵活性较高,鲁棒性较好 特征设计复杂,对噪声敏感 印刷体识别、简单手写识别
深度学习 精度高,鲁棒性强,自动化 需要大量数据,计算资源要求高 复杂场景、多语言OCR

典型的开源方案代表是 Tesseract。此外,主要大厂也都提供了相关的 API 服务。

新方向:视觉模型

基于视觉模型的 OCR 识别依靠深度学习、统一框架等原理,采用端到端的方式,直接从图像中提取文本信息。对于复杂场景(如自然场景文本、多语言、手写体)有更强的适应能力,并且不需要人工预先设计识别规则和字符特征,模型会自动学习最优特征。

与传统 OCR 识别的对比如下:

性能对比 数据需求&泛化能力 适用场景
传统 OCR 1. 在固定字体、清晰背景下的精度较高,但在复杂场景中表现较差

2. 对噪声、形变、字体变化等鲁棒性较低

3. 计算速度较快,适合实时性要求高的场景
1. 需要少量标注数据,主要依赖人工设计的规则和特征

2. 泛化能力有限,难以适应新场景和新字体
1. - 固定格式文档(如银行支票、发票)

2. 印刷体文本识别

3. 对实时性要求高的场景(如车牌识别)
视觉模型 1. 在复杂场景(如自然场景、多语言、手写体)中精度显著高于传统OCR

2. 对噪声、形变、字体变化等有更强的鲁棒性

3. 计算速度较慢,但随着模型优化和硬件加速,逐渐接近实时性要求
1. 需要大量标注数据进行预训练和微调

2. 泛化能力强,能够适应多种场景、语言和字体
1. 自然场景文本识别(如街景、广告牌)

2. 多语言、多字体文本识别

3. 手写体识别

4. 复杂背景下的文本提取

开源的视觉模型很多,代表有 Qwen2-VLLLAMA 以及 PaddleOCR。此外,很多云服务也都提供了相关的 API 接口,如 Google Vision API

以上内容参考了 deepseek-v3,请谨慎识别

本地接入视觉模型

以 Meta 的 LLAMA 为例,介绍本地接入模型的流程:

  1. 安装 Ollama
  2. 拉取 LLAMA 模型:ollama run llama3.2-vision:11b
  3. 用 React/Vue 等框架的脚手架创建一个项目,核心代码如下:
// 引入 ollama
import { Ollama } from 'ollama/browser' // 浏览器端

import { Ollama } from 'ollama' // node端接入

// 其它代码

const response = await ollama.generate({
  model: 'llama3.2-vision:11b', // 也可以是 LLava 等其它 Ollama 支持的模型
  prompt: 'Please look at this image and extract all the text content. Structure the output as JSON',
  stream: false,
  images: [图片的 base64 数据], 
  // 以 json 形式输出识别结果,也可以通过 prompt 让 llama 以 markdown/text 等格式输出结果
  format: 'json' // format 是 ollama 的接口参数
})

console.log(response?.response) // 输出识别结果

以上,就可在本地接入模型。也可以在 docker 搜索:debounce/ollama-ocr,快速运行 demo。

ollama ocr 源代码:https://github.com/dwqs/ollama-ocr

OCR 识别 PK

在工作中我用到 OCR 的场景主要有两个:

  1. 识别某段简短文本
  2. 识别接口数据

结合这两个具体场景,对各方案进行一个识别对比:

输入图片 OCR在线识别工具 Tesseract LLAMA-3.2 MiniCPM-V 2.6 Qwen2-VL PaddleOCR
中文 image.png image.png image.png image.png image.png image.png
English image.png image.png image.png image.png image.png image.png
json image.png image.png image.png image.png image.png image.png
test image.png image.png image.png image.png image.png image.png

OCR在线识别工具调用的是百度 API

从上述对比结果看,有如下结论:

  • llama 对中文的识别支持不太好,Text + Image 场景下,对英语的支持是最优的
  • llama / MiniCPM / Qwen2-VL 对接口数据的识别是最强的,识别结果可以直接用,其它几个模型都需要二次排版
  • PaddleOCR / MiniCPM / Qwen2-VL 都支持中文识别

DeepSeek

DeepSeek 上月开源了两款模型:DeepSeek-VL2DeepSeek-V3。V3 的发布在国内外的 AI 领域都引发了很多的讨论,它以一个极低的训练成本达到了极佳的训练效果,无论是和 Meta 的开源模型 LLaMA3.1 还是和闭源模型 GPT-4o/Claude-3.5 对比,各项测评指标都不分伯仲或略微领先,但训练成本预估是后三者的 1/11 - 1/8,人送 AI 界的「拼多多」, 每百万输入 tokens 的价格低到了 0.1 CNY。

DeepSeek 是杭州的量化基金公司幻方量化开发的,A股股民对此作出了不可磨灭的贡献🐶🐶🐶

VL2 是视觉模型,我用上面三张图测试了 VL 的第一个版本 ,从测试结果看,第一个版本对中文的识别跟 llama 不分上下😂😂😂。鉴于 DeepSeek-V3 相较于 DeepSeek-V2 有了很大的飞跃,我对于 VL2 的改进也有所期待,后续可以研究一下怎么进行本地接入。

我也拿图片去试了 DeepSeek-V3 模型,发现其识别结果也不错(从上到下,依次是上面四张图的结果):

deepseekv3-test.png

看来在日常工作中,大语言模型也是 OCR 识别应用的一个方向。如果想体验 DeepSeek V3,可以下载 VSCode 的 Cline 插件,配置 DeepSeek 作为接口服务方用于日常工作:

Cline.png

资源

LLM-rank.png

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant