代码改变世界

OCR、VLM、ASR 到底有什么区别?一文讲清

2026-11-11 06:43  AlfredZhao  阅读(0)  评论(0)    收藏  举报

初学文档处理或多模态应用时,常会碰到 OCR、VLM、ASR 这几个缩写。它们都和“把信息变成文字或答案”有关,但分工完全不同。笔者用一句话先概括:OCR 负责抄字,VLM 负责看懂画面并推理,ASR 负责把声音转成文字。

flowchart LR A["声音"] -->|ASR| B["文字"] C["图片中的文字"] -->|OCR| D["文字 + 坐标"] E["整张图片(物体 + 文字 + 布局)"] -->|VLM| F["回答 / 摘要 / JSON"] D --> G["后续 LLM 解析"] F --> H["需校验,抑制幻觉"]

01 | OCR:字符级精准提取

OCR 全称 Optical Character Recognition,即光学字符识别。它的目标是字符级精准提取:检测文字框、识别每个字符,输出文本和坐标。

OCR 知道“写了什么”,但不知道“是什么意思”,也不会推理。它的输出通常包含原文、坐标框和置信度,确定性强。速度上,OCR 通常比 VLM 快,轻量模型在 CPU 上也能运行,单张小图可到毫秒级;实际耗时取决于模型、图片分辨率和批量,成本也随部署方式变化。在干净印刷文档上,它的准确率更高,字符更稳。

典型例子有 PaddleOCR、Tesseract、阿里云文字识别。

02 | VLM:看懂画面并理解文字

VLM 全称 Vision-Language Model,即视觉语言模型。它的目标是图像加文本的联合语义理解、问答和推理。文字只是画面信息的一部分,VLM 还能理解图表、布局、物体和关系。

VLM 既能读字,也能算、判断、解释、摘要、看图问答。输出可以是自然语言、JSON 或摘要,但它容易幻觉,编造不存在的文字。速度上,VLM 较慢,需要 GPU,达到秒级,按 token 计费,成本高很多。它的输出可能受采样参数、模型版本等因素影响,同样图片两次结果未必完全一致,不利于强审计。

典型例子有 Qwen-VL、LLaVA、GPT-4o Vision、Claude Vision。

flowchart TB subgraph OCR["OCR:字符级提取"] O1["检测文字框"] --> O2["识别每个字符"] --> O3["输出文本 + 坐标 + 置信度"] end subgraph VLM["VLM:联合语义理解"] V1["理解整张图:文字、图表、布局、物体、关系"] --> V2["问答 / 推理 / 摘要"] --> V3["输出自然语言 / JSON"] end O3 -->|"知道写了什么,不知道意思"| X["无视觉上下文"] V3 -->|"能算、判断、解释"| Y["存在幻觉风险"]

03 | 一张发票就能分清

拿一张发票图片举例。OCR 会把图片里所有文字、金额、日期、二维码文字全部抠出来,附带每个字的坐标,但它不知道哪个是总金额。

VLM 则可以针对“这张发票价税合计多少?开票方是谁?”这类问题给出答案,也能辅助判断是不是专票、备注有没有问题,但结果仍需校验。

再比如一张数学卷子截图:OCR 把题目文字全部提取出来;VLM 能读题,直接算出答案并讲解步骤。

flowchart LR IMG["发票 / 试卷截图"] --> OCRP["OCR"] IMG --> VLMP["VLM"] OCRP --> R1["全部文字 + 坐标<br/>不知哪个是总金额"] VLMP --> R2["直接回答提问<br/>需校验,可能幻觉"]

04 | 什么时候选谁

优先用 OCR 的场景:大批量扫描归档、电子书、票据入库、车牌识别、身份证识别;只需要拿到原始文字,后续交给 LLM 解析;强合规、审计、需要字符坐标、低延迟、高吞吐的场景。经典做法是 OCR 转文本,再由 LLM 提取字段。

优先用 VLM 的场景:图文混排、截图代码、图表、流程图、手写笔记、试卷批改;需要看图问答、跨视觉元素推理;小批量、多变版式,不想维护大量模板和规则。

生产环境常用混合流水线:先用低成本 OCR 拿全文和坐标;按业务设定置信度阈值,对低置信区域、复杂表格或图表再路由给 VLM 做校验、提取和推理;关键业务用 OCR 文本做交叉校验,并保留回退到 OCR 结果或人工复核的路径,以压制 VLM 幻觉。

flowchart TB S["输入图片"] --> OCRS["低成本 OCR:全文 + 坐标"] OCRS --> J{"置信度是否达标?"} J -->|"达标"| OK["采用 OCR 文本"] J -->|"低置信 / 复杂表格 / 图表"| V["路由给 VLM:校验、提取、推理"] V --> C["用 OCR 文本交叉校验"] C --> D{"校验通过?"} D -->|"通过"| OUT["输出结果"] D -->|"不通过"| FB["回退 OCR 结果或人工复核"] OK --> OUT

05 | 容易踩的坑

第一,不要迷信 VLM 万能读文档。对需要一字不差的档案、票据存证,VLM 不如 OCR 稳,可能凭空造字。

第二,不要用 OCR 去做理解。OCR 识别出来的文字是一堆字符串,没有视觉上下文。

第三,现在有一类面向文档的模型和工具,例如 Donut、Nougat、MinerU,偏向文字提取与结构化理解的结合,但定位和实现各不相同,使用时仍需关注幻觉风险。

06 | 和 ASR 串起来看

ASR 是声音转文字,像耳朵;OCR 是图片里的文字转文字,像抄写员;VLM 是整张图片加问题转回答,像眼睛加大脑。三者各司其职,选对工具,才能把文档和多媒体处理做稳。

flowchart LR ASR["ASR<br/>耳朵"] -->|"声音 → 文字"| T1["文字"] OCR["OCR<br/>抄写员"] -->|"图片文字 → 文字"| T2["文字 + 坐标"] VLM["VLM<br/>眼睛 + 大脑"] -->|"图片 + 问题 → 回答"| T3["回答 / 推理"]

关注我,和AI一起成长~