CLOUDHAN · 云汉科技
云汉 CLOUDHAN
发现未及,成就新解 Beyond what's known. Beyond what's done.

墨享 AI 4 维评分怎么做的?
OpenCV 端侧推理的技术实现

用 OpenCV 4.9.0 + 离线 OCR 在手机端给手写笔记打分,每个用户的图片从头到尾不上传服务器。

为什么做这件事

手写笔记是最难被"算法看见"的内容形态。它不像选择题有标准答案,也不像代码可以编译检查。一张手写笔记好不好,取决于笔画工不工整、纸面整不整洁、行距留白合不合理、信息密度够不够——这 4 个维度,每一个都需要视觉理解能力。

我们最初尝试过调用云端 OCR API 拿坐标,效果不错但代价是用户的图片要上传到第三方服务器。这对学生用户、笔记隐私敏感的用户、还有离网环境下使用的用户都不友好。于是决定走一条更难的路:全部在手机端做

4 个评分维度的定义

我们用 4 个独立的评分维度(每个 0-25 分,总分 0-100):

技术栈与流程

Android 端,Java/Kotlin + OpenCV 4.9.0 Android SDK + Tesseract OCR(本地训练数据,chi_sim + eng)。完整流程:

  1. 图像预处理:灰度化 → 自适应阈值二值化 → 倾斜校正(霍夫变换)
  2. 版面分析:连通域 + 投影得到文字行区域
  3. 行内分析:得到单个字符的 bbox
  4. OCR 识别:每个字符走 Tesseract,拿到文本 + 置信度
  5. 4 维评分:上述独立模块各自输出 0-25 分
  6. 加权汇总:总分 = Σ 维度分;可配置权重(v1 默认均权)

全流程在 Android Worker Thread 跑,从不联网。一张 A5 笔记(约 1500×2000 像素)端到端耗时约 1.2-2.5 秒(中端机型,骁龙 7 系)。

踩过的坑

坑 1:彩色笔记会失败。二值化对纯黑墨水很稳,但遇到荧光笔、彩色水笔、彩铅就直接乱套。第一次跑出来有人用马克笔画彩虹笔记,OCR 字符全识别错。后来加了"前景色统一到深色"预处理,对纯文字场景不影响,对色彩场景就提示用户换笔记。

坑 2:网格纸和田字格干扰排版评分。原版 C3 排版评分会把网格线当成"内容",导致网格纸笔记分虚高。修复:先用形态学闭运算去掉细网格线再评分。

坑 3:低分辨率照片评分波动大。手机拍屏幕 500 万像素以下,笔画细节丢失,C1 分数不稳定。修复:检测照片分辨率,低于阈值时引导用户重拍或裁切。

坑 4:竖排文字与英文混排。Tesseract 对竖排不友好,对中英混排识别率也会掉。修复:先用投影判断是横排还是竖排,分情况走不同的 OCR 参数。

为什么坚持端侧

这是个反复被挑战的决策。每次有人提"云端大模型评分更准",我们都顶回去了。原因有 3 个:

  1. 隐私:学生笔记可能包含个人信息、考试内容、家长对话引用。这不是"数据敏感",是"绝对不能离开用户手机"。
  2. 成本:云端推理按调用次数计费,日活过 1 万就烧得离谱。学生付费能力有限,必须把成本压在免费档。
  3. 体验:离线可用是核心场景——图书馆、地铁、教室 WiFi 不稳定。端侧推理完全不受网络影响。

代价是评分精度比云端大模型差一截。我们接受这个 trade-off,把端侧作为底线,把云端作为未来可选增强(用户主动开启、明确授权后再上传)。

我们学到的

端侧 AI 评分不是"次优解",是"另一类解"。它牺牲了绝对精度,换来隐私、离线、成本三个硬优势。对学生这个用户群体,这套 trade-off 是更合适的选择。

未来方向:把 4 维评分变成可解释的——每张笔记打分时附带"哪几个区域被扣分、为什么扣分",让用户能照着改进。这比"AI 给你一个总分"有用得多。

我们也在实验用更小的端侧模型做风格分类("印刷体 / 行书 / 草书"),给 C1 评分加一个"书写风格稳定性"维度。这是下一个迭代要做的事。


← 回到博客

关于本文:作者 Eric Wang,云汉科技创始人。本文为技术随笔,方法与数字均来自墨享 InkShare v1.2 实际实现。