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.