MediaPipe para Raspberry Pi e iOS

AGO 18, 2023
Paul Ruiz Senior Developer Relations Engineer

Em maio, lançamos o MediaPipe Solutions, um conjunto de ferramentas para soluções com pouco ou nenhum código para tarefas comuns de aprendizado de máquina no dispositivo, para Android, Web e Python. Hoje, temos o prazer de anunciar a disponibilidade da versão inicial do SDK do iOS e de uma atualização para o SDK do Python para suporte ao Raspberry Pi. Isso inclui suporte para classificação de áudio, detecção de pontos de referência faciais e várias tarefas de processamento de linguagem natural. Vamos dar uma olhada em como você pode usar essas ferramentas para as novas plataformas.

Detecção de objetos para Raspberry Pi

Além de configurar seu hardware Raspberry Pi com uma câmera, você pode começar instalando a dependência MediaPipe, além do OpenCV e do NumPy, se ainda não os tiver.

python -m pip install mediapipe

A partir daí, você pode criar um novo arquivo do Python e adicionar suas importações na parte superior dele.

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

Você também deve garantir que tenha um modelo de detecção de objetos armazenado localmente em seu Raspberry Pi. Para sua conveniência, fornecemos um modelo padrão, o EfficientDet-Lite0, que você pode recuperar com o comando a seguir.

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

Depois de fazer o download do modelo, você pode começar a criar o novo ObjectDetector, incluindo algumas personalizações, como o máximo de resultados que deseja receber ou o limite de confiança que deve ser excedido antes que um resultado possa ser retornado.

# 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)

Depois de criar o ObjectDetector, você precisará abrir a câmera do Raspberry Pi para ler os frames contínuos. Algumas etapas de pré-processamento serão omitidas aqui, mas estão disponíveis em nosso exemplo no GitHub.

Dentro dessa repetição, você pode converter a imagem da câmera processada em um novo MediaPipe.Image e, em seguida, executar a detecção nesse novo MediaPipe.Image antes de exibir os resultados recebidos em um listener associado.

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

Depois de extrair esses resultados e detectar caixas delimitadoras, você deverá ver algo como o seguinte:

Veja o exemplo completo do Raspberry Pi mostrado acima no GitHub ou consulte a documentação oficial aqui.

Classificação de texto no iOS

Embora a classificação de texto seja um dos exemplos mais diretos, as ideias centrais ainda se aplicarão ao restante das Tarefas do iOS disponíveis. Semelhante ao Raspberry Pi, você começará criando um novo objeto MediaPipe Tasks, que neste caso é um TextClassifier.

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

Agora que você tem o TextClassifier, só precisa transmitir uma String para ele para obter um TextClassifierResult.

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

Você pode fazer isso em qualquer lugar do aplicativo, como um ViewController DispatchQueue, antes de exibir os resultados.

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

Veja o restante do código deste projeto no GitHub e consulte a documentação completa em developers.google.com/mediapipe.

Primeiros passos

Para saber mais, assista nossas sessões do I/O 2023: ML fácil no dispositivo com o MediaPipe, Turbinar seu app da Web com aprendizado de máquina e MediaPipe e Novidades do aprendizado de máquina. Confira também a documentação oficial em developers.google.com/mediapipe.

Estamos ansiosos para conhecer todas as suas criações incríveis, por isso não deixe de compartilhar com @googledevs e com as comunidades de desenvolvedores.