Przewodnik po klasyfikacji obrazów w internecie

Zadanie MediaPipe Image Classifier umożliwia klasyfikację obrazów. Możesz użyć tego zadania, aby określić, co obraz reprezentuje w zbiorze kategorii zdefiniowanych w czasie trenowania. Te instrukcje pokazują, jak używać klasyfikatora obrazów w aplikacjach węzłów i aplikacji internetowych.

Aby zobaczyć, jak działa to zadanie, wyświetl prezentację. Więcej informacji o możliwościach, modelach i opcjach konfiguracji w tym zadaniu znajdziesz w sekcji Omówienie.

Przykładowy kod

Przykładowy kod klasy Image Classifier zawiera pełną implementację tego zadania w języku JavaScript. Ten kod pomoże Ci przetestować to zadanie i rozpocząć tworzenie własnej aplikacji do klasyfikacji obrazów. Możesz wyświetlać, uruchamiać i edytować przykładowy kod klasyfikatora obrazów za pomocą przeglądarki.

Konfiguracja

W tej sekcji znajdziesz najważniejsze czynności, które musisz wykonać, aby skonfigurować środowisko programistyczne i projekty kodu pod kątem użycia klasyfikatora obrazów. Ogólne informacje o konfigurowaniu środowiska programistycznego na potrzeby zadań MediaPipe, w tym o wymaganiach dotyczących wersji platformy, znajdziesz w przewodniku konfiguracji dla aplikacji internetowych.

Pakiety JavaScript

Kod klasyfikatora obrazów jest dostępny w pakiecie MediaPipe @mediapipe/tasks-vision NPM. Biblioteki te możesz znaleźć i pobrać, korzystając z linków podanych w przewodniku po konfiguracji platformy.

Możesz zainstalować wymagane pakiety z tym kodem na potrzeby lokalnego środowiska przejściowego, korzystając z następującego polecenia:

npm install @mediapipe/tasks-vision

Jeśli chcesz zaimportować kod zadania przez usługę sieci dostarczania treści (CDN), dodaj ten kod do tagu w pliku HTML:

<!-- You can replace JSDeliver with another CDN if you prefer to -->
<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
    crossorigin="anonymous"></script>
</head>

Model

Zadanie MediaPipe Image Classifier wymaga wytrenowanego modelu, który jest zgodny z tym zadaniem. Więcej informacji o dostępnych wytrenowanych modelach na potrzeby klasyfikatora obrazów znajdziesz w omówieniu zadania w sekcji Modele.

Wybierz i pobierz model, a następnie zapisz go w katalogu projektu:

<dev-project-root>/app/shared/models/

Tworzenie zadania

Użyj jednej z funkcji klasyfikatora obrazów createFrom...(), aby przygotować zadanie do uruchamiania zależności. Użyj funkcji createFromModelPath() ze ścieżką względną lub bezwzględną do pliku wytrenowanego modelu. Jeśli model jest już załadowany do pamięci, możesz użyć metody createFromModelBuffer().

Poniższy przykładowy kod pokazuje użycie funkcji createFromOptions() do skonfigurowania zadania. Funkcja createFromOptions pozwala dostosować klasyfikator obrazów za pomocą opcji konfiguracyjnych. Więcej informacji o opcjach konfiguracji znajdziesz w artykule Opcje konfiguracji.

Poniższy kod pokazuje, jak utworzyć i skonfigurować zadanie z użyciem opcji niestandardowych:

async function createImageClassifier {
  const vision = await FilesetResolver.forVisionTasks(
    "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.0/wasm"
  );
  imageClassifier = await ImageClassifier.createFromOptions(vision, {
    baseOptions: {
      modelAssetPath: `https://storage.googleapis.com/mediapipe-models/image_classifier/efficientnet_lite0/float32/1/efficientnet_lite0.tflite`
    },
  });
}

Opcje konfiguracji

To zadanie zawiera te opcje konfiguracji aplikacji internetowych:

Nazwa opcji Opis Zakres wartości Wartość domyślna
runningMode Ustawia tryb działania zadania. Dostępne są 2 tryby:

IMAGE: tryb wprowadzania pojedynczego obrazu.

WIDEO: tryb zdekodowanych klatek filmu lub transmisji danych wejściowych, np. z kamery.
{IMAGE, VIDEO} IMAGE
displayNamesLocale Określa język etykiet, które mają być używane w przypadku wyświetlanych nazw podanych w metadanych modelu zadania (jeśli są dostępne). Wartość domyślna to en w przypadku języka angielskiego. Możesz dodać zlokalizowane etykiety do metadanych modelu niestandardowego za pomocą interfejsu TensorFlow Lite Metadata Writer API. Kod języka en
maxResults Określa opcjonalną maksymalną liczbę zwracanych wyników klasyfikacji z najlepszymi wynikami. Jeśli wartość jest mniejsza niż 0, zwracane są wszystkie dostępne wyniki. Dowolne liczby dodatnie -1
scoreThreshold Ustawia próg wyniku prognozy, który zastępuje próg podany w metadanych modelu (jeśli występuje). Wyniki poniżej tej wartości zostały odrzucone. Dowolna liczba zmiennoprzecinkowa Nie ustawiono
categoryAllowlist Ustawia opcjonalną listę dozwolonych nazw kategorii. Jeśli pole nie jest puste, wyniki klasyfikacji, których nazwy kategorii nie znajdują się w tym zbiorze, zostaną odfiltrowane. Zduplikowane lub nieznane nazwy kategorii są ignorowane. Ta opcja wzajemnie się wyklucza z metodą categoryDenylist i jej użycie powoduje błąd. Dowolne ciągi Nie ustawiono
categoryDenylist Ustawia opcjonalną listę nazw kategorii, które nie są dozwolone. Jeśli pole nie jest puste, wyniki klasyfikacji, których nazwa kategorii znajduje się w tym zbiorze, zostaną odfiltrowane. Zduplikowane lub nieznane nazwy kategorii są ignorowane. Ta opcja wyklucza się z metodą categoryAllowlist i jej użycie powoduje błąd. Dowolne ciągi Nie ustawiono
resultListener Konfiguruje detektor wyników tak, aby asynchronicznie otrzymywał wyniki klasyfikacji, gdy klasyfikator obrazów jest w trybie transmisji na żywo. Tej opcji można używać tylko wtedy, gdy tryb działania jest ustawiony na LIVE_STREAM Nie dotyczy Nie ustawiono

Przygotuj dane

Klasyfikator obrazów może klasyfikować obiekty w obrazach w dowolnym formacie obsługiwanym przez przeglądarkę hosta. Zadanie obsługuje również wstępne przetwarzanie danych wejściowych, w tym zmianę rozmiaru, rotację i normalizację wartości.

Wywołania metod classify() i classifyForVideo() klasyfikatora obrazów są uruchamiane synchronicznie i blokują wątek interfejsu użytkownika. Jeśli sklasyfikujesz obiekty w klatkach wideo z kamery urządzenia, każda klasyfikacja zablokuje wątek główny. Aby temu zapobiec, zaimplementuj instancje robocze tak, aby uruchamiały polecenia classify() i classifyForVideo() w innym wątku.

Uruchamianie zadania

Klasyfikator obrazów aktywuje wnioskowanie za pomocą metody classify() z trybem obrazu i metody classifyForVideo() z trybem video. Interfejs Image Classifier API zwróci możliwe kategorie obiektów w obrazie wejściowym.

Ten kod pokazuje, jak wykonywać przetwarzanie za pomocą modelu zadań:

Obraz

const image = document.getElementById("image") as HTMLImageElement;
const imageClassifierResult = imageClassifier.classify(image);

Wideo

const video = document.getElementById("video");
await imageClassifier.setOptions({ runningMode: "VIDEO" });

const timestamp = performance.now();
const classificationResult = await imageClassifier.classifyForVideo(
    video,
    timestamp
  );

Pełną implementację uruchamiania zadania klasyfikatora obrazów znajdziesz w przykładowym kodzie.

Obsługa i wyświetlanie wyników

Po uruchomieniu wnioskowania zadanie Klasyfikator obrazów zwraca obiekt ImageClassifierResult zawierający listę możliwych kategorii obiektów w obrazie lub ramce wejściowej.

Poniżej znajdziesz przykładowe dane wyjściowe tego zadania:

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

Ten wynik uzyskano po uruchomieniu Bird Classifier na:

Przykładowy kod klasyfikatora obrazów pokazuje, jak wyświetlić wyniki klasyfikacji zwrócone przez zadanie. Szczegóły znajdziesz w przykładowym kodzie.