目前,在日常工作中需要经常用到 OCR,而目前一些在线工具已不能满足需求,需要更高效的 OCR 工具来解决日常工作需要,于是把探究方向转向了视觉大模型。
OCR及其原理
OCR(Optical Character Recognition,光学字符识别)是一种将图像中的文字转换为可编辑文本的技术。广泛应用于文档数字化、车牌识别、手写识别等领域。其核心流程包括图像预处理、文本检测、字符识别和后处理:
传统的 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-VL 、LLAMA 以及 PaddleOCR。此外,很多云服务也都提供了相关的 API 接口,如 Google Vision API
以上内容参考了 deepseek-v3,请谨慎识别
本地接入视觉模型
以 Meta 的 LLAMA 为例,介绍本地接入模型的流程:
- 安装 Ollama
- 拉取 LLAMA 模型:
ollama run llama3.2-vision:11b
- 用 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 的场景主要有两个:
- 识别某段简短文本
- 识别接口数据
结合这两个具体场景,对各方案进行一个识别对比:
输入图片 | OCR在线识别工具 | Tesseract | LLAMA-3.2 | MiniCPM-V 2.6 | Qwen2-VL | PaddleOCR |
---|---|---|---|---|---|---|
OCR在线识别工具调用的是百度 API
从上述对比结果看,有如下结论:
- llama 对中文的识别支持不太好,Text + Image 场景下,对英语的支持是最优的
- llama / MiniCPM / Qwen2-VL 对接口数据的识别是最强的,识别结果可以直接用,其它几个模型都需要二次排版
- PaddleOCR / MiniCPM / Qwen2-VL 都支持中文识别
DeepSeek
DeepSeek 上月开源了两款模型:DeepSeek-VL2 和 DeepSeek-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 模型,发现其识别结果也不错(从上到下,依次是上面四张图的结果):
看来在日常工作中,大语言模型也是 OCR 识别应用的一个方向。如果想体验 DeepSeek V3,可以下载 VSCode 的 Cline 插件,配置 DeepSeek 作为接口服务方用于日常工作:
资源
- 2024年的大模型总结:https://simonwillison.net/2024/Dec/31/llms-in-2024/
- 上一篇总结的非官方中译:https://www.163.com/dy/article/JKTHVG4C0511AQHO.html
- 关于幻方的一篇采访:疯狂的幻方:一家隐形AI巨头的大模型之路
- RapidOCR: https://huggingface.co/spaces/SWHL/RapidOCRDemo
- EasyOCR: https://www.jaided.ai/easyocr/
截止到 2024 年底的 AI 模型排名:https://lmarena.ai/?leaderboard
- 前 10 中,DeepSeek V3 是唯一的开源模型,排名第 7
- 2023 年底排名第一的 GPT-4 掉到了 69 名,AI 的发展速度快得难以想象
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。