Guida alla classificazione delle immagini per Python

L'attività Classificatore di immagini di MediaPipe consente di eseguire la classificazione sulle immagini. Puoi utilizzare questa attività per identificare cosa rappresenta un'immagine in un insieme di categorie definite durante l'addestramento. Queste istruzioni mostrano come utilizzare lo strumento di classificazione delle immagini con Python.

Puoi vedere questa attività in azione visualizzando la una demo. Per ulteriori informazioni su funzionalità, modelli e opzioni di configurazione questa attività, consulta la Panoramica.

Esempio di codice

Il codice di esempio del classificatore di immagini fornisce un'implementazione completa un'attività in Python come riferimento. Questo codice ti consente di testare l'attività e ottenere a creare un tuo classificatore di immagini. Puoi visualizzare, eseguire e modificare Esempio di strumento di classificazione delle immagini codice usando solo il browser web.

Se implementi il classificatore di immagini per Raspberry Pi, consulta le Esempio di Raspberry Pi Google Cloud.

Configurazione

Questa sezione descrive i passaggi chiave per configurare l'ambiente di sviluppo e per i progetti di codice che usano il classificatore di immagini. Per informazioni generali su configurare l'ambiente di sviluppo per l'utilizzo delle attività di MediaPipe, tra cui: i requisiti di versione della piattaforma, consulta la Guida alla configurazione per Python.

Pacchetti

Il classificatore di immagini esegue l'attività relativa al pacchetto pip mediapipe. Puoi installare con quanto segue:

$ python -m pip install mediapipe
``` ### Imports

Import the following classes to access the Image Classifier task functions:

```python
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

Modello

L'attività classificatore di immagini MediaPipe richiede un modello addestrato che sia compatibile con dell'attività. Per ulteriori informazioni sui modelli addestrati disponibili per il classificatore di immagini, consulta la panoramica delle attività nella sezione Modelli.

Seleziona e scarica un modello, quindi archivialo in una directory locale. Puoi utilizzare i valori consigliati EfficientNet-Lite0 un modello di machine learning.

model_path = '/absolute/path/to/efficientnet_lite0_int8_2.tflite'

Specifica il percorso del modello all'interno del parametro Model Name, come mostrato di seguito:

base_options = BaseOptions(model_asset_path=model_path)

Crea l'attività

Utilizza la funzione create_from_options per creare l'attività. La La funzione create_from_options accetta le opzioni di configurazione, inclusa l'esecuzione modalità, nomi visualizzati, impostazioni internazionali, numero massimo di risultati, soglia di confidenza, categorie consentite e bloccate. Per ulteriori informazioni sulla configurazione vedi Panoramica della configurazione.

L'attività Classificatore di immagini supporta tre tipi di dati di input: immagini fisse e file video. e video stream in diretta. Scegli la scheda corrispondente al tipo di dati di input a vedremo come creare l'attività ed eseguire l'inferenza.

Immagine

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ImageClassifier = mp.tasks.vision.ImageClassifier
ImageClassifierOptions = mp.tasks.vision.ImageClassifierOptions
VisionRunningMode = mp.tasks.vision.RunningMode

options = ImageClassifierOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    max_results=5,
    running_mode=VisionRunningMode.IMAGE)

with ImageClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
    

Video

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ImageClassifier = mp.tasks.vision.ImageClassifier
ImageClassifierOptions = mp.tasks.vision.ImageClassifierOptions
VisionRunningMode = mp.tasks.vision.RunningMode

options = ImageClassifierOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    max_results=5,
    running_mode=VisionRunningMode.VIDEO)

with ImageClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
    

Live streaming

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ImageClassifierResult = mp.tasks.vision.ImageClassifier.ImageClassifierResult
ImageClassifier = mp.tasks.vision.ImageClassifier
ImageClassifierOptions = mp.tasks.vision.ImageClassifierOptions
VisionRunningMode = mp.tasks.vision.RunningMode

def print_result(result: ImageClassifierResult, output_image: mp.Image, timestamp_ms: int):
    print('ImageClassifierResult result: {}'.format(result))

options = ImageClassifierOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    running_mode=VisionRunningMode.LIVE_STREAM,
    max_results=5,
    result_callback=print_result)

with ImageClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
    

Per un esempio completo della creazione di un classificatore di immagini da utilizzare con un'immagine, consulta il codice esempio.

Opzioni di configurazione

Questa attività include le seguenti opzioni di configurazione per le applicazioni Python:

Nome opzione Descrizione Intervallo di valori Valore predefinito
running_mode Imposta la modalità di esecuzione per l'attività. Esistono tre tipi di modalità:

IMAGE: la modalità per gli input di immagini singole.

VIDEO: la modalità per i fotogrammi decodificati di un video.

LIVE_STREAM: la modalità per un live streaming di input dati, ad esempio quelli di una videocamera. In questa modalità, resultListener deve essere per impostare un listener in modo che riceva risultati in modo asincrono.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
display_names_locale Imposta la lingua delle etichette da utilizzare per i nomi visualizzati forniti nel metadati del modello dell'attività, se disponibili. Il valore predefinito è en per Inglese. Puoi aggiungere etichette localizzate ai metadati di un modello personalizzato Utilizzando l'API TensorFlow Metadata Writer Codice impostazioni internazionali it
max_results Imposta il numero massimo facoltativo di risultati della classificazione con il punteggio più alto su per tornare indietro. Se < 0, verranno restituiti tutti i risultati disponibili. Qualsiasi numero positivo -1
score_threshold Imposta la soglia del punteggio di previsione che sostituisce quella fornita in gli eventuali metadati del modello. I risultati al di sotto di questo valore vengono rifiutati. Qualsiasi numero in virgola mobile Non impostato
category_allowlist Consente di impostare l'elenco facoltativo di nomi di categorie consentiti. Se il campo non è vuoto, i risultati della classificazione i cui nome non è incluso in questo set saranno esclusi. I nomi di categorie duplicati o sconosciuti vengono ignorati. Questa opzione si esclude a vicenda con category_denylist e utilizza entrambi generano un errore. Qualsiasi stringa Non impostato
category_denylist Consente di impostare un elenco facoltativo di nomi di categorie non consentiti. Se non vuoti, i risultati di classificazione con nome della categoria incluso in questo set verranno filtrati fuori. I nomi di categorie duplicati o sconosciuti vengono ignorati. Questa opzione è reciproca è esclusivo con category_allowlist e l'utilizzo di entrambi genera un errore. Qualsiasi stringa Non impostato
result_callback Imposta il listener dei risultati in modo che riceva i risultati della classificazione in modo asincrono quando il classificatore di immagini è nel live streaming . Può essere utilizzato solo quando la modalità di corsa è impostata su LIVE_STREAM N/D Non impostato

Preparazione dei dati

Prepara l'input come file immagine o array numpy, quindi convertilo in un mediapipe.Image oggetto. Se l'input è un file video o un live streaming da un webcam, puoi utilizzare una libreria esterna come OpenCV per caricare i frame di input come numpy di grandi dimensioni.

I seguenti esempi spiegano e mostrano come preparare i dati per il trattamento per: ciascuno dei tipi di dati disponibili

Immagine

import mediapipe as mp

# Load the input image from an image file.
mp_image = mp.Image.create_from_file('/path/to/image')

# Load the input image from a numpy array.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)
    

Video

import mediapipe as mp

# Use OpenCV’s VideoCapture to load the input video.

# Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS
# You’ll need it to calculate the timestamp for each frame.

# Loop through each frame in the video using VideoCapture#read()

# Convert the frame received from OpenCV to a MediaPipe’s Image object.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
    

Live streaming

import mediapipe as mp

# Use OpenCV’s VideoCapture to start capturing from the webcam.

# Create a loop to read the latest frame from the camera using VideoCapture#read()

# Convert the frame received from OpenCV to a MediaPipe’s Image object.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
    

Esegui l'attività

Puoi chiamare la funzione di classificazione corrispondente alla tua modalità di corsa per attivare le inferenze. L'API Image Classifier restituirà le possibili categorie per i all'interno dell'immagine o del frame di input.

Immagine

# Perform image classification on the provided single image.
classification_result = classifier.classify(mp_image)
    

Video

# Calculate the timestamp of the current frame
frame_timestamp_ms = 1000 * frame_index / video_file_fps

# Perform image classification on the video frame.
classification_result = classifier.classify_for_video(mp_image, frame_timestamp_ms)
    

Live streaming

# Send the latest frame to perform image classification.
# Results are sent to the `result_callback` provided in the `ImageClassifierOptions`.
classifier.classify_async(mp_image, frame_timestamp_ms)
    

Tieni presente quanto segue:

  • Quando è attiva la modalità video o live streaming, devi anche fornire all'attività Classificatore di immagini il timestamp del frame di input.
  • Quando viene eseguita nel modello di immagine o video, l'attività Classificatore di immagini bloccare il thread corrente finché non termina di elaborare l'immagine di input o frame.
  • Quando è eseguita in modalità live streaming, l'attività Classificatore di immagini non blocca il thread corrente, ma restituisce immediatamente. Richiamerà il suo risultato con il risultato della classificazione ogni volta che termina durante l'elaborazione di un frame di input. Se la funzione classifyAsync viene chiamata quando l'attività Classificatore di immagini è impegnata a elaborare un altro frame, ignora il nuovo frame di input.

Per un esempio completo della creazione di un classificatore di immagini da utilizzare con un'immagine, consulta il codice esempio.

Gestire e visualizzare i risultati

Quando si esegue l'inferenza, l'attività Classificatore di immagini restituisce Oggetto ImageClassifierResult che contiene l'elenco delle possibili categorie per gli oggetti all'interno dell'immagine o del frame di input.

Di seguito è riportato un esempio dei dati di output di questa attività:

ImageClassifierResult:
 Classifications #0 (single classification head):
  head index: 0
  category #0:
   category name: "/m/01bwb9"
   display name: "Passer domesticus"
   score: 0.91406
   index: 671
  category #1:
   category name: "/m/01bwbt"
   display name: "Passer montanus"
   score: 0.00391
   index: 670

Questo risultato è stato ottenuto eseguendo la classe Bird Classifier su:

Il codice di esempio Classificatore di immagini mostra come visualizzare la classificazione i risultati restituiti dall'attività, consulta il codice esempio per maggiori dettagli.