Scene Detector – Obiekt COM do wykrywania scen wideo

Opis

Scene Detector to potężny komponent COM do rozpoznawania i przetwarzania scen. Wykorzystuje on nagradzane technologie HandySaw DS dla niezwykle dokładnego i szybkiego optycznego rozpoznawania scen. Jest on skierowany do firm tworzących oprogramowanie i programistów, którzy chcą rozszerzyć swoje produkty. Komponent COM to moduł oprogramowania wielokrotnego użytku, który jest zgodny z architekturą Component Object Model (COM), umożliwiając jego użycie w różnych językach programowania i środowiskach. Jeśli szukasz samodzielnej aplikacji do wykrywania scen, możesz użyć HandySaw DS, korzystając z tego linku.

Obiekt Scene Detector przetwarza plik wideo i zwraca listę znalezionych scen. Może również zapisywać miniatury dla każdej sceny i natychmiast informować aplikację wywołującą o każdej nowej 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że być odtwarzany przez Windows Media Player (dzięki wykorzystaniu DirectShow API)
  • Szybki i dokładny algorytm
  • Łatwa integracja
  • Zgłasza nową scenę zaraz po jej zdefiniowaniu, podczas 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łowych, rozdzielających i dekodera wideo do użycia podczas przetwarzania
  • Może wykrywać sceny "białe" i "czarne"
  • Może pracować w przestrzeniach kolorów RGB i YUV
  • Może przetwarzać część pliku multimedialnego - użytkownik może określić początkową i końcową pozycję przetwarzania

 

Wersja demo i cena

Skontaktuj się ze mną.

 

Dokumentacja

 

Enum sdScenesMergeKind

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

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

 

Struktura DetectorParameters

Ta struktura zawiera parametry silnika wykrywania scen.

BSTR VideoFileName; Pełna nazwa pliku wideo do wykrycia.
int Threshold; Wartość progu wykrywania.
Zalecane wartości domyślne to 19 dla przestrzeni kolorów RGB i 5 dla YUV.
Może być od 0 do 255.
Ten parametr jest głównym.
Gdy różnica między dwiema klatkami jest większa niż ta wartość, rozpoczyna się nowa scena.
Zatem: niższy Threshold - więcej scen.
int UpLumaTresh; Używany w wykrywaniu "białych zanikania".
Zalecana wartość domyślna -1.
Może być 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żna zdefiniować sekwencję tak jasnych klatek jako oddzielną scenę.
int BottomLumaTresh; Używany w wykrywaniu "czarnych zanikania".
Zalecana wartość domyślna -1.
Może być 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żna zdefiniować sekwencję tak ciemnych klatek jako oddzielną scenę.
int MinSceneLength;

Ustawia minimalny czas trwania wykrytej sceny (w klatkach).
Zalecana wartość domyślna 5.
Może być od 0 do dowolnej wartości dodatniej.
Jeśli długość zdefiniowanej sceny jest mniejsza niż ta wartość, scena ta jest scalana z poprzednią, następną lub obiema scenami, zgodnie z wartością pola Merge (patrz poniżej).

int RegisterGraph; Kontroluje rejestrację wewnętrznego wykresu przetwarzania w Tabela uruchomionych obiektów (ROT).
Może być 1 (zarejestrowany w ROT) lub 0 (nie rejestruje).
BSTR SourceFilterMoniker; Nazwa wyświetlana żądanego monikera filtru źródłowego używanego w wewnętrznym wykresie przetwarzania.
Jeśli NULL - używany jest filtr domyślny.
BSTR SplitterFilterMoniker; Nazwa wyświetlana żądanego monikera filtru rozdzielającego używanego w wewnętrznym wykresie przetwarzania.
Jeśli NULL - używany jest filtr domyślny.
BSTR DecoderFilterMoniker; Nazwa wyświetlana żądanego monikera filtru dekodera używanego w wewnętrznym wykresie przetwarzania.
Jeśli NULL - używany jest filtr domyślny.
sdScenesMergeKind Merge; Gdy długość sceny jest mniejsza niż MinSceneLength, scena jest modyfikowana zgodnie z wartością tego parametru.

 

Struktura DetectorParameters2

Ta struktura rozszerza zestaw parametrów silnika wykrywania scen zdefiniowanych w strukturze DetectorParameters. Oprócz elementów członkowskich DetectorParameters zawiera:

int UseYUV; Umożliwia wybór przestrzeni kolorów do wykrywania scen.
Może być 1 (YUY2) lub 0 (RGB24).
int Pad; Zarezerwowane
double StartPosition; Określa początkową pozycję nośnika do wykrywania scen w sekundach.
Jeśli jest to wartość niezerowa, nie zapomnij, że wszystkie czasy scen są powiązane z tą pozycją.
double StopPosition; Określa końcową pozycję nośnika do wykrywania scen w sekundach.
Ustaw na zero, aby zignorować.

 

Struktura ThumbnailsParameters

Ta struktura 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; Liczba obrazów na scenę. 1 - tylko klatka początkowa, 2 - klatki początkowa i końcowa każdej sceny.
double Scale; Współczynnik skalowania miniatur. 1 - obraz 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\filename%05d.jpg"
Należy określić pełną ścieżkę z odpowiednim rozszerzeniem. Numer klatki zostanie wstawiony zamiast symboli %d, aby uzyskać nazwę pliku dla określonej miniatury.

 

Interfejs ISceneDetector

Ten interfejs udostępnia metody wykrywania scen:

Metoda DetectScenesInFile

HRESULT _stdcall DetectScenesInFile([in] DetectorParameters *Params, [in] ThumbnailsParameters *ThumbnailsParams, [out] SAFEARRAY(long) *Scenes );

Jest to główna metoda wykrywania scen.
Przekaż parametry wykrywania w Params i wskaźnik do SAFEARRAY w Scenes.
Jeśli Scenes ma wartość NULL, funkcja nie zwraca listy wykrytych scen.
Wywołujący 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, wywołujący musi zniszczyć *Scenes SafeArray.
*Scenes to tablica dwuwymiarowa. Dla każdej znalezionej sceny istnieją dwie długie wartości: numery klatek początku i końca sceny. Wartości te są powiązane z początkową pozycją nośnika przetwarzania.
Przekaż wskaźnik inny niż NULL jako ThumbnailsParams, aby włączyć generowanie miniatur i określić jego parametry. Przekaż NULL, aby wyłączyć generowanie miniatur.

Zwraca wartość HRESULT . Możliwe wartości to:

0 Powodzenie
0x80040601 Nieokreślony błąd
0x80040602 DirectShow nie jest zainstalowany lub wersja jest za stara
0x80040603 Nie można uzyskać czasu trwania wideo. Może to być zdjęcie
0x80040604 Nieprawidłowy 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 to być zdjęcie
0x80040608 Nie można zbudować wykresu

 

Interfejs ISceneDetector2

Ten interfejs pochodzi od interfejsu ISceneDetector i udostępnia rozszerzone metody wykrywania scen. Oprócz metod dziedziczonych z ISceneDetector, interfejs ISceneDetector2 udostępnia następujące metody:

Metoda DetectScenesInFile2

HRESULT _stdcall DetectScenesInFile2([in] DetectorParameters2 *Params, [in] ThumbnailsParameters *ThumbnailsParams, [out] SAFEARRAY(long) *Scenes );

W przeciwieństwie do DetectScenesInFile, ta metoda używa zestawu parametrów DetectorParameters2, co pozwala na określenie przestrzeni kolorów, pozycji początkowej i końcowej przetwarzania.
Zwróć uwagę na fakt, że wartości początku i końca scen zwrócone przez tę metodę są powiązane z wartością Params.StartPosition .
Zobacz opis DetectScenesInFile, aby uzyskać więcej informacji.

Metoda GetFrameRate

HRESULT _stdcall GetFrameRate([out, retval] double *pFrameRate );

Zwraca liczbę klatek na sekundę wideo 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ń udostępnia metody pobierania informacji o wykrywaniu scen w czasie rzeczywistym.

Metoda NewScene

HRESULT NewScene([in] long SceneIndex, [in] long Start, [in] long Stop );

Zdarzenie wywoływane 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 zostało uruchomione za pomocą metody DetectScenesInFile2, wartości Start i Stop są powiązane z wartością Params.StartPosition.

Metoda Status

HRESULT Status([in] long ScenesFound, [in] long CurrentFrame, [in] long TotalFrames, [out] long *AbortProcess );

Zdarzenie wywoływane co 50 ms i informuje klienta o stanie procesu.
AbortProcess to wskaźnik do zmiennej. Zatem klient może ustawić *AbortProcess na wartość 1, aby anulować bieżące wykrywanie scen.