Administrator
发布于 2026-08-25 / 37 阅读
0
0

系列文章《Android 工程师的 100 篇进阶笔记》第 79 篇:Android ML Kit:开箱即用的端侧 AI 能力

前言

大模型之外,工程团队更常用的是"成熟、稳定、可控"的端侧 AI 能力。Google ML Kit 提供了一系列以 SDK 形式提供的视觉与文本模型——人脸检测、文本识别、姿势识别、条形码、自拍分割、翻译等。本篇拆解 ML Kit 在 Android 工程中的实战用法、限制与替代方案。

一、ML Kit 是什么

ML Kit 是一组现成可用的端侧 AI 推理 API,分为两大类:

类别

模型来源

联网要求

模型大小

Bundled(打包)

APK 内置模型

离线可用

5-50MB

Unbundled(动态下载)

Google Play 服务下发

安装时下载

几 MB 到几十 MB

推荐使用 Unbundled(更小、模型自动更新),除非你的 App 必须完全离线。

二、ML Kit 能干啥(截至 2026 年)

能力

应用场景

实时性

中文支持

文本识别(OCR)

名片、票据、截图转文字

30ms

强

人脸检测

自拍、身份核验

20ms

N/A

人脸网格

美颜、贴纸、3D 建模

30ms

N/A

条形码扫描

商品扫码、支付

15ms

N/A

姿势检测

健身、儿童坐姿

25ms

N/A

图像标注

智能相册、内容审核

100ms

中

自拍分割

视频会议、背景虚化

40ms

N/A

翻译

离线翻译(70+ 语言)

100ms / 句

强

智能回复

聊天建议

50ms

强

其中 OCR 和翻译是国内 App 最常用的两个。

三、接入示例:OCR 识别

// build.gradle.kts
implementation("com.google.mlkit:text-recognition-chinese:16.0.1")
implementation("com.google.mlkit:text-recognition:16.0.0")  // Latin
val recognizer = TextRecognition.getClient(ChineseTextRecognizerOptions.Builder().build())

// 处理 Bitmap
val image = InputImage.fromBitmap(bitmap, rotation)

recognizer.process(image)
    .addOnSuccessListener { result ->
        result.textBlocks.forEach { block ->
            block.lines.forEach { line ->
                Log.d("OCR", "Line: ${line.text}")
                line.elements.forEach { elem ->
                    Log.d("OCR", "  ${elem.text} (${elem.boundingBox})")
                }
            }
        }
    }
    .addOnFailureListener { e ->
        Log.e("OCR", "Failed", e)
    }

返回的结构化数据可以直接做内容提取,比如:

fun extractReceiptInfo(text: Text): ReceiptData? {
    val totalLine = text.text.split("\n").find {
        it.contains("合计") || it.contains("应付")
    } ?: return null
    val amount = Regex("[¥¥]?\\d+\\.\\d{2}").find(totalLine)
        ?.groupValues?.firstOrNull()
        ?.replace(Regex("[¥¥]"), "")
    return ReceiptData(amount = amount?.toDoubleOrNull() ?: 0.0)
}

四、CameraX + ML Kit:实时识别

implementation("androidx.camera:camera-camera2:1.3.4")
implementation("androidx.camera:camera-lifecycle:1.3.4")
implementation("androidx.camera:camera-view:1.3.4")

实时扫描条形码:

val previewView = findViewById<PreviewView>(R.id.preview)

val cameraProvider = ProcessCameraProvider.getInstance(this).get()

val preview = Preview.Builder().build().also {
    it.setSurfaceProvider(previewView.surfaceProvider)
}

val analysis = ImageAnalysis.Builder()
    .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
    .build()

val barcodeScanner = BarcodeScanning.getClient()
analysis.setAnalyzer(executor) { imageProxy ->
    val mediaImage = imageProxy.image ?: return@setAnalyzer imageProxy.close()
    val image = InputImage.fromMediaImage(mediaImage, imageProxy.imageInfo.rotationDegrees)
    barcodeScanner.process(image)
        .addOnSuccessListener { barcodes ->
            barcodes.firstOrNull()?.let {
                onBarcodeDetected(it.rawValue ?: "")
            }
        }
        .addOnCompleteListener { imageProxy.close() }
}

cameraProvider.bindToLifecycle(this, CameraSelector.DEFAULT_BACK_CAMERA, preview, analysis)

注意:相机权限要在 Manifest 里加 CAMERA,运行时还要动态申请。

五、ML Kit 的运行模型

5.1 模型加载与内存

模型

占用

启动延迟

OCR(中文)

25MB

~400ms

人脸检测

8MB

~200ms

翻译

10-30MB

~500ms

姿势检测

5MB

~150ms

应用首次调用时延迟较高,后续调用是常驻内存。建议模块化按需加载。

5.2 多能力并行

多个 ML Kit 能力同时开也没问题,但 RAM 占用叠加:

组合

占用

备注

OCR + 翻译

50MB

实时翻译相机画面

人脸 + 自拍分割

40MB

视频会议常用

全部开启

100MB+

不建议

按需开启、不用即关。

六、ML Kit vs 自训练模型

维度

ML Kit

自训练(TFLite / ONNX)

精度

中(80% 场景够用)

高(垂直场景)

数据隐私

Google 提供

完全私有

自定义

不支持

完全

接入成本

1-2 小时

1-2 周

模型更新

Google 自动

自己 OTA

计费

免费

免费(自己承担训练/部署成本)

垂直场景(医学影像、工业检测、特定文档)必须自训练;通用场景 OCR / 翻译 / 人脸,ML Kit 已够用。

七、ML Kit vs 端侧 LLM

任务

用 ML Kit

用端侧 LLM

识别名片

✓(快、准)

✗(过度杀鸡用牛刀)

摘要长文

✗

✓

翻译短句

✓(快 5-10x)

✓(更顺)

提取字段

✓(规则场景)

✓(灵活场景)

监控画面

✓

✗(推理慢)

经验:能 ML Kit 的就用 ML Kit,必须语义理解才上 LLM。

八、ML Kit 在国内合规

  • Google Play 服务在国内无法自动下载 unbundled 模型

  • 替代方案 1:用 Bundled 模式(模型打 APK 里)

  • 替代方案 2:用华为 ML Kit 或百度 AI 替代

  • 替代方案 3:自训练 ONNX 模型

下面给一个 ML Kit 国内替代方案对照:

能力

Google ML Kit

替代

OCR(中文)

text-recognition-chinese

百度 OCR / 腾讯 OCR

人脸检测

face-detection

旷视 Face++ / 百度人脸

翻译

translation

火山翻译 SDK / 自训练

图像标注

image-labeling

阿里通义 / 百度内容审核

如果做 ToB 项目、对数据出端敏感,建议用自训练或国内厂商版本。

九、ML Kit 性能调优清单

  1. 设置 BackpressureStrategy:实时分析用 STRATEGY_KEEP_ONLY_LATEST,避免积压

  2. 限制 ImageProxy 输入:setOutputImageFormat 选 RGBA_8888 或 YUV_420,避免 RGB 转换浪费

  3. 关闭不必要的 Feature:不在前台时停用 Recognizer

  4. 降帧率:低光场景拉低 FPS,减少 CPU 占用

  5. 前置处理:把图片转灰度或裁剪到 ROI(Region of Interest),减少推理量

十、未来一年的演进

  • 多模态统一 API:Google 推 GenAI Service,可能整合 ML Kit + Gemini Nano

  • NPU 优化:ML Kit 在 NPU 加速方面正在跟进,落地后会更快、更省电

  • 隐私沙盒:模型 On-Device,证书校验一次后独立运行,未来会更普及

  • 跨端 SDK:Watch / Tablet / 车机的统一入口

小结

ML Kit 是 Android 端 AI 工程的"快进键"。绝大多数场景不需要自训练或端侧 LLM——用 ML Kit 几个 API 就能完成。优先用 OCR / 条形码 / 翻译这几个高频能力。需要中文本地化或垂直场景再考虑国内 SDK。

下一篇进入 CameraX + AI 的实战,看 Google ML Kit 与视觉模型怎么深度集成,覆盖拍照、智能裁剪、内容审核。

参考阅读

  • Google ML Kit 官方文档

  • Android Developers:CameraX + ML Kit 教程

  • 华为 ML Kit / 百度 AI SDK 文档


评论