Leitfaden zur Bildklassifizierung für Python

Mit der Aufgabe „MediaPipe Image Classifier“ können Sie Bilder klassifizieren. Sie können Aufgabe zu identifizieren, was ein Bild aus einer Reihe von definierten Kategorien darstellt während der Trainingsphase. In dieser Anleitung erfahren Sie, wie Sie den Bildklassifikator verwenden. mit Python.

Sie können diese Aufgabe in Aktion sehen, indem Sie die Webseite Für über die Funktionen, Modelle und Konfigurationsoptionen finden Sie in der Übersicht.

Codebeispiel

Der Beispielcode für den Bildklassifikator bietet eine vollständige Implementierung dieses in Python. Dieser Code hilft Ihnen, diese Aufgabe zu testen und mit dem Erstellen eines eigenen Bildklassifikators begonnen. Sie können den Bereich Bildklassifikator Beispiel Code ganz einfach in Ihrem Webbrowser.

Wenn Sie den Bildklassifikator für Raspberry Pi implementieren, finden Sie weitere Informationen in der Beispiel für Raspberry Pi App.

Einrichtung

In diesem Abschnitt werden die wichtigsten Schritte zum Einrichten Ihrer Entwicklungsumgebung und für die Verwendung des Image Classifier. Allgemeine Informationen zu Einrichten Ihrer Entwicklungsumgebung für die Verwendung von MediaPipe-Aufgaben, einschließlich Anforderungen an die Plattformversion finden Sie im Einrichtungsleitfaden für Python.

<ph type="x-smartling-placeholder">

Pakete

Die Aufgabe des Bildklassifikators für das pip-Paket von mediapipe. Sie können die Abhängigkeit mit:

$ 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

Modell

Für die Aufgabe „MediaPipe Image Classifier“ ist ein trainiertes Modell erforderlich, das mit dieser für die Aufgabe. Weitere Informationen zu verfügbaren trainierten Modellen für den Bildklassifikator finden Sie unter in der Aufgabenübersicht im Abschnitt „Modelle“.

Wählen Sie ein Modell aus, laden Sie es herunter und speichern Sie es dann in einem lokalen Verzeichnis. Sie können die empfohlenen EffizientNet-Lite0 modellieren.

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

Geben Sie den Pfad des Modells innerhalb des Parameters Model Name wie unten gezeigt an:

base_options = BaseOptions(model_asset_path=model_path)

Aufgabe erstellen

Verwenden Sie die Funktion create_from_options, um die Aufgabe zu erstellen. Die Die Funktion create_from_options akzeptiert Konfigurationsoptionen, einschließlich der Ausführung Modus, Anzeigenamen, Sprache, maximale Anzahl von Ergebnissen, Konfidenzgrenzwert, Liste der Kategorien zulassen und ablehnen. Weitere Informationen zur Konfiguration finden Sie unter Konfigurationsübersicht.

Die Aufgabe „Bildklassifikator“ unterstützt drei Eingabedatentypen: Standbilder und Videodateien. und Live-Videostreams. Wählen Sie die Registerkarte, die Ihrem Eingabedatentyp entspricht, und wie Sie die Aufgabe erstellen und eine Inferenz ausführen.

Bild

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

Livestream

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

Ein vollständiges Beispiel für die Erstellung eines Bildklassifikators zur Verwendung mit einem Bild finden Sie unter der Code Beispiel

Konfigurationsoptionen

Diese Aufgabe bietet die folgenden Konfigurationsoptionen für Python-Anwendungen:

Option Beschreibung Wertebereich Standardwert
running_mode Legt den Ausführungsmodus für die Task fest. Es gibt drei Modi:

IMAGE: Der Modus für Einzelbildeingaben.

VIDEO: Der Modus für decodierte Frames eines Videos.

LIVE_STREAM: Der Modus für einen Livestream mit Eingabe zum Beispiel von einer Kamera. In diesem Modus muss der resultListener wird aufgerufen, um einen Listener für den Empfang von Ergebnissen einzurichten asynchron programmiert.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
display_names_locale Legt die Sprache der Labels fest, die für Anzeigenamen in der Metadaten des Aufgabenmodells, falls verfügbar. Standardwert ist en für Englisch. Sie können den Metadaten eines benutzerdefinierten Modells lokalisierte Labels hinzufügen mit der TensorFlow Lite Metadata Writer API Gebietsschemacode de
max_results Legt die optionale maximale Anzahl der am besten bewerteten Klassifizierungsergebnisse fest auf zurückgeben. Wenn < 0 setzen, werden alle verfügbaren Ergebnisse zurückgegeben. Beliebige positive Zahlen -1
score_threshold Legt den Schwellenwert für die Vorhersagepunktzahl fest, der den Wert in die Modellmetadaten (falls vorhanden). Ergebnisse unter diesem Wert werden abgelehnt. Beliebiger Gleitkommawert Nicht festgelegt
category_allowlist Legt die optionale Liste der zulässigen Kategorienamen fest. Wenn das Feld nicht leer ist, Klassifizierungsergebnisse, deren Kategoriename nicht in dieser Gruppe enthalten ist, werden herausgefiltert. Doppelte oder unbekannte Kategorienamen werden ignoriert. Diese Option schließt sich mit category_denylist gegenseitig aus und verwendet führt beides zu einem Fehler. Alle Strings Nicht festgelegt
category_denylist Legt die optionale Liste der unzulässigen Kategorienamen fest. Wenn nicht leer ist, werden Klassifizierungsergebnisse gefiltert, deren Kategoriename in diesem Satz enthalten ist. aus. Doppelte oder unbekannte Kategorienamen werden ignoriert. Diese Option ausschließlich mit category_allowlist und die Verwendung beider führt zu einem Fehler. Alle Strings Nicht festgelegt
result_callback Legt den Ergebnis-Listener so fest, dass er die Klassifizierungsergebnisse empfängt asynchron, wenn sich der Bildklassifikator im Livestream befindet . Kann nur verwendet werden, wenn der Ausführungsmodus auf LIVE_STREAM festgelegt ist Nicht festgelegt

Daten vorbereiten

Bereiten Sie Ihre Eingabe als Bilddatei oder NumPy-Array vor und konvertieren Sie sie in ein mediapipe.Image-Objekt. Wenn Sie eine Videodatei oder einen Livestream von einem können Sie eine externe Bibliothek wie OpenCV, um die Eingabeframes als NumPy zu laden Arrays.

Die folgenden Beispiele zeigen, wie Daten für die Verarbeitung vorbereitet werden. alle verfügbaren Datentypen

Bild

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)
    

Livestream

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)
    

Aufgabe ausführen

Sie können die Klassifizierungsfunktion aufrufen, die Ihrem Ausführungsmodus entspricht, um Rückschlüsse. Die Image Classifier API gibt die möglichen Kategorien für die -Objekt innerhalb des Eingabebilds oder -frames anzuzeigen.

Bild

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

Livestream

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

Wichtige Hinweise:

  • Im Video- oder Livestreammodus musst du außerdem stellen der Bildklassifikatoraufgabe den Zeitstempel des Eingabe-Frames bereit.
  • Bei der Ausführung im Bild- oder Videomodell wird die Aufgabe des Bildklassifizierers den aktuellen Thread blockieren, bis die Verarbeitung des Eingabebildes abgeschlossen ist. Frame.
  • Im Livestreammodus blockiert die Aufgabe „Bildklassifikator“ nicht, aktuellen Thread angelehnt, aber sofort wieder zurück. Das Ergebnis wird aufgerufen. Listener mit dem Klassifizierungsergebnis jedes Mal die Verarbeitung eines Eingabe-Frames. Wenn die Funktion classifyAsync aufgerufen wird, wenn die Aufgabe "Bildklassifikator" einen weiteren Frame verarbeitet, ignoriert die Aufgabe den neuen Eingabeframe.

Ein vollständiges Beispiel für die Erstellung eines Bildklassifikators zur Verwendung mit einem Bild finden Sie unter der Code Beispiel

Ergebnisse verarbeiten und anzeigen

Beim Ausführen der Inferenz gibt die Bildklassifikatoraufgabe eine ImageClassifierResult-Objekt, das die Liste der möglichen Kategorien enthält für die Objekte im Eingabebild oder -frame.

Im Folgenden sehen Sie ein Beispiel für die Ausgabedaten dieser Aufgabe:

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

Dieses Ergebnis erhalten Sie mit dem Vogelklassifikator. am:

Der Beispielcode für den Bildklassifikator veranschaulicht, wie die Klassifizierung angezeigt wird. der Aufgabe zurückgegebene Ergebnisse erhalten, siehe Code Beispiel .