Scene Detector – wykrywanie scen wideo Obiekt COM

Opis

Scene Detector to potężny komponent COM do rozpoznawania i przetwarzania scen. Zawiera wielokrotnie nagradzane technologie HandySaw DS, które zapewniają niezwykle dokładne i szybkie optyczne rozpoznawanie scen. Jest zorientowany na producentów oprogramowania i programistów, którzy chcą rozszerzać swoje produkty. Komponent COM to moduł oprogramowania wielokrotnego użytku, zgodny z architekturą COM ( Component Object Model ), dzięki czemu można go używać w różnych językach programowania i środowiskach. Jeśli szukasz samodzielnej aplikacji do wykrywania scen, możesz użyć HandySaw DS, klikając ten link .

Obiekt Scene Detector przetwarza plik wideo i zwraca listę znalezionych scen. Może także zapisywać miniatury każdej sceny i natychmiast informować aplikację wywołującą o każdej nowo znalezionej scenie za pośrednictwem interfejsów wywołania zwrotnego podczas przetwarzania.

Główne cechy

  • Wykrywa sceny w prawie każdym pliku wideo, który można odtworzyć w programie Windows Media Player (dzięki wykorzystaniu interfejsu API DirectShow)
  • Szybki i dokładny algorytm
  • Łatwa integracja
  • Raportuje nową scenę zaraz po jej zdefiniowaniu, w trakcie przetwarzania. Nie trzeba czekać na zakończenie wykrywania
  • Może generować miniatury - obrazy pierwszej i ostatniej klatki dla każdej sceny i zapisywać je w plikach BMP lub JPG
  • Możliwość określenia filtrów źródła, rozdzielacza i dekodera wideo do użycia podczas przetwarzania
  • Potrafi wykryć „białe” i „czarne” sceny
  • Może pracować w przestrzeniach kolorów RGB i YUV
  • Może przetwarzać część pliku multimedialnego - użytkownik może określić pozycje rozpoczęcia i zakończenia przetwarzania

Wersja demonstracyjna i cena

Skontaktuj się ze mną.

Dokumentacja

Wyliczenie sdScenesMergeKind

Używane do podawania instrukcji, co zrobić z krótkimi scenami.

sdMergeDelete = 0, Krótka scena usunięta
sdMergeWithPrev = 1, Krótka scena połączona z poprzednią
sdMergeWithNext = 2, Krótka scena połączona z następną
sdMergeWithBoth = 3 Krótka (środkowa) scena poprzednia i następna połączona w jedną scenę

Struktura parametrów detektora

Struktura ta zawiera parametry silnika detekcji scen.

BSTR VideoFileName; Pełna nazwa pliku wideo do wykrywania.
int Threshold; Wartość progu detekcji.
Zalecane wartości domyślne to 19 dla przestrzeni kolorów RGB i 5 dla YUV.
Może wynosić od 0 do 255.
Ten parametr jest główny.
Gdy różnica dwóch klatek jest większa od tej wartości, rozpoczyna się nowa scena.
Zatem: niższy próg – więcej scen.
int UpLumaTresh; Używany do wykrywania „białego zaniku”.
Zalecana wartość domyślna -1.
Może wynosić od -1 do 255.
„-1” wyłącza tę funkcję.
Gdy ogólna jasność klatki jest większa niż ta wartość, rozpoczyna się nowa scena.
Dzięki tej funkcji możliwe jest zdefiniowanie sekwencji tak jasnych klatek jako osobnej sceny.
int BottomLumaTresh; Używany do wykrywania „czarnych zaników”.
Zalecana wartość domyślna -1.
Może wynosić od -1 do 255.
„-1” wyłącza tę funkcję.
Gdy ogólna jasność klatki jest mniejsza niż ta wartość, rozpoczyna się nowa scena.
Dzięki tej funkcji możliwe jest zdefiniowanie sekwencji takich ciemnych klatek jako oddzielnych scen.
int MinSceneLength;

Ustawia minimalny czas trwania wykrytej sceny (w klatkach).
Zalecane ustawienie domyślne 5.
Może przyjmować wartość od 0 do dowolnej wartości dodatniej.
Jeśli długość zdefiniowanej sceny jest mniejsza niż ta wartość, scena ta zostanie połączona z poprzednią, następną lub obiema scenami, zgodnie z wartością pola Połącz (patrz poniżej).

int RegisterGraph; Rejestracja kontrolna wykresu przetwarzania wewnętrznego w tabeli uruchomionych obiektów (ROT).
Może wynosić 1 (rejestracja w ROT) lub 0 (nie rejestruje się).
BSTR SourceFilterMoniker; Wyświetlana nazwa żądanego pseudonimu filtra źródłowego używanego na grafie przetwarzania wewnętrznego.
Jeśli NULL - używany filtr domyślny.
BSTR SplitterFilterMoniker; Wyświetlana nazwa żądanego monikera filtra rozdzielającego używanego na grafie przetwarzania wewnętrznego.
Jeśli NULL - używany filtr domyślny.
BSTR DecoderFilterMoniker; Wyświetlana nazwa żądanego monikera filtra dekodera używanego na wykresie przetwarzania wewnętrznego.
Jeśli NULL - używany filtr domyślny.
sdScenesMergeKind Merge; Gdy długość sceny jest mniejsza niż MinSceneLength, scena jest modyfikowana zgodnie z wartością tego parametru.

Struktura DetectorParameters2

Struktura ta rozszerza zestaw parametrów silnika detekcji scen zdefiniowanych w strukturze DetectorParameters . Oprócz członków DetectorParameters zawiera:

int UseYUV; Umożliwia wybór przestrzeni kolorów do wykrywania scen.
Może wynosić 1 (YUY2) lub 0 (RGB24).
int Pad; Skryty
double StartPosition; Określa w sekundach początkową pozycję nośnika do wykrywania sceny.
Jeśli jest to wartość różna od zera, nie zapominaj, że czasy wszystkich scen odnoszą się do tej pozycji.
double StopPosition; Określa w sekundach pozycję zatrzymania nośnika w celu wykrycia sceny.
Ustaw na zero, aby zignorować.

Struktura parametrów miniatur

Struktura ta zawiera parametry generowania miniatur.

int JpegFormat; Wybierz format pliku. 0 - generuj pliki BMP, 1 - generuj pliki JPEG.
int JpegQuality; Jakość kompresji JPEG. Liczba całkowita od 0 do 100.
int ImagesPerScene; Obrazy według numeru sceny. 1 - tylko klatka początkowa, 2 - klatka początkowa i końcowa każdej sceny.
double Scale; Współczynnik skalowania miniatury. 1 - zdjęcie w pełnym rozmiarze. Wartość zmiennoprzecinkowa.
BSTR FileName;

Szablon nazw plików miniatur. Ciąg znaków dla funkcji „C” „printf” z jednym polem całkowitym.
Na przykład: „d:\filedir\nazwa pliku%05d.jpg”
Należy podać pełną ścieżkę z odpowiednim rozszerzeniem. Zamiast symboli %d zostanie wstawiony numer klatki, aby uzyskać nazwę pliku dla określonej miniatury.

Interfejs ISceneDetector

Interfejs ten zapewnia metody wykrywania scen:

Metoda DetectScenesInFile

HRESULT _stdcall DetectScenesInFile ([w] DetectorParameters *Params, [w] ThumbnailsParameters *ThumbnailsParams, [na zewnątrz] SAFEARRAY (długi) *Sceny );

Jest to metoda wykrywania sceny głównej.
Przekaż parametry wykrywania w Params i wskaźnik do SAFEARRAY w Scenes.
Jeżeli Scenes ma wartość NULL, funkcja nie zwraca listy wykrytych scen.
Osoba wywołująca nie musi tworzyć SafeArray przed wywołaniem tej metody.
Jeśli Scenes nie ma wartości NULL i po wywołaniu funkcji *Scenes również nie ma wartości NULL, osoba wywołująca musi zniszczyć *Scenes SafeArray.
*Sceny to tablica dwuwymiarowa. Dla każdej znalezionej sceny przypisane są dwie długie wartości: numer klatki początkowej i końcowej sceny. Wartości te odnoszą się do początkowej pozycji nośnika przetwarzania.
Przekaż wskaźnik inny niż NULL jako ThumbnailsParams , aby włączyć generowanie miniatur i określić jego parametry. Przekaż wartość NULL, aby wyłączyć generowanie miniatur.

Zwraca wartość HRESULT . Możliwe wartości obejmują:

0 Powodzenie
0x80040601 Nieokreślony błąd
0x80040602 DirectShow nie jest zainstalowany lub jego wersja jest zbyt stara
0x80040603 Nie można uzyskać czasu trwania filmu. Może być nieruchomy obraz
0x80040604 Zły argument
0x80040605 Nie można utworzyć kontekstu urządzenia
0x80040606 Obiekt jest zajęty innym zadaniem
0x80040607 Liczba klatek na sekundę wynosi zero. Może być nieruchomy obraz
0x80040608 Nie można zbudować wykresu

Interfejs ISceneDetector2

Interfejs ten wywodzi się z interfejsu ISceneDetector i zapewnia rozszerzone metody wykrywania scen. Oprócz metod odziedziczonych z ISceneDetector interfejs ISceneDetector2 udostępnia następujące metody:

Metoda DetectScenesInFile2

HRESULT _stdcall DetectScenesInFile2 ([w] DetectorParameters2 *Params, [w] ThumbnailsParameters *ThumbnailsParams, [na zewnątrz] SAFEARRAY (długie) *Sceny );

W przeciwieństwie do DetectScenesInFile metoda ta wykorzystuje zestaw parametrów DetectorParameters2 , dzięki czemu pozwala określić przestrzeń kolorów oraz pozycje rozpoczęcia i zakończenia przetwarzania.
Zwróć uwagę, że wartości początkowe i końcowe scen zwracane tą metodą są zależne od wartości Params.StartPosition .
Aby uzyskać inne informacje, zobacz opis DetectScenesInFile .

Metoda GetFrameRate

HRESULT _stdcall GetFrameRate ([wyjście, retval] double *pFrameRate );

Zwraca liczbę klatek wideo dla ostatnio przetworzonego pliku. Przydatne do tłumaczenia czasu na numer klatki.
Zwraca S_OK lub E_INVALIDARG, jeśli pFrameRate ma wartość NULL.

Interfejs zdarzeń ISceneDetectorEvents

Ten interfejs zdarzeń zapewnia metody pobierania informacji o wykryciu sceny w czasie rzeczywistym.

Metoda NewScene

HRESULT NewScene ([cale] długi SceneIndex, [cal] długi Start, [cal] długi Stop);

Zdarzenie wywołane przez detektor po zdefiniowaniu nowej sceny.
SceneIndex zaczyna się od 0.
Start i Stop również zaczynają się od 0 i są numerami klatek.
Gdy przetwarzanie rozpoczęło się za pomocą metody DetectScenesInFile2 , wartości Start i Stop odnoszą się do wartości Params.StartPosition .

Metoda stanu

HRESULT Status ([w] długich ScenesFound, [w] długich CurrentFrame, [w] długich TotalFrames, [na zewnątrz] długich *AbortProcess );

Zdarzenie uruchamiane co 50 ms i informuje klienta o statusie procesu.
AbortProcess jest wskaźnikiem do zmiennej. W ten sposób klient może ustawić wartość * AbortProcess na 1, aby anulować wykrywanie bieżącej sceny.