直接答案:ML Kit 是 Google 为 Android 与 iOS 提供的端侧机器学习 SDK,适合把中文文字识别、条码扫描、人脸检测、图像标注、姿态、翻译、语言识别等能力嵌入移动应用。2026 年的 Android 版本还加入基于 Gemini Nano 的端侧 GenAI API,但它只在列明的设备、系统和模型状态下可用。ML Kit 的输入与推理通常在设备端完成,不等于应用永不联网:未打包模型可能首次动态下载,SDK 会获取模型/兼容信息并发送诊断指标,应用自己的上传与后端也仍由开发者负责。

ML Kit 是什么,和 Firebase、LiteRT、云 API 有什么区别
Google 的 ML Kit 总览将它定义为面向移动应用的 SDK,提供 Vision、Natural Language 与 GenAI 等高层 API。传统 API 把常见的图像预处理、模型调用和结果结构封装好,开发者不必先搭建训练平台;代价是任务、模型输入输出和设备支持受到产品边界约束。
| 名称 | 它负责什么 | 适合 | 不要混淆 |
|---|---|---|---|
| ML Kit | 移动端高层任务 API 与部分自定义图像模型接入 | OCR、条码、检测、语言与受支持 GenAI | 不是通用训练平台 |
| LiteRT(原 TensorFlow Lite) | 在端侧运行自有模型的通用运行时 | 需要自定义算子、张量和完整推理控制 | 不自动提供 ML Kit 的任务管线 |
| Firebase ML/Model Deployment | 模型托管、下发或历史上的 Firebase ML Kit 接口 | 需要远程更新模型的应用 | 旧 Firebase on-device API 正在迁移 |
| Google Cloud AI API | 服务器端模型与托管推理 | 设备算力不足、集中治理或云端工作流 | 输入会离开设备,成本和合规另算 |
官方迁移指南说明,旧 Firebase ML Kit 的设备端基础 API 应迁移到独立 ML Kit SDK,并给出旧接口的停用时间。维护老项目时先查依赖坐标和迁移状态,不要只把包名替换后就发布。若任务需要任意自有模型,先看 ML Kit 自定义模型限制:目前高层接入主要围绕图像标注和对象检测/跟踪的兼容 LiteRT 图像分类模型,并非任何 `.tflite` 都能直接套用。
先按搜索意图背后的真实任务选 API
| 产品需求 | 优先路线 | 关键边界 | 验收样本 |
|---|---|---|---|
| 扫描中文票据、菜单或路牌 | Text Recognition v2 中文脚本模型 | 清晰度、方向、字体与版面影响结果 | 真实设备拍摄的简繁体、数字和表格 |
| 只需系统式扫码界面 | Google Code Scanner(Android) | 由 Play services 提供界面,定制少 | 目标码制、远近、反光和弱光 |
| 需要自定义相机与连续帧 | ML Kit Barcode Scanning | 自行管理 CameraX、帧率和生命周期 | 旋转、快速移动、重复帧与无结果 |
| 识别人脸特征 | Face Detection | 检测不等于身份识别,不应用于无授权识别 | 角度、遮挡、肤色、光线与误触发 |
| 固定类别的行业图像 | 自定义图像标注/对象检测 | 模型张量、元数据和类别必须兼容 | 业务分布、未知类和低置信度 |
| 摘要、改写、图像描述或自定义提示 | ML Kit GenAI(Android) | 限定设备、AICore、前台使用与配额 | 支持/不支持设备、下载、忙碌与安全降级 |
不要把“端侧 AI”当成单一能力。OCR 的确定性输出、条码的结构化结果与生成式文本的非确定性输出需要不同验收标准。涉及开放式图像理解,可参考视觉语言模型任务选型与评测指南;涉及模型与数据验收,可参考Labelbox 数据、评估与安全工作流。
Android 中文 OCR:bundled 和 unbundled 怎么选
Text Recognition v2 Android 官方页把中文、日文、韩文、天城文与拉丁文字模型分开,并提供两种交付方式。Bundled 模型随应用打包,首开即可用但增加安装包;unbundled 模型通过 Google Play services 动态下载,包体增量小,但首次使用前可能尚未就绪。当前版本号和最低 Android API 会变化,应以集成当天的官方页和依赖解析结果为准。
| 维度 | Bundled | Unbundled/Play services | 决策建议 |
|---|---|---|---|
| 首次可用 | 安装后模型就在包内 | 可能等待下载 | 离线首开硬要求选 bundled |
| 应用体积 | 每个脚本模型增加较多体积 | 应用增量较小 | 多脚本需权衡总包体 |
| 更新 | 随应用版本更新 | 可由 Play services 下发 | 受控环境需记录版本策略 |
| 网络/服务依赖 | 推理不需要下载 | 首次或更新时需要服务可用 | 无 GMS 设备不能默认可用 |
| 失败体验 | 主要处理权限、输入和推理错误 | 还要处理未下载、下载中和失败 | 必须提供状态与重试,不要空白 |
以 Android 中文模型为例,官方页给出的 bundled 依赖形式为:
dependencies {
// 版本号请在发布当天对照官方文档和依赖公告复核
implementation("com.google.mlkit:text-recognition-chinese:16.0.1")
}
最小调用链是把相机帧、Bitmap 或文件转成 InputImage,用 ChineseTextRecognizerOptions 创建客户端,异步处理并在生命周期结束时关闭。下面代码只展示结构,不包含 CameraX 权限、旋转、背压和线程治理:
val recognizer = TextRecognition.getClient(
ChineseTextRecognizerOptions.Builder().build()
)
val image = InputImage.fromBitmap(bitmap, rotationDegrees)
recognizer.process(image)
.addOnSuccessListener { result ->
// 保存层级结构:Text -> Block -> Line -> Element/Symbol
renderResult(result)
}
.addOnFailureListener { error ->
showRecoverableError(error)
}
override fun onDestroy() {
recognizer.close()
super.onDestroy()
}
中文 OCR 不能只看“整段看起来对”。建立字段级样本:姓名、日期、金额、小数点、币种、发票号、简繁体、竖排、表格、低对比、反光和裁切。用精确匹配、字符错误率和关键字段通过率分别衡量;金额或身份字段不应因整体字符率高就自动提交。对 OCR 后的文档语义抽取,应另建解析与人工确认层,而不是宣称 OCR 已“理解文档”。
条码扫描:Code Scanner 与 Barcode Scanning 的取舍
Google Code Scanner适合 Android 上只需一次扫码结果、不想自建相机 UI 的场景。官方说明相机处理由 Google Play services 完成,应用本身无需申请相机权限,并只收到扫码结果。需要取景框、批量扫描、连续帧、叠加层或自定义交互时,应使用Barcode Scanning API并自行管理相机。
- 只配置实际需要的码制,可减少无关检测;
- 检查条码在图像中的像素尺寸,不要只提高整张图分辨率;
- 连续帧一次只处理一帧,完成后再放行,避免堆积与发热;
- 对相同内容做短时去重,同时保留用户再次扫描的入口;
- 扫码结果是外部输入:URL、Wi-Fi、支付或业务指令必须校验和确认。
条码“识别成功”不等于“内容安全”。对 URL 先显示域名和协议;对业务 ID 在服务端验证权限与状态;对可能触发付款、登录或设备配置的内容要求用户确认。客户端解析失败、网络失败和服务端拒绝要分开提示,便于定位。
端侧 GenAI:Gemini Nano 能做什么,为什么必须先查设备
ML Kit GenAI 总览列出摘要、校对、改写、图像描述、语音识别与 Prompt 等能力,它们通过 Android AICore 调用设备上的 Gemini Nano。文档同时给出具体支持设备,强调 feature-specific API 与 Prompt API 的设备列表并不完全相同,语言还取决于设备配置和已下载模型。它不是 Android/iOS 普遍可用的同一层能力。
Prompt API 入门页要求先检查 AVAILABLE、DOWNLOADABLE 或 UNAVAILABLE,可下载时再展示下载进度。AICore 还会施加每应用推理配额,后台调用可能被阻止,解锁 bootloader 的设备也不受支持。产品必须把这些状态做成正常分支,而不是捕获异常后显示“AI 出错”。
| 状态/限制 | 用户看到什么 | 应用动作 | 降级路线 |
|---|---|---|---|
| AVAILABLE | 功能可启动 | 仍检查语言、输入长度与安全 | 保留非 AI 基础功能 |
| DOWNLOADABLE | 模型尚未就绪 | 解释大小/网络,显示可取消进度 | 稍后或使用服务器方案(获同意) |
| UNAVAILABLE | 设备或配置不支持 | 不要无限重试 | 隐藏功能或提供透明替代 |
| BUSY/配额 | 暂时不可用 | 指数退避并限制并发 | 保存输入,稍后重试 |
| BACKGROUND_USE_BLOCKED | 离开前台后中断 | 把推理绑定到可见交互 | 恢复前台后明确重启 |
| 输出不可靠 | 结果可能错漏 | 标识 AI 输出并做任务级验证 | 人工编辑或不用生成结果 |
生成式输出不应直接改写医疗、财务、法律、安全或身份数据。把输入拆成可核验任务、保存原文与差异、设置最大输出,并让用户确认关键变化。事实主张可使用原子主张—证据核验框架;提示词反复失败时按提示词失败诊断流程缩小范围,而不是继续增加“绝对准确”等无效指令。

隐私边界:端侧处理不等于零网络、零数据披露
ML Kit Terms & Privacy说明,API 输入(图像、视频、文本)和输出在设备端处理,不会作为输入/输出发送到 Google 服务器;同页也说明 SDK 可能联系 Google 获取修复、模型更新和硬件加速兼容信息,并发送性能与使用指标。两句话必须同时呈现,不能只摘取前半句。
Android 数据披露指南列出设备信息、应用信息、标识符、性能、API 配置、输入输出大小、版本、事件和错误码等诊断/分析数据,并按功能列出额外项。开发者仍负责根据实际依赖、配置和自身业务填写 Google Play Data safety;ML Kit 的说明不能替代你对广告、分析、崩溃、上传、账户和后端的完整盘点。
| 数据路径 | 是否离开设备 | 谁负责 | 应向用户说明 |
|---|---|---|---|
| ML Kit 输入与推理输出 | 官方称在设备端处理 | Google SDK + 应用集成 | 处理目的、权限与保留方式 |
| 动态模型/修复/兼容信息 | 可能联网 | SDK/Play services | 首次下载、网络和存储需求 |
| SDK 诊断与使用指标 | 会按文档发送 | SDK 与开发者披露 | 数据类型、用途和政策链接 |
| 应用上传到自建后端 | 由你的代码决定 | 应用运营者 | 接收方、保存期限、删除与安全 |
| 第三方分析/广告/崩溃 SDK | 按各 SDK 行为 | 应用运营者 | 不能用“ML Kit 在端侧”掩盖 |
敏感场景采用数据最小化:尽量只处理裁剪后的必要区域;不保存原图就不要默认落盘;日志不要记录 OCR 全文、条码内容或提示词;调试样本脱敏;提供删除和权限撤回;对儿童、生物特征、证件和健康数据增加法律与安全审查。更系统的本地/云端取舍见本地部署与云端模型决策指南。
性能与准确率:必须在目标设备和真实输入上测
厂商文档中的“实时”或模型卡数字不能替代你的设备矩阵。处理相机流时,分辨率越高并非总是越好:目标必须占足够像素,同时要控制帧处理、内存复制、旋转和 UI 绘制。先定义用户能接受的响应时间、发热、电量和失败恢复,再选输入尺寸与调用频率。
- 建立设备矩阵:最低系统、主流中端、旗舰、无 GMS/受限网络设备,以及至少一台低内存设备;
- 建立输入分层:清晰、模糊、弱光、反光、旋转、遮挡、小目标、复杂背景和业务极端值;
- 记录冷启动:区分模型已在设备、首次下载、下载失败和应用重启;
- 记录端到端延迟:包含相机、预处理、推理、后处理与 UI,不只计模型调用;
- 测质量而非演示:按字段、类别与风险分层,报告误报、漏报和拒绝率;
- 测持续负载:观察 5—10 分钟连续运行的温度、耗电、帧堆积和崩溃;
- 验证降级:模型未下载、权限拒绝、离线、配额、后台和不支持设备都要有明确路径。
模型评估要保留样本来源、版本、设备、系统、SDK/模型版本、阈值、指标定义和失败案例。不要只展示几个成功截图;更不要把内部测试外推成“准确率 99%”。推荐系统文章中的离线、在线与护栏分层评估思路同样适合移动端模型:平均指标之外,关键错误与停止条件必须单独检查。

上线前七道验收门
| 验收门 | 通过条件 | 失败时回到 |
|---|---|---|
| 任务 | API 输出与业务目标匹配,未把检测当识别/理解 | 需求与 API 选型 |
| 兼容 | 系统、设备、GMS/AICore、脚本模型和状态均已覆盖 | 设备矩阵与降级 |
| 模型 | bundled/unbundled、下载、版本与关闭生命周期清楚 | 依赖和模型管理 |
| 质量 | 真实样本的关键字段、误报漏报与拒绝条件达标 | 输入、阈值与人工确认 |
| 性能 | 端到端延迟、内存、温度、电量和连续帧稳定 | 分辨率、背压与调用频率 |
| 隐私安全 | 权限、日志、存储、SDK 指标、后端与商店披露一致 | 数据流与隐私评审 |
| 体验 | 下载、离线、忙碌、拒权、不支持和错误均可恢复 | 状态机与无障碍设计 |
在 CI 中锁定依赖并定期查看ML Kit release notes,升级时重新跑关键设备与样本集。模型或 SDK 更新可能改变结果,即使应用代码没有变化也要保留回归基线。对于高风险输出,发布后还需监控用户纠错、失败分布和设备覆盖,并准备关闭开关。
常见问题
ML Kit 是免费的吗?
Google 总览把 ML Kit API 描述为免费提供,但实际总成本仍包括开发、测试、设备、模型下载流量、商店分发、自建后端和第三方服务。GenAI 还受设备和配额约束。采购或上线前应阅读当前条款,不要把“SDK 无按次调用费”理解为项目零成本。
ML Kit 在中国大陆 Android 手机上都能用吗?
不能这样承诺。Bundled 模型、依赖 Google Play services 的 unbundled 模型、Code Scanner 和 AICore/GenAI 对环境要求不同。必须用目标渠道和目标设备实测;若缺少所需服务,准备 bundled、LiteRT、自建方案或明确的不支持提示。
中文 OCR 能识别表格并保持 Excel 结构吗?
Text Recognition v2 返回文本的块、行、元素等层级,不等同于完整表格理解和电子表格重建。需要额外的版面、字段和业务规则,并对金额、日期、合并单元格和多栏文档做人工确认。
人脸检测能直接做人脸登录吗?
不能把 Face Detection 当身份认证。它用于定位人脸与部分特征,不提供可靠身份匹配。登录应使用平台生物识别 API 和安全硬件支持的认证流程,并完成法律、攻击与活体风险评估。
端侧 GenAI 离线就一定可用吗?
模型已下载且设备受支持时,推理可在本地运行;首次初始化、模型/配置获取、AICore 状态、配额和前台限制仍可能影响可用性。应用必须先查状态并提供下载、重试或降级。
来源、适用范围与复核记录
本文依据截至 2026 年 7 月 18 日可访问的 Google ML Kit 总览、Text Recognition v2、Barcode Scanning、Google Code Scanner、Custom Models、GenAI/Prompt API、Migration、Terms & Privacy、Android data disclosure 与 release notes 整理。代码用于说明调用结构,依赖版本、设备清单、语言、API 状态和条款会变化;集成与发布时应以官方实时页面、构建解析结果和目标设备测试为准。
