ARTICLE · 1351574
试卷识别的「中级杀招」:搞不定图片和排版,OCR 再准也白搭
上一篇我们聊了试卷识别的入门篇——纯文字的识别。评论区有朋友留言说:「文字识别我用 PaddleOCR 就够了,挺准的。」
没错,纯文字确实是新手村。
但只要你的试卷里出现了数学公式、化学方程式、几何图形、电路图、函数图像,难度就瞬间跳了一个台阶。同样的「识别」,看起来还是那两个字,实际上你已经从新手村走进了中级副本。
这篇文章,就聊聊我在做「试卷工坊」这个组卷工具时,踩过的坑、试过的方案,以及最后跑通的那条路。
先说清楚:试卷识别到底难在哪?
很多人以为试卷识别的难点是「认字认不准」。
其实不是。现在的 OCR 认印刷体汉字,准确率已经相当高了。真正的难点是这三个:
- 公式不是文字,是结构。
一个分式,分子在上、分母在下、分数线横在中间,这是二维结构。而 OCR 的输出是「一行一行的文字」,是线性结构。二维压成一维,信息必然丢失。积分上下限、根号里面套根号、矩阵——每一个都是重灾区。 - 图片是「语义黑洞」。
一道几何题里放了个三角形图,题目文字里写「如图所示」。OCR 只能把图片当成一块「识别不了的黑色区域」,至于图里画了什么、和题目的对应关系是什么,传统 OCR 完全无感。 - 排版是隐形的骨架。
一张试卷有题号、大题标题、选项 ABCD、答题空格、分栏、页眉页脚。识别出来一堆文字流不难,难的是把它们还原成结构化的题目:这道题从哪开始、到哪结束、选项怎么归组。丢了这个骨架,你识别得再准,也只是得到一锅文字粥。
换句话说:文字识别是体力活,图片理解和排版还原才是脑力活。 这就是中级杀招的真正含义。
方案一:传统 OCR——快、免费,但只解决了一半
以 Tesseract、PaddleOCR 为代表。这是我最早用的方案,也是大多数人本能会选的方案。
它的优点非常实在:
- 免费开源
,本地就能跑,没有任何调用成本。 - 速度快
,一张试卷秒级出结果。 - 纯文字识别准确率不错
,中文印刷体基本没问题。
但放到试卷场景里,短板暴露得很快:
- 公式基本报废。
识别出来的公式是「x2+2x=1」这种串行乱码,上下标全部拉平,分式变成斜杠,根号变成乱码字符。想拿去做题库,等于要人工把每道数学题重敲一遍。 - 没有版面概念。
它不知道什么是题号、什么是选项,输出就是「按行排列的文字 + 每行的坐标」。排版还原全靠自己写后处理逻辑,工作量比识别本身还大。 - 图片只有坐标没有内容。
它能告诉你「这里有一张图」,但图里是什么,一概不知。
我的结论:传统 OCR 适合纯文科试卷、纯文字段落场景。一旦有公式和图片,它只完成了「搬运文字」,没完成「理解试卷」。
方案二:啃公式这块硬骨头——商业服务测评 + 自研流水线,我都试了
意识到公式是硬伤之后,我干了两件事:一是把市面上主流的商业识别服务挨个测评了一遍,二是自己动手用开源组件搭了一条自研流水线。两条路都走到了能出结果的程度,所以两边的感受都是第一手的。
先说商业服务的测评结论。 市面上有一类专门做「PDF/图片转结构化文档」的商业服务,主打公式识别这个细分赛道,用「公式转 LaTeX」当关键词一搜就能找到好几个。我横向测下来,各家能力差距比想象中大——同样是转 LaTeX,有的分式嵌套都能还原,有的连根号都认不全。挑到靠谱的那家之后,共同的优势很明显:
- 公式识别是质变。
输出直接是 LaTeX,分式、上下标、根号嵌套都能正确还原。数学试卷的公式终于「可编辑」了,这是传统 OCR 给不了的能力。 - 版面还原能力强。
双栏、表格、题号层级,它都能给出大致的结构化输出(Markdown 或类似格式),比你自己从 OCR 坐标里手搓排版逻辑,省了至少一个量级的工作量。 - 图片处理是「裁剪保留」策略。
它识别到图片区域后,把原图裁出来嵌入到文档对应位置。这其实很聪明——图片不需要「识别成文字」,保真嵌入就是最好的识别。
当然,短板也得说:
- 要花钱。
按页计费,批量处理大题库时成本是实打实的。好在试卷场景通常一次导入、长期使用,成本可控。 - 对扫描质量敏感。
拍照歪斜、光线不均的老试卷,公式识别准确率会明显下降,仍需人工校对。 - 图片只是「原样搬运」。
它能保证图片出现在正确的位置,但图片的语义(这题是几何题还是函数图像题)它不告诉你。如果你要做「按知识点组卷」「按题型分类」,光有图片文件不够,还得知道图是什么。 - 黑盒不可控。
识别规则、模型版本、输出格式都攥在服务方手里,它哪天调接口、改格式、涨价,你只能被动接受。
再说我的自研流水线。 不想被按页计费锁死,我也自己搭过一版:开源的版面检测模型负责切区块,开源的公式识别模型负责转 LaTeX,中间的拼接、坐标换算、结果合并全靠我自己写的后处理代码粘起来。
- 完全可控,零调用成本。
模型跑在本地,数据不出门,想怎么改就怎么改。 - 但工程量是真大。
版面模型在中文试卷上的表现要自己调,公式模型挑来挑去总有短板,光「把各模块的输出对齐到同一个坐标系」这件事就折腾了我很久。 - 公式准确率与最好的商业服务仍有差距。
尤其是根号嵌套、矩阵这类复杂结构,开源模型明显吃力。
两条路测下来,我的结论是:公式这一层,自研可行但代价高,商业服务成熟但不可控——真正的问题不是「选哪个」,而是「怎么把各家能力组装成自己的方案」。 这个判断直接决定了后面的架构设计。
方案三:VLM(视觉大模型)——理解力最强,但会「一本正经地胡说」
再后来,多模态大模型火了。GPT-4o、Qwen-VL、GLM-4V 这类模型,把一张试卷图丢进去,它不光能认字,还能告诉你「这是一道考查二次函数的几何题,配图是一个抛物线与直线的位置关系」。
听起来像终极答案,对吧?实际用下来,体验是分裂的:
- 语义理解无敌。
它能总结题目、判断题型、描述图片内容、甚至标注考查知识点。这是前面所有方案都做不到的。 - 公式转写能力强
,多数情况下能输出正确的 LaTeX。 - 结构化输出顺手
,让它按 JSON 格式吐题目列表,它真能给你吐出来。
但是——它有一个致命的问题:
- 幻觉。
公式里一个小小的下标、一个负号、一个系数,VLM 可能会「脑补」。它不是在逐像素识别,而是在「理解 + 复述」。对一道数学题来说,把 2x 认成 x² 是不可接受的错误,但 VLM 恰恰会犯这种错,而且犯得理直气壮。 - 坐标不可靠。
你想让它输出图片区域的精确位置用于裁剪?它的坐标输出经常飘,差个几十像素很正常。 - 慢且贵。
一页试卷的推理成本远高于传统 OCR,批量处理几十套试卷时,时间和费用都要掂量。
我的结论:VLM 是最强的「理解者」,但是最不可靠的「抄写员」。 让它抄题,它会偶尔抄错还不告诉你;让它讲题,它讲得头头是道。
最优解:不是选一个,而是我自己搭一条流水线,让它们各干各的
试了一圈之后我明白了:这几个方案根本不是竞争关系,而是一条流水线上的三个工种。
所以我最终没有「转向」任何一家,而是自己定义了这条流水线:每一层的能力都是可插拔的——商业服务也好、开源模型也好,谁准用谁、接口统一;而把这些能力粘起来、让它们对齐到同一套结构的那层「胶水」,才是这套方案真正的价值所在。
真正跑通的架构,是这样分层的:
- 版面与公式:能力可插拔,主干交给专业识别。
版面结构、公式转 LaTeX、图片区域定位与裁剪——这是「抄写员」的活,要求的是准确和稳定。这层我保留了两套实现随时切换:商业服务和自研模型各有场景,谁适合谁上,但对外吐出的格式完全一致。 - 图片:保真裁剪 + VLM 补语义。
图片本身不要让任何模型「识别」,直接按坐标裁原图嵌入——裁剪逻辑是我自己写的,因为只有自己掌控坐标系,才能保证题目配图和原卷一字不差。裁出来后让 VLM 做描述和打标:这是什么类型的图、大概考查什么内容。图片文件用于展示,VLM 的描述用于检索和组卷。 - VLM 做质检员,不做抄写员。
全部转写完成后,可以让 VLM 拿着原图和转写结果做交叉校对,指出可疑的公式。但最终以公式识别层的转写为准,VLM 只提供「这里可能有错」的线索。 - 排版还原:靠版面结构 + 自研规则引擎。
题号归组、选项配对、大题切分这类高度规律的结构,我全部用自己写的规则处理——它比大模型更稳定、更便宜,而且规则就在自己手里,遇到新的版式随时加一条就行。
一句话总结这条路线:结构靠专用工具,语义靠大模型,图片靠原图,校对靠交叉验证——而把这一切粘起来的那层胶水,是自己写的。
写在最后
回过头看,「试卷识别」这个听起来很单一的需求,拆开其实是三层完全不同的问题:认字、认图、认结构。
新手期的我总想找一个「万能方案」一个搞定所有,结果在哪一层都会卡住。后来才意识到,工程上成熟的方案从来不是选最强的那个工具,而是把问题切开,让每个工具只做它最擅长的那一层——然后用一个统一的中间格式(我们是 Markdown + LaTeX)把它们粘起来。
这层「胶水」本身不值钱,写出来也就几百行代码。但它背后的判断——哪层该外包、哪层必须自己掌控、哪个方案在什么场景下会失效——是拿真金白银和时间换来的。这,才是自研方案的意义。
如果你也在做题库、做 OCR、做任何「把纸面信息变成结构化数据」的事,希望这篇能帮你少踩几个坑。
下一篇,准备聊聊题库建好之后的下一步:怎么基于结构化的题库做智能组卷。有兴趣的朋友可以先关注,别走丢。















































































