Zadanie MediaPipe Image Embedder pozwala przekonwertować dane obrazu na reprezentację liczbową w celu realizacji zadań przetwarzania obrazu związanych z systemami uczącymi się, takich jak porównywanie podobieństw 2 obrazów. Te instrukcje pokazują, jak korzystać z narzędzia do dodawania obrazów dla aplikacji węzłów i aplikacji internetowych.
Więcej informacji o funkcjach, modelach i opcjach konfiguracji zapoznaj się z Przeglądem.
Przykładowy kod
Przykładowy kod komponentu Image Embedder zapewnia pełną implementację w JavaScripcie. Ten kod pomoże Ci przetestować to zadanie i zacznij tworzyć własną aplikację do umieszczania obrazów. Możesz wyświetlać, uruchamiać i edytuj Przykładowy kod narzędzia do umieszczania obrazów tylko za pomocą przeglądarki.
Konfiguracja
W tej sekcji opisujemy najważniejsze czynności związane z konfigurowaniem środowiska programistycznego oraz w projektach kodu, w których wykorzystano narzędzie do umieszczania obrazów. Ogólne informacje na temat: skonfigurować środowisko programistyczne do korzystania z zadań MediaPipe, w tym wymagań wersji platformy, patrz Przewodnik po konfiguracji stron internetowych
Pakiety JavaScript
Kod do umieszczania obrazu na stronie jest dostępny przez MediaPipe @mediapipe/tasks-vision
Pakiet NPM. Dostępne opcje
znajdź i pobierz te biblioteki, korzystając z linków dostępnych na platformie
Przewodnik po konfiguracji
Wymagane pakiety możesz zainstalować za pomocą tego kodu lokalnego środowiska przejściowego. za pomocą tego polecenia:
npm install @mediapipe/tasks-vision
Jeśli chcesz zaimportować kod zadania przez sieć dostarczania treści (CDN) , dodaj ten kod w tagu w pliku HTML:
<!-- You can replace jsDelivr with your preferred CDN -->
<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
crossorigin="anonymous"></script>
</head>
Model
Zadanie MediaPipe Image Embedder wymaga wytrenowanego modelu zgodnego z tym zadanie. Więcej informacji o dostępnych wytrenowanych modelach narzędzia do dodawania obrazów znajdziesz w materiałach na temat zapoznaj się z omówieniem zadania sekcją Modele.
Wybierz i pobierz model, a następnie zapisz go w katalogu projektu:
<dev-project-root>/app/shared/models/
Tworzenie zadania
Podaj ścieżkę modelu
Możesz utworzyć zadanie z opcjami domyślnymi za pomocą createFromModelPath()
:
const vision = await FilesetResolver.forVisionTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
const imageEmbedder = await ImageEmbedder.createFromOptions(vision, {
baseOptions: {
modelAssetPath: `https://storage.googleapis.com/mediapipe-models/image_embedder/mobilenet_v3_small/float32/1/mobilenet_v3_small.tflite`
},
});
Określ bufor modelu
Jeśli model jest już załadowany do pamięci, możesz użyć funkcji
Metoda createFromModelBuffer()
:
const vision = await FilesetResolver.forVisionTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
const imageEmbedder = ImageEmbedder.createFromModelBuffer(
vision,
new Uint8Array(...)
);
Określanie opcji niestandardowych
Zadanie MediaPipe Image Embedder używa funkcji createFromOptions
do ustawienia
załatwić sprawę. Funkcja createFromOptions
akceptuje wartości dla
opcje konfiguracji. Więcej informacji na temat:
zapoznaj się z sekcją Opcje konfiguracji.
Poniższy kod pokazuje, jak utworzyć i skonfigurować zadanie z niestandardowym użyciem opcje:
const vision = await FilesetResolver.forVisionTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
const imageEmbedder = await ImageEmbedder.createFromOptions(
vision,
{
baseOptions: {
modelAssetPath: "model.tflite"
},
quantize: true
});
Opcje konfiguracji
To zadanie zawiera te opcje konfiguracji aplikacji internetowych:
Nazwa opcji | Opis | Zakres wartości | Wartość domyślna |
---|---|---|---|
running_mode |
Ustawia tryb działania zadania. Dostępne są 2
tryby: IMAGE: tryb wprowadzania pojedynczego obrazu. WIDEO: tryb zdekodowanych klatek w filmie lub transmisji na żywo danych wejściowych, np. z kamery. |
{IMAGE, VIDEO } |
IMAGE |
l2Normalize |
Określa, czy znormalizować zwrócony wektor cech z normą L2. Użyj tej opcji tylko wtedy, gdy model nie zawiera jeszcze reklamy natywnej L2_NORMALIZATION TFLite Op. W większości przypadków tak jest i tak, Normalizacja L2 jest więc osiągana przez wnioskowanie TFLite i nie ma potrzeby dla tej opcji. | Boolean |
False |
quantize |
Określa, czy zwrócony wektor dystrybucyjny powinien być skwantyzowany na bajty za pomocą kwantyzacji skalarnej. Odtwarzacze domyślnie przyjmuje się, że są zgodne z normą jednostkową, w związku z tym każdy wymiar będzie miał wartość w zakresie [-1,0; 1,0]. Używaj l2Normalize, jeśli tak nie jest. | Boolean |
False |
Przygotuj dane
Narzędzie do dodawania obrazów może umieszczać obrazy w dowolnym formacie obsługiwanym przez przeglądarki hosta. Zadanie obsługuje również wstępne przetwarzanie danych wejściowych, w tym: zmiany rozmiaru, obrót i normalizację wartości.
Uruchomione są wywołania metod embed()
i embedForVideo()
narzędzia do umieszczania obrazów
synchronicznie i zablokować wątek interfejsu użytkownika. Jeśli chcesz wyodrębnić
wektorów cech z ramek wideo, każde osadzenie zablokuje wątek główny.
Możesz temu zapobiec, implementując instancje internetowe do uruchamiania embed()
i
embedForVideo()
metody w innym wątku.
Uruchamianie zadania
Moduł do dodawania obrazów używa embed()
(w trybie działania image
) i
Metody do aktywowania: embedForVideo()
(z trybem uruchamiania video
)
danych. Interfejs Image Embedder API zwróci wektory dystrybucyjne dla obiektu
obrazu wejściowego.
Ten kod pokazuje, jak wykonywać przetwarzanie za pomocą modelu zadań:
Obraz
const image = document.getElementById("image") as HTMLImageElement; const imageEmbedderResult = imageEmbedder.embed(image);
Wideo
const video = document.getElementById("webcam"); const startTimeMs = performance.now(); const embedderResult = await imageEmbedder.embedForVideo(video, startTimeMs);
Obsługa i wyświetlanie wyników
Po uruchomieniu wnioskowania zadanie umieszczania obrazu zwraca błąd
Obiekt ImageEmbedderResult
, który zawiera wektory dystrybucyjne dla danych wejściowych
obrazu lub ramki.
Poniżej znajdziesz przykładowe dane wyjściowe tego zadania:
ImageEmbedderResult:
Embedding #0 (sole embedding head):
float_embedding: {0.0, 0.0, ..., 0.0, 1.0, 0.0, 0.0, 2.0}
head_index: 0
Ten wynik udało się uzyskać przez umieszczenie tego obrazu:
Możesz porównać semantyczne podobieństwo dwóch wektorów dystrybucyjnych za pomocą funkcji
ImageEmbedder.cosineSimilarity
. Poniżej znajdziesz kod dla
przykład.
// Compute cosine similarity.
const similarity = ImageEmbedder.cosineSimilarity(
imageEmbedderResult.embeddings[0],
otherEmbedderResult.embeddings[0]);
Przykładowy kod komponentu do umieszczenia obrazu pokazuje, jak wyświetlić ten element. wyników zwróconych przez zadanie, patrz przykładowy kod .