适用于 Raspberry Pi 和 iOS 的 MediaPipe

八月 18, 2023
Paul Ruiz Senior Developer Relations Engineer

早在 5 月份,我们便发布了 MediaPipe Solutions,这套工具集可以为开发者处理常见的设备端机器学习任务提供无代码和低代码的解决方案,适用于 Android、Web 和 Python。今天,我们很高兴地宣布,正式推出初始版本的 iOS SDK 以及更新 Python SDK 以支持 Raspberry Pi,其中包括对音频分类、面部特征点检测和各种自然语言处理任务的支持。我们来看看您可以如何将这些工具用于新平台。

Raspberry Pi 的目标检测

除了利用摄像头设置 Raspberry Pi 硬件外,如果您还没有安装 MediaPipe 依赖项,还可以先安装 OpenCV 和 NumPy。

python -m pip install mediapipe

您可以在其中创建新的 Python 文件,并将导入内容添加到顶部。

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
import cv2
import numpy as np

您还需要确保目标检测模型存储在 Raspberry Pi 本地。为方便起见,我们提供了一个默认模型 EfficientDet-Lite0,您可以使用以下命令检索。

wget -q -O efficientdet.tflite -q https://storage.googleapis.com/mediapipe-models/object_detector/efficientdet_lite0/int8/1/efficientdet_lite0.tflite

下载模型后,您可以开始创建新的 ObjectDetector,包括一些自定义内容,例如要接收的最大结果数,或者返回结果之前必须超过的置信度阈值。

# 将目标检测模型初始化
base_options = python.BaseOptions(model_asset_path=model)
options = vision.ObjectDetectorOptions(
                                   base_options=base_options,
                                   running_mode=vision.RunningMode.LIVE_STREAM,
                                   max_results=max_results,                                                       score_threshold=score_threshold, 
                                   result_callback=save_result)
detector = vision.ObjectDetector.create_from_options(options)

创建 ObjectDetector 后,您需要打开 Raspberry Pi 摄像头拍摄连续画面。此处省略了一些预处理步骤,如需查看详细步骤,请查看 GitHub 中的示例。

在这个循环过程中,您可以将经过处理的摄像头图像转换为新的 MediaPipe.Image,然后系统会对新的 MediaPipe.Image 运行检测,最后再显示相关监听器中接收到的结果。

mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=rgb_image)
detector.detect_async(mp_image, time.time_ns())

在得出这些结果并对边界框进行检测后,您应该能够看到以下内容:

您可以在 GitHub 上找到上面所示的完整 Raspberry Pi 示例,或单击此处查看官方文档。

iOS 上的文本分类

虽然文本分类是最直接的示例之一,但核心思想仍适用于其他可用的 iOS 任务。与 Raspberry Pi 类似,您需要先创建一个新的 MediaPipe Tasks 对象,在本例中为 TextClassifier。

var textClassifier: TextClassifier?
 
textClassifier = TextClassifier(modelPath: model.modelPath)

创建 TextClassifier 后,您只需在其中输入一个字符串即可获取 TextClassifierResult

func classify(text: String) -> TextClassifierResult? {
    guard let textClassifier = textClassifier else {
        return nil
    }
 
    return try? textClassifier.classify(text: text)
}

在系统显示结果之前,您可以在应用中的其他位置(如 ViewController DispatchQueue)执行此操作。

let result = self?.textClassifier.classify(text: inputText)
let categories = result?.classificationResult.classifications.first?.categories?? []

您既可以在 GitHub 上找到此项目的其他代码,也可以在 developers.google.com/mediapipe 上查看完整文档。

开始构建

如需了解更多信息,请观看我们的 2023 年 I/O 大会课程:使用 MediaPipe 轻松实现设备端机器学习使用机器学习和 MediaPipe 增强 Web 应用,以及机器学习的新功能,并查看 developers.google.com/mediapipe 上的官方文档。

我们期待您使用 MediaPipe Solutions 创造出精彩作品,请务必与 @googledevs 和您的开发者社区分享成果!