前言
大模型之外,工程团队更常用的是"成熟、稳定、可控"的端侧 AI 能力。Google ML Kit 提供了一系列以 SDK 形式提供的视觉与文本模型——人脸检测、文本识别、姿势识别、条形码、自拍分割、翻译等。本篇拆解 ML Kit 在 Android 工程中的实战用法、限制与替代方案。
一、ML Kit 是什么
ML Kit 是一组现成可用的端侧 AI 推理 API,分为两大类:
推荐使用 Unbundled(更小、模型自动更新),除非你的 App 必须完全离线。
二、ML Kit 能干啥(截至 2026 年)
其中 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 模型加载与内存
应用首次调用时延迟较高,后续调用是常驻内存。建议模块化按需加载。
5.2 多能力并行
多个 ML Kit 能力同时开也没问题,但 RAM 占用叠加:
按需开启、不用即关。
六、ML Kit vs 自训练模型
垂直场景(医学影像、工业检测、特定文档)必须自训练;通用场景 OCR / 翻译 / 人脸,ML Kit 已够用。
七、ML Kit vs 端侧 LLM
经验:能 ML Kit 的就用 ML Kit,必须语义理解才上 LLM。
八、ML Kit 在国内合规
Google Play 服务在国内无法自动下载 unbundled 模型
替代方案 1:用 Bundled 模式(模型打 APK 里)
替代方案 2:用华为 ML Kit 或百度 AI 替代
替代方案 3:自训练 ONNX 模型
下面给一个 ML Kit 国内替代方案对照:
如果做 ToB 项目、对数据出端敏感,建议用自训练或国内厂商版本。
九、ML Kit 性能调优清单
设置 BackpressureStrategy:实时分析用
STRATEGY_KEEP_ONLY_LATEST,避免积压限制 ImageProxy 输入:
setOutputImageFormat选RGBA_8888或YUV_420,避免 RGB 转换浪费关闭不必要的 Feature:不在前台时停用 Recognizer
降帧率:低光场景拉低 FPS,减少 CPU 占用
前置处理:把图片转灰度或裁剪到 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 文档