任务架构

ML Kit 多栏 OCR 阅读顺序与文本区域验证

保留 ML Kit Text/TextBlock/Line/Element 原始顺序和角点,把多栏或表格的应用展示顺序作为独立投影测试;不重复通用 OCR 架构、收据字段抽取或 EXIF 几何。

审核状态: 内容已校验;中文稿供用户审核 · 2026-10-08 · Fact IDs: MLKIT-READING-ORDER-2026-10, OCR-DEDICATED-01, COVE-OCR-01

直接回答

ML Kit Text Recognition V2 返回的是层级结构,而不只是一个字符串:Text 包含 TextBlock,block 包含 Line,line 包含 Element,Element 还可以包含 Symbol。各层提供识别文本和几何信息,包括轴对齐框和四个角点。应把原始结果、库返回顺序和应用自己生成的顺序分开保存。下游动作使用的字段要能追溯到原始 OCR element 或 line,而不能只留一个重新排序的字符串。 API 确实文档化了阅读顺序。Text.getText() 会按该语言的 reading order 拼接 block 文本;对拉丁文本,参考文档说明 TextBlock 内自上而下、Text.Line 内自左向右。这应作为识别器契约尊重。它不证明每种多栏文章、表格、旁注、脚注或表单的分组和顺序都符合产品任务。不要声称所有 OCR 列表都没有顺序,也不要说所有识别结果天然就是用户想要的顺序;应针对具体页面类别和配置脚本测试。 几何可以说明识别区域,却不会自动给出阅读逻辑。TextBlock、Line、Element 暴露轴对齐框和角点;角点按左上开始顺时针排列,但透视下不一定构成矩形,部分点也可能在图像外。轴对齐矩形可能与其他列或表格单元重叠。不能把所有区域按左上角 y 再 x 排序后称为自然阅读顺序:跨列表头、行交错、表格值、脚注和旁注都会让该启发式出错。保留原始角点以及它们对应的图像坐标基准。 定义产品所需阅读顺序前,先说明文档任务。两栏页面可以先读左栏再读右栏;另一个任务可能需要按行跨栏。表单可能要构建标签与值的配对,而不是输出一段线性转录。保留识别器原文,再生成带稳定区域 ID 和规则版本的独立投影;几何不能确定时允许用户复核。派生顺序不得覆盖原始识别,也不能补造未识别标点或单元格关系。 建立带人工参考结果的夹具:单栏段落、清晰双栏、跨栏标题、表格、页边注、倾斜/透视文字、空区域,以及所选识别器确实支持的混合脚本。比较原始 Text.getText、每个 TextBlock/Line/Element、预期区域归属和任务阅读顺序。分别记录源图身份、库版本、脚本选项、返回层级、角点和应用投影。如果某脚本没有列入该配置或其输出未验证,就记录不支持/未知;不要只靠几何推断 RTL 行为。 Android ML Kit Text Recognition V2 指南要求 API 23 或更高,并提供 bundled 与 unbundled 模型交付方式。锁定依赖和 recognizer 选项,因为已安装模型和支持脚本会影响真实路径。不要编造 block confidence API,也不要把缺失或零值当成替代证据。本文验证阅读顺序和区域归属,不主张超出配置 recognizer 的准确率、语言覆盖或通用阅读能力。 正确顺序取决于任务。阅读报纸、提取收据合计、供人工审核表单有不同验收规则。保留区域几何与原始识别文本,让审核者能找到每个投影项来源。当区域重叠或版面有歧义时,保持 API 原始顺序并请求修改,而不是静默重排字段。测试记录应注明每次顺序变化以及支持它的夹具。 本文是 Android ML Kit 集成方法,不是 Cove 功能报告。当前 Cove OCR 事实描述多模态模型生成的结构化可见文本字段,并不证明存在 ML Kit recognizer、TextBlock 树或多栏排序实现。明确记录识别提供方、语言选项、图像变换和应用投影,避免未来更换库后误以为行为完全相同。

双栏通知被识别出来,但顺序不适合后续任务

Android 文档工具读取一页内容:跨两栏的标题、正文段落、框选表格和页脚注释。OCR 文本可读,但后续字段动作按一个序列消费区域,导致两列交错并把值关联到了错误标签。

决策

保留 ML Kit 原始层级和文档化的语言顺序,再用区域几何与人工审核夹具验证针对该页面任务的独立排序投影。

预期结果

用户可以查看每个投影项对应的原始区域;含糊版面保留原始顺序或要求复核,不静默改变含义。

需要收集的证据

只有将以下证据与同一模型文件和测试运行关联起来,结论才可复核:

  • MLKIT-READING-ORDER-2026-10:拟新增事实卡,记录 Text API 层级、文档化语言阅读顺序和角点语义;待 Codex source/editorial review。
  • OCR-DEDICATED-01:ML Kit Text Recognition 提供 block、line、element 等结构;不表示任意版面投影都符合任务语义。
  • COVE-OCR-01:Cove Photo 当前事实描述多模态 Text 字段,不证明集成 ML Kit 或实现多栏排序。

任务质量需要有版本记录的语料和验收规则;流畅的单条样例不等于准确度结果。

实施流程

  1. 固定识别器和脚本契约. 记录 ML Kit Text Recognition V2 依赖、Android API 级别、bundled/unbundled 交付方式、脚本选项、输入路径和图像变换版本。仅测试该准确配置声明支持的语言和版面行为。
  2. 保留完整原始层级. 保存 Text.getText 以及每个返回的 TextBlock、Line、Element、原始列表位置、文本、boundingBox 和 cornerPoints。原始结果不可变;不要用重新排序的拼接串覆盖它。
  3. 记录区域几何而不假定矩形. 只在可取得时使用文档定义的角点和边界框。API 在没有结果时可返回 null,应保留为几何不可用,不创建假零矩形或解引用缺失角点。保留图像外的点,将重叠、跨栏标题和透视记录成证据,不自动决定顺序。
  4. 为任务定义阅读规则. 为目标文档编写版本化规则:按列、按行、标签/值或人工复核顺序。规则消费原始区域 ID 并生成单独投影。不要把拉丁语 Text.getText 规则外推到未支持脚本或所有多栏页面。
  5. 与审核版版面夹具比较. 覆盖单栏/多栏、跨栏标题、表格、页边注、倾斜文字、部分文本及配置支持的混合脚本。分别比较 API 原始顺序、区域几何和预期任务顺序;将识别错误与投影错误分开。
  6. 在执行动作前处理不确定性. 区域重叠或标签和值无法确定时,展示原文并在保存、搜索或自动动作前请求纠正。日志记录夹具和规则 ID,不保存私人页面内容,也不静默覆盖原识别结果。

让每个阶段的状态都可观察。失败信息应指出阶段、模型、运行时和恢复动作,同时避免记录用户私密内容。

验收标准

  • 记录准确 ML Kit 依赖、Android API 级别、交付选项和脚本配置;不支持的脚本或结果保持 unknown。
  • 原始 Text/TextBlock/Line/Element 和几何输出与应用生成的排序或字段投影分开保留。
  • 阅读顺序测试注明使用了哪条 API 保证并验证任务版面;不把通用 y/x 排序当成人类阅读顺序。
  • 歧义或重叠区域可供复核,投影保留源区域 ID,不宣称 OCR 准确率或 Cove 集成。

决策对照表

维度选择或证据解读方式
原始 Text.getText 输出保留配置 API 返回的语言阅读顺序ML Kit 对语言顺序有文档说明,包括拉丁文本在 block/line 内的规则;这仍是识别器输出,不等同所有版面的任务顺序。
基于几何的投影对区域 ID 与角点应用文档化规则可支持栏目/表格工作流,但简单 y/x 排序可能交错区域或拆散标签与值。
字段抽取将已审核区域映射到命名字段额外引入任务 schema 和校验,不等于 OCR 返回的行顺序。
人工复核版面版面含糊时保留原顺序并请求纠正避免静默语义改变,但需要清晰的审核状态和源区域追溯。

需要避免的失败模式

  • 把 API 返回的字符串、列表顺序直接当成每种多栏文档的人工任务阅读顺序。
  • 按全部 boundingBox 的 y/x 坐标简单排序,把表头、栏标题和旁注混在一起。
  • 把角点当成永远为矩形、完全落在图像内的坐标。

还要避免静默回退、版本未固定、缺少取消处理,以及把不同配置的结果混在一起下结论。失败运行也应与成功记录一并保存。

最小复现记录

层级记录内容
设备厂商、型号、芯片、内存档位、操作系统版本
软件应用版本和 Git 提交号
模型系列、变体、版本、格式、文件长度、摘要、量化方式
运行时名称、版本、请求后端及实际后端证据
工作负载样例版本、输入摘要、提示词摘要、输出策略
结果完成、失败、取消、回退及保护隐私的诊断信息

发布检查表

  • ☐ 主要搜索问题已回答,且没有未经支持的数字。
  • ☐ 所有模型文件和运行时版本均已固定。
  • ☐ 代表性任务和失败处理策略均有说明。
  • ☐ 生命周期、取消、清理和回退均已测试。
  • ☐ 用户内容与网络边界均有说明。
  • ☐ 结论只适用于被记录的配置。
  • ☐ 新增测试结果时链接到原始方法或证据。

来源与相关证据

中文部署与排错专题见。奇连 AI 端侧专题。

常见问题

ML Kit 会按阅读顺序返回文本吗?

API 说明 Text.getText 会按语言阅读顺序返回,并明确了拉丁文本在 TextBlock/Line 内的顺序。应将该契约对照实际多栏或表格任务验证;不能假设每种产品投影都等于识别结果字符串。

能按 boundingBox 的 y 坐标排序所有 TextBlock 吗?

不能将其当作通用规则。双栏、跨栏标题、表格、页边注、透视和混合脚本都会让简单的从上到下排序出错。保留 API 顺序,用审核夹具验证单独定义的投影。

cornerPoints 总是图像内的矩形吗?

不是。API 定义四个顺时针角点,但透视下区域可能非矩形,角点也可能位于图像边界外。保留原点坐标,并把裁切或变换作为独立几何契约处理。

这能证明 Cove 使用 ML Kit 或支持所有脚本吗?

不能。Cove 当前 OCR 事实描述的是多模态 Text 字段。本文仅适用于明确集成了固定版本 ML Kit 与经测试脚本选项的应用,不是 Cove 集成或广泛语言支持主张。