直接回答
OCR 流程应保留各阶段边界:采集图像、验证方向和裁剪、选择识别器、取得结构化文本区域、让用户纠正不确定内容,再把审核后的字段交给后续处理。专用文字识别 API 可能返回文字块、行或元素;多模态模型则可能按提示词返回一种解释结果。它们不是可以互换的输出,不能用相同验收规则评分。 离线能力取决于具体库和制品交付路径。Google ML Kit 文档介绍了打包在应用中的选项,以及通过 Google Play 服务提供的选项;未打包的模型可能需要先下载才能得到首次结果,而打包选项会在构建时随应用附带模型。因此,隐私或离线声明要写明实际选择,并测试首次设置和推理过程。刚安装后在飞行模式下、模型资源尚不可用时的测试,与资源已下载后的热启动测试不是一回事。不能因为模型被称作端侧就断言“OCR 全部离线”,仍需核对下载、遥测、备份和导出。 图像准备是重要环节。CameraX 提供旋转元数据和 ImageAnalysis;识别失败时也要释放 ImageProxy。文件导入应谨慎处理 URI 和权限生命周期,只解码所需图像,并记录裁剪、缩放和方向变换。ML Kit 官方指导指出,对焦、分辨率和文字尺寸会影响识别;质量不足时应提示用户重新拍摄。不要编造准确率百分比,也不要保证所有文字体系都能识别。 输出契约要匹配用户任务。收据流程可能需要商家、日期、合计和项目;菜单翻译流程需要原文和单独的译文。只有所选库确实提供时,才保留来源区域或置信度元数据。不能把模型猜测静默映射成可信字段。应允许用户审核、修改、拒绝或复制识别文本。原图与提取文本要分别定义保留策略。 实现前比较三种架构:专用 OCR 识别器、多模态模型读取可见文字,或 OCR 提取区域再由另一模型翻译或解释。三者的输出结构、模型交付、首次运行和验证要求都不同。不要从 Cove Photo 代码路径推断 OCR 准确率;事实卡仅记录其结构化 detectedText 字段和导出操作,不是基准测试。 实施时先定义可编辑输出结构,区分必填字段、建议值、原文区域、纠正和拒绝;固定输入来自相机还是文件 URI,记录旋转、裁剪、分辨率及资源所有权;核实识别器是否打包或动态下载,并在首次离线与资源可用后分别验证;最后检查结构化结果、显示不确定字段,允许修改,再单独测试复制和导出。成功、取消和异常时都要释放图像帧、缓冲、识别器会话及临时文件。审核者需要看出每个字段来自哪条流水线,以及还有哪些部分需用户确认。
收据照片生成离线费用草稿
用户拍摄收据后希望获得一份费用草稿中的可识别文本,而不是自动生成可信财务记录。Android 团队需要决定用专用 OCR API、多模态模型,还是分阶段组合处理。
决策
把图像采集、识别、理解和用户确认拆为独立阶段,并在产品承诺的网络条件下验证模型交付路径。
预期结果
用户可以检查和修改提取字段;测试报告保留输入、变换、结果结构和离线边界。
需要收集的证据
只有将以下证据与同一模型文件和测试运行关联起来,结论才可复核:
- 输入图像与变换记录
- 识别器交付和首次运行状态
- 字段到原文或用户修改的映射
任务质量需要有版本记录的语料和验收规则;流畅的单条样例不等于准确度结果。
实施流程
- 定义可编辑输出结构. 列出必填字段、可选建议、来源区域、纠正方式和拒绝行为。把检测到的文字与译文或推断值分开,不要把模型生成的金额标成已经核实的财务数据。
- 控制输入方向与资源寿命. 记录图像来自 CameraX 还是文档 URI,传递正确的旋转和裁剪,并将分辨率限定到任务所需范围。处理成功或失败后都关闭 ImageProxy 和缓冲。
- 验证识别器和模型交付方式. 查明识别器是打包进应用还是由服务动态下载,显示资源是否就绪,并分别测试全新安装的离线状态和资源可用后状态。不能用此前热启动结果推断首次使用也离线。
- 审核、校验并有意导出. 检查结构化结果和存在的区域元数据,提示低质量或缺失字段,允许修改或拒绝,再单独测试复制和导出。原图与识别文本分别遵守保留和删除规则。
让每个阶段的状态都可观察。失败信息应指出阶段、模型、运行时和恢复动作,同时避免记录用户私密内容。
验收标准
- 每个已保存字段都能追溯到识别原文、模型解释或用户明确修改。
- 离线结论说明所需模型是否已存在,或首次使用仍需下载。
- 成功、取消和失败路径均释放图像、相机帧、识别器资源和临时缓冲。
决策对照表
| 维度 | 选择或证据 | 解读方式 |
|---|---|---|
| 专用 OCR API | 结构化文字块、行或元素 | 适合处理文本区域,但需核实制品交付与文字体系范围。 |
| 多模态模型转写 | 按提示解释图像文字 | 可按任务生成结果,但猜测仍不可信,应供用户审核。 |
| OCR 加另一个模型 | 先识别再翻译或解释 | 保留阶段边界,但增加另一项模型和交付要求。 |
需要避免的失败模式
- 把专用 OCR 和自由文本模型结果混为一谈
- 根据热启动测试宣称首次离线可用
- 自动把模型猜测保存为可信字段
还要避免静默回退、版本未固定、缺少取消处理,以及把不同配置的结果混在一起下结论。失败运行也应与成功记录一并保存。
最小复现记录
| 层级 | 记录内容 |
|---|---|
| 设备 | 厂商、型号、芯片、内存档位、操作系统版本 |
| 软件 | 应用版本和 Git 提交号 |
| 模型 | 系列、变体、版本、格式、文件长度、摘要、量化方式 |
| 运行时 | 名称、版本、请求后端及实际后端证据 |
| 工作负载 | 样例版本、输入摘要、提示词摘要、输出策略 |
| 结果 | 完成、失败、取消、回退及保护隐私的诊断信息 |
发布检查表
- ☐ 主要搜索问题已回答,且没有未经支持的数字。
- ☐ 所有模型文件和运行时版本均已固定。
- ☐ 代表性任务和失败处理策略均有说明。
- ☐ 生命周期、取消、清理和回退均已测试。
- ☐ 用户内容与网络边界均有说明。
- ☐ 结论只适用于被记录的配置。
- ☐ 新增测试结果时链接到原始方法或证据。
来源与相关证据
- ML Kit text recognition
- Google for Developers — Android ML Kit 文字识别
- Android Developers — CameraX 图像分析
- Google for Developers — ML Kit Text Recognition v2
中文部署与排错专题见。奇连 AI 端侧专题。
常见问题
ML Kit 文字识别一定能离线运行吗?
不能默认如此。官方 Android 文档列出打包和 Google Play 服务交付选项;未打包模型可能需要首次下载。应测试准确依赖和资源状态。
多模态模型能完全取代专用 OCR 吗?
它们返回的证据不同。专用 OCR 可能提供文字区域;模型则按任务提示解释内容。应根据输出契约选择,并让用户校验推断结果。
识别文本应该自动保存吗?
只有产品已清楚说明且结果通过预期检查时才考虑。财务、身份等重要字段应保留审核、修改或拒绝步骤,并单独说明原图如何保留。