前面我们讲到了OCR怎么调用,今天我们来讲讲OCR模型到底在做什么,并能根据不同场景选择方案、调参数、分析识别失败原因。
今天围绕这这个过程,首先需要理解这个:
原始图片
│
▼
┌──────────────┐
│ 文字检测 │
│ Detection │
└──────┬───────┘
│
找到文字的位置
│
┌──────────┼──────────┐
▼ ▼ ▼
区域1 区域2 区域3
│ │ │
▼ ▼ ▼
Recognition Recognition Recognition
│ │ │
▼ ▼ ▼
"你好" "订单号" "A123"
│ │ │
└──────────┼──────────┘
▼
后处理
│
▼
结构化数据
一.Detection:文字检测
OCR将图片化成若干个区域,可以知道文字到底在哪里?
二.Recognition:文字识别
看看区域里面是什么文字,区域不一定是矩形,因为它就是文字区域的四个角。
它也能识别倾斜文字,因为然后 OCR 系统可以进行:Text Rectification / 文字区域校正,大致流程:
倾斜文字
↓
检测四个角
↓
透视变换
↓
变成水平文字
↓
Recognition
三.Detection和Recognition为什么要分开?
直接识别的话,模型不知道哪个区域有文字,文字在哪一行,置信度会非常低。
四.OCR结果如何排序和组织?后处理呢?
模型返回的顺序不一定永远就是:
从上到下
从左到右
因此 OCR 应用经常需要自己排序。
我们需要从结果中得到json文件,具体流程是这样的:
OCR
↓
字符串
↓
规则
↓
字段提取
↓
数据清洗
↓
结构化
可以使用正则表达式+OCR。
五.如何处理复杂图片?
1.Perspective Transformation,主要应用于手机扫描文档
原始四边形
↓
四个角点
↓
透视变换
↓
标准矩形
↓
OCR
1.图片太小 提升拍摄分辨率
2.背景太复杂 裁剪,去除背景
3.文字倾斜 旋转矫正
4.反光 需要从拍摄,图像增强,OCR整条链路解决
六.做一个真正的小项目:图片 → OCR → JSON**
📄 图片信息提取器
输入:
invoice.jpg
例如图片里面:
订单编号:A123456
客户:张三
金额:199.00
日期:2026-08-17
输出:
json
{
"order_id": "A123456",
"customer": "张三",
"amount": 199.0,
"date": "2026-08-17"
}
第一步:OCR
python
from paddleocr import PaddleOCR
ocr = PaddleOCR(lang="ch")
result = ocr.predict("invoice.jpg")
第二步:拿到文字
这里你要根据你实际安装的 PaddleOCR 版本返回结构来取字段。
这是我特别强调的一点: **不要盲目复制网上旧教程里的字段访问方式。PaddleOCR 不同版本 API 有变化。所以我们采用一个非常好的工程习惯:
python
for res in result:
print(res)
先看真实结果。
第三步:文本清洗
假设得到:
订单编号:A123456
客户:张三
金额:199.00
日期:2026-08-17
可以写:
python
text = "金额:199.00"
text = text.strip()#去掉空格,换行,前后无意义字符
第四步:提取金额
python
import re
def extract_amount(text):
match = re.search(
r"\d+(?:\.\d+)?",
text
)
if match:
return float(match.group())
return None
测试:
python
print(
extract_amount("金额:199.00")
)
结果:
199.0
第五步:提取订单编号
python
def extract_order_id(text):
match = re.search(
r"[A-Z]\d+",
text
)
if match:
return match.group()
return None
例如:
python
extract_order_id("订单编号:A123456")
得到:
A123456
讲到这里,你会发现,图片转成文字并不难,真正复杂的是:
图片
↓
OCR
↓
文本
↓
理解文本
↓
提取字段
↓
结构化
所以以后我们会继续往:
OCR + NLP/LLM + 结构化数据
第六步.速度
假设你有10000张照片,每张需要1秒,那么一万张就要接近三个小时,如果业务量很大的情况下,必须考虑GPU,批处理,多进程/多线程,图片预处理优化 ,模型大小,模型推理速度,服务化部署。
所以OCR应用不只是需要准确 ,还需要考虑准确率 + 速度 + 成本,具体根据使用场景定。
总结一下上面的内容就是:
图片
│
▼
┌──────────────┐
│ Detection │
│ 文字检测 │
└──────┬───────┘
│
文字区域/坐标
│
▼
┌──────────────┐
│ Recognition │
│ 文字识别 │
└──────┬───────┘
│
文字+置信度
│
▼
┌──────────────┐
│ 后处理 │
└──────┬───────┘
│
┌──────────┼──────────┐
▼ ▼ ▼
清洗 正则 规则
│ │ │
└──────────┼──────────┘
▼
结构化数据
│
▼
你的实际业务
七.OCR的应用
| 场景 | 难点 | 处理思路 |
|---|---|---|
| 手机截图 | 通常清晰 | 直接 OCR |
| 扫描 PDF | 清晰但版面复杂 | OCR + 版面分析 |
| 手机拍文档 | 倾斜、阴影 | 校正 + OCR |
| 发票 | 字段固定 | OCR + 字段提取 |
| 小票 | 排版复杂 | OCR + 坐标分析 |
| 表格 | 行列关系 | 表格识别 |
| 手写字 | 字形变化大 | 专门模型 |
| 低清照片 | 信息缺失 | 图像增强 + OCR |
| 竖排中文 | 阅读方向特殊 | 方向/版面处理 |
不同的场景对应着不同的OCR场景,大体可以分为三类:
1.通用OCR
适用于普通照片
2.文档OCR
适用于pdf,合同,报告,论文等等
3.表格OCR
适用于表格
注:OCR只负责文字识别,至于信息抽取,文档理解,现在非常重要的 Document AI 方向。