"我用百度OCR试过了,识别出来全是乱码。"

这是一位餐饮企业的IT负责人跟我说的第一句话。他尝试用市面上主流的通用OCR接口识别食堂的手写订货单,结果惨不忍睹——"蒜米"识别成"算米","精瘦肉"识别成"精嫂内","西兰花"直接变成了乱码字符。

他不是个例。很多人以为OCR就是OCR,只要能认字就行。但实际上一张食堂手写订货单的识别难度,跟身份证、车牌、发票完全不是一个量级。这篇文章讲清楚,通用OCR和行业垂直OCR到底差在哪里。

通用OCR擅长什么,不擅长什么

通用OCR(比如百度OCR、腾讯OCR、阿里OCR)的设计目标是覆盖"尽可能多的场景"。它们背后的训练数据包括:

这些场景有一个共同特点:文字形态相对规范。即使是自然场景中的文字,大部分也是印刷体或标准手写体。

但食堂阿姨的手写订货单不在此列。

食堂手写单识别到底难在哪?

我们来看一张典型食堂订货单上的"灾难现场":

1. 字体极度潦草,超出通用模型的字典范围

通用OCR训练的是"正常手写体"——就是大部分人能看懂的那种手写。但食堂订单上的字很多是"极限潦草体":笔画粘连、省略、变形,有时候一个字只剩下2-3个笔画特征。通用模型从来没见过这种写法,自然认不出来。

2. 单位符号不是标准字符

"斤"这个字在手写订单上有十几种变体:潦草的"斤"、像"7"的简笔、一个圈加一竖、一个点——这些符号在标准字库里根本不存在,通用OCR要么识别错误,要么直接跳过。

3. 数字粘连和涂改

手写单上的"30"可能被涂改成"50",改的那一划和数字粘连在一起。通用OCR看到这个区域会尝试把它识别成一个字符,结果出来一个完全不存在的符号。

4. 没有固定格式,表格边界模糊

通用的表格识别模型针对的是有明确表格线的单据(如Excel打印出来的表格、发票)。但大部分手写订货单没有表格线,商品名和数量全靠位置关系判断。通用模型没有针对这种情况优化,所以在"哪一行对应哪一列"上就卡住了。

🔬 实测数据

我们用三款主流通用OCR接口测试了50张真实食堂手写订货单(合计约1200项商品),结果:

  • 平均单字识别准确率:约35%-55%
  • 整张单据可读率(能看懂大致内容):约20%-30%
  • 结构化输出准确率(正确提取商品名+数量+单位):约10%-15%
  • 结论:通用OCR处理食堂手写订单,基本不可用

行业垂直方案做了什么优化?

我们的系统跟通用OCR最大的区别在于三个方面:

1. 场景专项训练

通用模型的目标是"什么都能认一点",我们的模型只盯着食堂手写订单这一个场景。训练数据来自真实的手写食堂订单——就是那种皱巴巴、沾着油渍、字迹潦草的真实单子。模型学会了"这个像7的符号大概率是斤","这个糊成一团的三个字很可能是西兰花"。

2. 结构化后处理

通用OCR输出的是"一串文字"——比如"西兰花20斤蒜米5斤精瘦肉10斤",它不会帮你拆开。我们的系统包含一个专门的后处理引擎,能根据餐饮场景的语义规则,自动把这一串字符拆分成:品名→数量→单位的结构化数据。

3. 场景知识库(上下文推理)

系统内置了食堂常见食材库:包含2000+种常见食材及其别名("散花"=散花菜、"京包"=京包菜、"油麦"=油麦菜)。当识别结果比较模糊时,系统会结合食材库做最佳匹配——而不是像通用OCR那样直接输出一个没意义的字符。

一个直观的对比:

通用OCR看到"散花 40" → 输出:散花 40(它不知道这是散花菜,也不会加单位"斤")

行业方案看到"散花 40" → 输出:品名"散花菜",数量"40",单位"斤"(知道这是食堂常见的散花菜配货)

不是"能用"和"不能用"的区别,是"能用"和"好用"的区别

通用OCR不是不能用——如果你愿意花时间逐字校对、手动拆分、补录单位,那也能用。但那个时间加起来,跟手工录入没太大区别。

行业垂直方案的价值不是"认字",而是"直接把单子转成可用的数据"——上传一张图片,出来一个可以直接导入库存系统的表格。少了一个"人工转化"的步骤,这才是效率提升的真正来源。

· · ·

如果你手边正好有一张食堂手写订货单,不妨打开我们的工具箱体验版试试——你会发现,认不认得出,跟用什么引擎关系太大了。