Google ML Kit Android 开发实战指南
Google ML Kit 是 Google 推出的移动端机器学习 SDK,为 Android 开发者提供条形码扫描、人脸检测、文字识别等开箱即用的 AI 能力。本文从依赖配置到完整代码示例,详细介绍如何在项目中集成 ML Kit。
1、准备工作
1.1、添加依赖
在模块级 build.gradle 文件中添加所需库(按需选择):
dependencies {
// 基础包(必选)
implementation 'com.google.mlkit:vision-common:17.3.0'
// 各功能模块(可选)
implementation 'com.google.mlkit:barcode-scanning:17.2.0'
implementation 'com.google.mlkit:face-detection:16.1.5'
implementation 'com.google.mlkit:text-recognition:16.0.0'
implementation 'com.google.mlkit:image-labeling:17.0.7'
implementation 'com.google.android.gms:play-services-mlkit-language-id:17.0.0'
}
1.2、AndroidManifest 配置
确保声明相机权限(视功能而定):
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
1.3、模型下载配置
如需在应用安装时自动下载模型,添加以下配置:
<application ...>
<meta-data
android:name="com.google.mlkit.vision.DEPENDENCIES"
android:value="barcode" />
</application>
2、核心功能使用示例
2.1、条形码扫描
val scanner = BarcodeScanning.getClient()
fun scanBarcode(bitmap: Bitmap) {
val image = InputImage.fromBitmap(bitmap, 0)
scanner.process(image)
.addOnSuccessListener { barcodes ->
barcodes.forEach { barcode ->
Log.d("MLKit", "发现条码: ${barcode.rawValue}")
when(barcode.valueType) {
Barcode.TYPE_URL -> openLink(barcode.url!!.url)
Barcode.TYPE_CONTACT_INFO -> saveContact(barcode.contactInfo!!)
}
}
}
.addOnFailureListener { e ->
showError("扫描失败: ${e.message}")
}
}
2.2、人脸检测(带轮廓追踪)
val options = FaceDetectorOptions.Builder()
.setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_FAST)
.setContourMode(FaceDetectorOptions.CONTOUR_MODE_ALL)
.build()
val detector = FaceDetection.getClient(options)
fun detectFaces(imageUri: Uri) {
val image = InputImage.fromFilePath(context, imageUri)
detector.process(image)
.addOnSuccessListener { faces ->
faces.forEach { face ->
val leftEye = face.getLandmark(FaceLandmark.LEFT_EYE)?.position
val smileProb = face.smilingProbability ?: 0f
drawFaceRect(face.boundingBox)
drawLandmark(leftEye)
}
}
}
2.3、文字识别(OCR)
val recognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
fun extractText(image: InputImage) {
recognizer.process(image)
.addOnSuccessListener { visionText ->
val resultBuilder = StringBuilder()
for (block in visionText.textBlocks) {
for (line in block.lines) {
resultBuilder.append(line.text).append("\n")
val boundingBox = line.boundingBox
}
}
tvResult.text = resultBuilder.toString()
}
}
3、高级技巧
3.1、相机实时处理
推荐结合 CameraX 使用:
val analysisUseCase = ImageAnalysis.Builder()
.setBackpressureStrategy(STRATEGY_KEEP_ONLY_LATEST)
.build()
.also { usecase ->
usecase.setAnalyzer(cameraExecutor) { imageProxy ->
val mediaImage = imageProxy.image
if (mediaImage != null) {
val inputImage = InputImage.fromMediaImage(
mediaImage,
imageProxy.imageInfo.rotationDegrees
)
processImage(inputImage)
}
imageProxy.close()
}
}
cameraProvider.bindToLifecycle(this, preview, analysisUseCase)
3.2、模型自定义
支持本地模型捆绑,将 .tflite 文件放入 app/src/main/assets:
val localModel = LocalModel.Builder()
.setAssetFilePath("custom_model.tflite")
.build()
val customLabelerOptions = CustomImageLabelerOptions.Builder(localModel)
.setConfidenceThreshold(0.7f)
.build()
val labeler = ImageLabeling.getClient(customLabelerOptions)
3.3、批量处理
对于多张图片的批量处理,建议使用异步任务:
fun processImagesAsync(images: List) {
val executor = Executors.newFixedThreadPool(4)
images.forEach { image ->
executor.submit {
detector.process(image)
.addOnSuccessListener { results ->
handleResults(results)
}
}
}
}
4、常见问题解决
4.1、性能优化建议
• 对静态图片使用 ACCURATE 模式,视频流使用 FAST 模式
• 合理设置图片尺寸:640×480 通常足够
• 及时关闭处理器:在 onDestroy() 中调用 detector.close()
• 使用硬件加速提升处理速度
4.2、注意事项
• 部分功能需要 Google Play 服务支持
• 华为设备需单独处理(可通过 HMS Core 的 ML Kit 替代)
• 复杂任务(如证件识别)建议配合 OpenCV 做预处理
• 首次使用可能需要下载模型,需处理下载进度
4.3、错误处理
常见错误及解决方案:
• ModelDownloadInProgressException:等待模型下载完成
• FirebaseMLException:检查网络连接和权限
• IllegalArgumentException:检查图片格式和尺寸
4.4、兼容性处理
针对不同设备的兼容性问题,可以采取以下措施:
• 检查设备是否支持 Google Play 服务
• 提供备选方案(如本地模型)
• 优雅处理不支持的设备
5、总结
Google ML Kit 为 Android 开发者提供了便捷的机器学习能力,通过简单的 API 调用即可实现条形码扫描、人脸检测、文字识别等功能。在实际开发中,需要根据业务需求选择合适的功能模块,注意性能优化和错误处理,以提供良好的用户体验。