OCR 文字识别【选修】
本节定位
OCR 很容易被说成一句话:
- 把图片里的字识别出来
但真实项目里,问题会更细:
- 字在哪里
- 顺序是什么
- 多栏版面怎么读
- 倾斜和模糊怎么办
所以 OCR 更像一条流水线,而不是单个模型。
学习目标
- 理解 OCR 中“检测”和“识别”的区别
- 理解文档版面为什么会进一步增加复杂度
- 通过可运行示例建立 OCR 流水线直觉
- 理解 OCR 在表单、票据、文档场景中的特殊难点
一、OCR 通常分哪几步?
1. 文本检测
先找出文字区域在哪里。
2. 文本识别
再把每块文字区域转成字符序列。
3. 版面与结构理解
在复杂文档场景里,还要回答:
- 哪段先读
- 哪段属于标题
- 哪段属于表格或正文
二、先看一个最小 OCR 流水线示例
image_blocks = [
{"box": (0, 0, 50, 20), "pixels": "INV-001"},
{"box": (0, 30, 80, 50), "pixels": "TOTAL 299"},
]
def detect_text_regions(image_blocks):
return [block["box"] for block in image_blocks]
def recognize_text(image_blocks):
return [{"box": block["box"], "text": block["pixels"]} for block in image_blocks]
regions = detect_text_regions(image_blocks)
texts = recognize_text(image_blocks)
print("regions:", regions)
print("texts:", texts)
2.1 这个例子最关键的地方是什么?
它清楚分开了:
- 找文字在哪里
- 把文字读出来
这正是 OCR 最基础的两阶段结构。