MediaPipe para Raspberry Pi y iOS

AGO 18, 2023
Paul Ruiz Senior Developer Relations Engineer

En mayo, lanzamos MediaPipe Solutions, un conjunto de herramientas para soluciones sin código y de código reducido para tareas comunes de aprendizaje automático, integrado en el dispositivo, para Android, Web y Python. Hoy nos complace anunciar que ya está disponible la versión inicial del SDK para iOS, además de una actualización para que el SDK de Python sea compatible con Raspberry Pi. Estos incluyen compatibilidad para clasificación de audio, detección de puntos de referencia faciales y varias tareas de procesamiento de lenguaje natural. Veamos cómo puedes usar estas herramientas en las nuevas plataformas.

Detección de objetos para Raspberry Pi

Además de configurar el hardware para tu Raspberry Pi con una cámara, puedes comenzar instalando la dependencia de MediaPipe, junto con OpenCV y NumPy, si aún no los tienes.

python -m pip install mediapipe

Desde allí puedes crear un nuevo archivo Python y agregar tus importaciones a la parte superior.

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

También debes asegurarte de tener un modelo de detección de objetos almacenado a nivel local en tu Raspberry Pi. Para tu comodidad, te proporcionamos un modelo predeterminado, EfficientDet-Lite0, que puedes recuperar con el siguiente comando.

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

Una vez que hayas descargado tu modelo, puedes comenzar a crear tu nuevo ObjectDetector, incluidas algunas personalizaciones, como los resultados máximos que deseas recibir o el umbral de confianza que debe superarse antes de que se pueda devolver un resultado.

# Initialize the object detection model
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)

Después de crear el ObjectDetector, deberás abrir la cámara Raspberry Pi para leer los marcos continuos. Hay algunos pasos de preprocesamiento que se omitirán aquí, pero están disponibles en nuestra muestra en GitHub.

Dentro de ese bucle, puedes convertir la imagen procesada de la cámara en una nueva MediaPipe.Image, luego ejecutar la detección en esa nueva MediaPipe.Image antes de mostrar los resultados que se reciben en un procesador asociado.

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

Una vez que saques esos resultados y detectes los cuadros de límites, deberías poder ver algo como esto:

Puedes encontrar el ejemplo completo de Raspberry Pi que se muestra arriba en GitHub o ver la documentación oficial aquí.

Clasificación de texto en iOS

Si bien la clasificación de texto es uno de los ejemplos más directos, las ideas centrales seguirán aplicándose al resto de las tareas de iOS disponibles. Al igual que con Raspberry Pi, comenzarás creando un nuevo objeto MediaPipe Tasks, que en este caso es un TextClassifier.

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

Ahora que tienes tu TextClassifier, solo necesitas pasarle una string para obtener un TextClassifierResult.

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

Puedes hacerlo desde otra parte de tu app, como una ViewController DispatchQueue, antes de mostrar los resultados.

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

Puedes consultar el resto del código de este proyecto en GitHub y ver la documentación completa en developers.google.com/mediapipe.

Cómo comenzar

Para obtener más información, ve nuestras sesiones de I/O 2023: Aprendizaje automático en el dispositivo fácil de usar con MediaPipe, Potencia apps web con aprendizaje automático y MediaPipe y Novedades del aprendizaje automático, y consulta la documentación oficial en developers.google.com/mediapipe.

Esperamos que hagas un montón de cosas interesantes, ¡así que asegúrate de compartirlas con @googledevs y tus comunidades de desarrolladores!