ML Kit:是什么、库以及面向 Android 和 iOS 的 ML

作者: IT Sectr 发布日期: 2026-07-18 阅读时间: 10 分钟

ML Kit — 是 Google 推出的移动 SDK,用于将现成的 ML 模型集成到 Android 和 iOS 应用中。ML Kit 提供用于文本识别、人脸检测、条形码扫描、物体识别、文本翻译、姿势确定和图像分割的 API — 所有模型均在设备端(on-device)运行,无需强制连接服务器。根据 Google ML Kit, 2025 的数据,该库被超过 100,000 个应用使用,每天处理超过 20 亿个请求

要点

  • ML Kit — Google 推出的用于移动应用 ML 功能的 SDK
  • On-device — 所有模型本地运行,无需互联网
  • 现成 API — 文本、人脸、条形码、物体、翻译、姿势
  • 跨平台 — 通过统一 API 支持 Android 和 iOS
  • 自定义模型 — 加载自己的 TFLite 模型

什么是 ML Kit:功能和架构

ML Kit — 是一个与 Firebase 兼容的移动平台 SDK,为 Android 和 iOS 提供 14 个 ML-API。ML Kit 在 2020 年取代了 Firebase ML(旧名称),现在可通过 Google Play Services(Android)或 CocoaPods/SPM(iOS)作为独立 SDK 使用。关键优势 — 所有模型均在设备端运行,保证了数据隐私和无需互联网即可运行。

ML Kit 的架构 围绕两种模式构建:bundled(模型嵌入 APK/IPA 中)和 downloaded(模型在首次调用时通过 Google Play Services 下载)。Bundled 模式提供即时启动,但会增加应用大小 5–20 MB。Downloaded 模式节省空间,但首次启动时需要互联网。Google 建议对于并非每个屏幕都使用的 API(Object Detection, Pose Detection)使用 downloaded 模式。

通过 TFLite 进行自定义 — ML Kit 允许通过 Custom Model API 加载自己的 TensorFlow Lite 模型。这提供了灵活性 — 对标准任务使用现成的 API,对特定任务使用自己的模型。ML Kit 提供与 ByteBuffer 和 FloatArray 配合使用的通用 Input/Output 处理器。根据 Google(2025)的数据,40% 的 ML Kit 项目结合使用现成 API 和自定义模型。

kotlin
// ML Kit Text Recognition 设置(Android)
val recognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)

val image = InputImage.fromBitmap(bitmap)
recognizer.process(image)
    .addOnSuccessListener { result ->
        for (block in result.textBlocks) {
            Log.d("MLKit", block.text)
        }
    }
    .addOnFailureListener { error ->
        // 处理错误
    }

Firebase vs standalone — ML Kit 可以与 Firebase(Cloud 函数、Analytics、Crashlytics)一起使用,也可以作为没有 Firebase 的独立 SDK 使用。Standalone 模式无需配置 Firebase 帐户即可通过 Google Play Services(Android)连接。Cloud API 可通过 Firebase(Cloud Vision, Natural Language)用于需要 Google 服务器上的神经网络的任务 — 但这些功能是付费的且非设备端。

ML Kit Text Recognition:文本识别

ML Kit Text Recognition — 用于图像上光学字符识别(OCR)的 API。支持两种模式:Latin-based(拉丁字母、西里尔字母、数字 — 45 种语言)和 Chinese/Japanese/Korean(CJK — 表意文字语言)。Latin 识别使用 V2(更快)或 V1(高精度)模型。V2 提供每帧 10–30 毫秒的速度,V1 — 50–100 毫秒。

Text Recognition 的功能 包括识别印刷和手写文本、确定文本方向、检测行、单词和符号、确定文本语言。API 返回结构:Text → TextBlock → Line → Element(Word/Symbol)。每个元素都有边界框、置信度和识别出的文本。根据 Google(2025)的数据,ML Kit Text Recognition V2 在拉丁字母上的准确率为 96%,在西里尔字母上为 91%。

实时 Text Recognition — 与 CameraX 或 Camera2 配合使用进行视频流处理。创建 ImageAnalysis.Analyzer 并将帧传递给 ML Kit。为了提高性能,将帧分辨率降低到 480p(640x480)——这是速度和准确率之间的最佳平衡。ML Kit 自动处理图像旋转,但为获得最大速度,请以正确的方向传递图像。

kotlin
// 使用 CameraX 分析仪进行文本识别
class TextAnalyzer : ImageAnalysis.Analyzer {
    private val recognizer = TextRecognition.getClient(
        TextRecognizerOptions.DEFAULT_OPTIONS
    )

    override fun analyze(image: ImageProxy) {
        val inputImage = InputImage.fromMediaImage(
            image.image, image.imageInfo.rotationDegrees
        )
        recognizer.process(inputImage)
            .addOnSuccessListener { /* text found */ }
            .addOnCompleteListener { image.close() }
    }
}

Text Recognition 优化:使用 ImageDecoder 改善模糊或过暗图像的识别效果。对于印刷文本 — TextRecognizerOptions.DEFAULT_OPTIONS(V2 模型)。对于手写文本 — TextRecognizerOptions.SCRIPT_LATIN(更准确但更慢)。在 IT Sectr 项目中,我们使用 V2 进行文档识别,使用 Latin 模型进行支票和收据识别。

ML Kit Face Detection:人脸和轮廓检测

ML Kit Face Detection — 用于在图像和视频中检测人脸的 API。确定人脸的边界框、眼睛、鼻子、嘴巴、耳朵的坐标(468 个轮廓点)以及基本表情:微笑、张嘴、闭眼。Face Detection 是 ML Kit 最快的 API 之一:每帧 5–15 毫秒,具体取决于人脸数量和轮廓点数。

Face Detection 模式:contour mode(468 个人脸轮廓点,用于精确应用面具/滤镜)、classification mode(检测微笑、睁眼)、landmark mode(无轮廓的关键点)。模式在 FaceDetectorOptions 中组合。启用所有模式会使检测速度降低 2–3 倍——为任务使用最少的必要组合。

AR 应用中的 Face Detection — 基于轮廓点,ML Kit 为类似 Snapchat 的滤镜构建人脸面具。ML Kit 返回 468 个具有坐标 x、y、z(z = 深度)的点。在现代设备上,点每秒更新 30–60 次。对于 AR 应用,使用 FaceMeshDetector(专门版本)——它还会返回用于纹理化的网格三角形。

kotlin
// 带轮廓点的人脸检测
val options = FaceDetectorOptions.Builder()
    .setPerformanceMode(FaceDetectorOptions.PerformanceMode.FAST)
    .setContourMode(FaceDetectorOptions.ContourMode.ALL)
    .setClassificationMode(FaceDetectorOptions.ClassificationMode.ALL)
    .build()
val detector = FaceDetection.getClient(options)

detector.process(inputImage)
    .addOnSuccessListener { faces ->
        faces.forEach { face ->
            val bounds = face.boundingBox
            val smileProb = face.smilingProbability
        }
    }

Face Detection 的限制:API 不识别面部属于谁(面部识别)——仅检测面部。对于身份识别,在自定义 TFLite 模型上使用 FaceNet 或 ArcFace。ML Kit 能够正确处理角度达 45°、戴眼镜和部分口罩的人脸。对于侧面角度(90°),准确率下降到 40–60%。

ML Kit Barcode Scanning:读取所有代码格式

ML Kit Barcode Scanning — 用于读取和解码一维(EAN、UPC、Code 128)和二维(QR、Data Matrix、PDF417)条形码的 API。Barcode Scanning 在图像中检测代码——与 ZXing 不同,ZXing 要求代码几乎占据整个帧。ML Kit 检测任何大小和方向的代码,包括一帧中的多个代码(多条形码模式)。

支持的格式:EAN-8、EAN-13、UPC-A、UPC-E、Code 39、Code 93、Code 128、ITF、Codabar、QR、Data Matrix、PDF417、Aztec。ML Kit 自动确定格式——无需指定代码类型。在生产中使用 setBarcodeFormats() 限制支持的格式——通过排除多余的解码算法,这可以将扫描速度提高 30–50%。

实时 Barcode Scanning — 与 Text Recognition 类似,与 CameraX 集成。ML Kit 以最高 60 FPS 的频率处理帧。为获得最大速度,启用 setPerformanceMode(PerformanceMode.FAST)。ML Kit 的 Barcode Scanning 比 ZXing 快 2–3 倍,且更准确地检测模糊或部分遮挡的代码。根据 Google(2025)的数据,ML Kit Barcode Scanning 在标准光照下具有 98.5% 的准确率。

kotlin
// 带格式过滤器的条形码扫描
val options = BarcodeScannerOptions.Builder()
    .setBarcodeFormats(Barcode.FORMAT_QR_CODE,
        Barcode.FORMAT_EAN_13)
    .build()
val scanner = BarcodeScanning.getClient(options)

scanner.process(inputImage)
    .addOnSuccessListener { barcodes ->
        barcodes.forEach { barcode ->
            val value = barcode.rawValue
            val type = barcode.format
        }
    }

与 ZXing 的比较:ML Kit 更快、更准确且更易于集成。ZXing 是开源的,完全离线工作,不需要 Google Play Services。ML Kit 需要 Google Play Services(Android)或 CocoaPods(iOS)。对于在没有 Google 服务的设备上运行的应用程序(华为、Amazon Fire),使用 ZXing 作为后备方案。对于其他设备,使用 ML Kit,因为它通过多代码检测提供更好的用户体验。

ML Kit 中的 Object Detection 和 Pose Detection

ML Kit Object Detection — 用于在图像中检测和跟踪物体的 API。从 1000+ 类别(ImageNet 类)中检测物体——人、动物、车辆、家居用品。Object Detection 以两种模式工作:single-image(单张照片)和 streaming(带跟踪的视频流)。Streaming 模式在帧之间跟踪物体,为每个物体分配唯一的 track ID。

Pose Detection — 用于基于 33 个关键点(骨架)确定人体姿势的 API:头部、肩膀、肘部、手腕、臀部、膝盖、脚部。确定每个点的坐标(x、y、z)和置信度。Pose Detection 应用于健身追踪器(计数重复次数、控制姿势)、AR 应用(复制动作的虚拟形象)和体育分析。速度 — 每帧 10–30 毫秒,具体取决于人数。

Object Tracking — ML Kit Object Detection 使用基于光流的跟踪器进行帧间跟踪。当检测到物体时,跟踪器在不重新检测的情况下跟踪它,从而节省 CPU/GPU。如果跟踪器丢失物体(快速移动、遮挡),ML Kit 将启动重新检测。根据 Google(2025)的数据,跟踪器在运动速度高达 30 公里/小时时在 95% 的帧中保持物体。

kotlin
// 姿势检测(人体骨架)
val poseDetector = PoseDetection.getClient(
    PoseDetectorOptions.Builder()
        .setDetectorMode(PoseDetectorOptions.STREAM_MODE)
        .build()
)

poseDetector.process(inputImage)
    .addOnSuccessListener { pose ->
        pose.allPoseLandmarks.forEach { landmark ->
            val type = landmark.landmarkType // 左_肩,右_肘...
            val position = landmark.position3D
        }
    }

Selfie Segmentation — 用于在图像中对人进行分割(将人从背景中分离)的 API。为每个像素返回置信度掩码。Selfie Segmentation 用于视频通话、照片编辑器和 AR 应用中的背景模糊或替换。掩码以与原始图像大小相同的 UInt8Array 返回——每个像素包含 0.0(背景)到 1.0(人)之间的值。

ML Kit 中的自定义 TFLite 模型

Custom Model API — 通过 ML Kit 接口加载和运行自己的 TensorFlow Lite 模型的能力。ML Kit 提供统一的 Input/Output API:输入为 ByteBuffer,输出为 FloatArray/TensorImage。这允许将 ML Kit 的优势(模型管理、图像处理、与 CameraX 的连接)与自定义的面部识别、物体分类、NLP 等模型结合使用。

加载模型 — 将 .tflite 文件放在 assets/(Android)或 bundle(iOS)中,并通过 CustomModelDownloadConditions 或 Firebase Model Manager 加载。对于下载大型模型(5+ MB),使用下载条件:Wi-Fi、已充电、后台。Google 建议在应用首次启动时加载模型,而不是在首次使用时。

kotlin
// 加载自定义 TFLite 模型
val conditions = CustomModelDownloadConditions.Builder()
    .requireWifi()
    .build()
val remoteModel = CustomRemoteModel.Builder("my_model")
    .setRemoteModelName("my_model_v2")
    .build()

remoteModel.download(conditions)
    .addOnSuccessListener { /* model ready */ }
    .addOnFailureListener {
        // 使用 assets 中的捆绑模型
    }

自定义模型的优化:使用具有委托兼容性的 TFLite Converter。为获得最大性能,量化模型(INT8)——这可将模型大小减少 4 倍,并通过 XNNPACK Delegate 将推理速度提高 2–3 倍。ML Kit Custom Model API 支持 Dynamic Shape(batch = 1)、Image Input(UInt8、Float32)和 Tensor Output。

常见问题

Android 中的 ML Kit 是什么?

ML Kit — 是 Google 推出的带有现成 ML 模型的 SDK,适用于 Android 和 iOS。包括用于文本识别(OCR)、人脸检测、条形码扫描、物体识别、姿势确定、翻译和分割的 API。在设备上运行,无需互联网。通过 Google Play Services(Android)或 CocoaPods(iOS)以最小方式连接——只需一行依赖项。

ML Kit 与 TensorFlow Lite 有何不同?

ML Kit — 是高级 SDK,具有用于特定任务(文本、人脸、代码)的现成 API。TensorFlow Lite — 是用于运行任何 TFLite 模型的低级运行时。ML Kit 在底层包含 TFLite,但为标准任务提供现成代码和优化。如果您需要识别文本 — 使用 ML Kit(5 行代码)。如果您有自己的神经网络 — 使用 TFLite(20+ 行)。

ML Kit 无需互联网即可运行吗?

是的,所有主要的 ML Kit API(Text Recognition、Face Detection、Barcode Scanning、Object Detection、Pose Detection、Image Labeling)在初始下载模型后无需互联网连接即可完全在设备端运行。Cloud API(Cloud Vision、Natural Language)是可选的,需要互联网。对于 downloaded 模型,仅在首次下载模型时需要互联网。

可以在 iOS 上使用 ML Kit 吗?

是的,ML Kit 通过 CocoaPods 或 Swift Package Manager 完全支持 iOS。API 与 Android 版本类似。对于 iOS,ML Kit 在底层使用 Vision Framework 和 Core ML — 模型在 Apple Neural Engine(A12+)上运行。iOS 上的 ML Kit 可与 UIImage、CVPixelBuffer 和 CMSampleBuffer 配合使用。支持 iOS 12+ 和 Xcode 15+。

ML Kit 是免费的吗?

是的,ML Kit 的设备端 API 完全免费,没有请求数量限制。Cloud API(通过 Firebase)在超出免费额度后是付费的(每月 200 美元免费)。设备端模型不需要 Firebase 帐户 — ML Kit 通过 Google Play Services 独立运行。对于商业应用,设备端 ML Kit 是零运营成本的安全选择。

总结

  • ML Kit — Google SDK,为 Android 和 iOS 提供 14 个现成的 ML-API
  • Text Recognition — 支持拉丁字母(45 种语言)和 CJK 的 OCR,准确率 91–96%
  • Face Detection — 468 个轮廓点、微笑、睁眼检测,5–15 毫秒
  • Barcode Scanning — 所有代码格式、多码扫描,比 ZXing 快 2–3 倍
  • Pose Detection — 33 个人体骨架点,实时跟踪
  • Custom Model API — 通过统一接口使用自己的 TFLite 模型
  • On-device — 所有模型本地运行、免费、无需互联网

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读