Komponent COM

Scene Detector

Wykrywanie scen wideo dla programistów. Zintegruj je ze swoją aplikacją poprzez COM.

Scene Detector to komponent COM zbudowany w oparciu o technologię rozpoznawania scen HandySaw DS. Przetwarza plik wideo i zwraca listę wykrytych scen z dokładnością do pojedynczej klatki. Komponent może również generować miniatury dla każdej sceny i raportować nowo znalezione sceny w czasie rzeczywistym za pomocą interfejsów wywołania zwrotnego (callback). Nie musisz czekać na zakończenie pełnego procesu wykrywania.

Komponent COM jest zgodny ze standardową architekturą, dzięki czemu można go używać w praktycznie każdym środowisku programistycznym dla systemu Windows. Jeśli potrzebujesz samodzielnego narzędzia desktopowego, a nie komponentu dla programistów, właściwym wyborem będzie HandySaw DS.

Szerokie wsparcie formatów

Przetwarza każdy plik wideo odtwarzalny przez Windows Media Player za pośrednictwem API DirectShow.

Wywołania zwrotne w czasie rzeczywistym

Raportuje każdą nową scenę natychmiast po jej wykryciu. Twoja aplikacja otrzymuje wyniki w trakcie przetwarzania.

Generowanie miniatur

Opcjonalnie zapisuje pierwszą i ostatnią klatkę każdej sceny jako pliki BMP lub JPEG w dowolnej skali.

Przestrzenie barw RGB i YUV

Wykrywanie może działać w przestrzeni barw RGB24 lub YUY2; każda z nich posiada własne zalecane wartości domyślne progów.

Wykrywanie scen białych i czarnych

Konfigurowalne progi luminancji pozwalają identyfikować przejścia do bieli i czerni jako oddzielne sceny.

Przetwarzanie fragmentów plików

Określ pozycje początkową i końcową, aby wykrywać sceny tylko w wybranym segmencie pliku multimedialnego.

Niestandardowy potok filtrów

Zastąp wewnętrznie używane filtry źródłowe, splittery i dekodery DirectShow dla uzyskania maksymalnej kompatybilności.

Łączenie krótkich scen

Sceny krótsze niż konfigurowalne minimum są automatycznie łączone z sąsiednimi lub usuwane.

Skontaktuj się ze mną, aby uzyskać wersję demonstracyjną oraz informacje o cenach.

sdScenesMergeKind enum

Określa sposób obsługi krótkich scen po wykryciu.

sdMergeDelete = 0 Krótka scena jest usuwana.
sdMergeWithPrev = 1 Krótka scena jest łączona z poprzednią sceną.
sdMergeWithNext = 2 Krótka scena jest łączona z następną sceną.
sdMergeWithBoth = 3 Krótka scena, poprzednia scena i następna scena są łączone w jedną.

DetectorParameters structure

Podstawowe parametry silnika wykrywania scen.

BSTR VideoFileName Pełna ścieżka do przetwarzanego pliku wideo.
int Threshold Czułość wykrywania. Zakres 0-255. Zalecane wartości domyślne: 19 (RGB) i 5 (YUV). Nowa scena rozpoczyna się, gdy różnica między dwiema kolejnymi klatkami przekroczy tę wartość. Niższe wartości generują więcej scen.
int UpLumaTresh Próg przejścia do bieli. Zakres -1-255. Wartość -1 wyłącza tę funkcję. Gdy ogólna jasność klatki przekroczy tę wartość, rozpoczyna się nowa scena, grupująca jasne klatki razem.
int BottomLumaTresh Próg przejścia do czerni. Zakres -1-255. Wartość -1 wyłącza tę funkcję. Gdy ogólna jasność klatki spadnie poniżej tej wartości, rozpoczyna się nowa scena, grupująca ciemne klatki razem.
int MinSceneLength Minimalny czas trwania sceny w klatkach. Sceny krótsze niż ta wartość są modyfikowane zgodnie z polem Merge. Zalecana wartość domyślna: 5.
int RegisterGraph Rejestracja ROT wewnętrznego grafu przetwarzania. 1: rejestruj. 0: nie rejestruj.
BSTR SourceFilterMoniker Nazwa wyświetlana żądanego filtra źródłowego. NULL: użyj domyślnego.
BSTR SplitterFilterMoniker Nazwa wyświetlana żądanego filtra splittera. NULL: użyj domyślnego.
BSTR DecoderFilterMoniker Nazwa wyświetlana żądanego filtra dekodera. NULL: użyj domyślnego.
sdScenesMergeKind Merge Strategia łączenia stosowana, gdy wykryta scena jest krótsza niż MinSceneLength.

DetectorParameters2 structure

Rozszerza DetectorParameters o wybór przestrzeni barw i przetwarzanie fragmentów plików. Zawiera wszystkie pola DetectorParameters oraz poniższe.

int UseYUV Przestrzeń barw. 1: YUY2. 0: RGB24.
int Pad Zarezerwowane.
double StartPosition Pozycja rozpoczęcia przetwarzania w sekundach. Gdy jest niezerowa, wszystkie zwrócone czasy scen są względne względem tego przesunięcia.
double StopPosition Pozycja zakończenia przetwarzania w sekundach. 0: przetwarzaj do końca pliku.

ThumbnailsParameters structure

Kontroluje generowanie miniatur. Przekaż wskaźnik do tej struktury, aby włączyć miniatury, lub NULL, aby wyłączyć.

int JpegFormat Format wyjściowy. 0: BMP. 1: JPEG.
int JpegQuality Jakość kompresji JPEG, 0-100.
int ImagesPerScene 1: tylko klatka początkowa. 2: klatka początkowa i końcowa dla każdej sceny.
double Scale Współczynnik skali miniatury. 1.0: pełny rozmiar.
BSTR FileName Szablon nazwy pliku używający składni printf języka C z jednym polem liczbowym, np. d:\dir\frame%05d.jpg. Numer klatki zastępuje symbol zastępczy %d. Wymaga pełnej ścieżki z poprawnym rozszerzeniem.

ISceneDetector interface

Główny interfejs wykrywania scen.

DetectScenesInFile

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

Główna metoda wykrywania. Wywołujący nie musi tworzyć SafeArray wcześniej - przekaż wskaźnik do zmiennej SAFEARRAY. Jeśli po wywołaniu *Scenes nie jest NULL, wywołujący musi go zwolnić. Wynikiem jest dwuwymiarowa tablica. Dla każdej sceny dwie wartości typu long określają numery klatek początku i końca względem pozycji rozpoczęcia przetwarzania. Przekaż niezerowy ThumbnailsParams, aby włączyć generowanie miniatur.

HRESULT Znaczenie
0Sukces
0x80040601Nieokreślony błąd
0x80040602DirectShow nie jest zainstalowany lub wersja jest zbyt stara
0x80040603Nie można uzyskać czasu trwania wideo - może to być obraz statyczny
0x80040604Błędny argument
0x80040605Nie można utworzyć kontekstu urządzenia
0x80040606Obiekt jest zajęty innym zadaniem
0x80040607Liczba klatek na sekundę wynosi zero - może to być obraz statyczny
0x80040608Nie można zbudować grafu

ISceneDetector2 interface

Rozszerza ISceneDetector. Dziedziczy wszystkie jego metody i dodaje poniższe.

DetectScenesInFile2

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

To samo co DetectScenesInFile, ale używa DetectorParameters2, umożliwiając wybór przestrzeni barw i przetwarzanie fragmentów plików. Zwrócone wartości początku i końca sceny są względne względem Params.StartPosition.

GetFrameRate

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

Zwraca liczbę klatek na sekundę ostatnio przetworzonego pliku. Przydatne do konwersji numerów klatek na znaczniki czasu. Zwraca S_OK lub E_INVALIDARG, jeśli pFrameRate jest NULL.

ISceneDetectorEvents interface

Interfejs wywołania zwrotnego dla zdarzeń wykrywania w czasie rzeczywistym. Zaimplementuj w swojej aplikacji, aby otrzymywać wyniki w miarę ich znajdowania.

NewScene

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

Wywoływane, gdy nowa scena zostanie sfinalizowana. SceneIndex zaczyna się od 0. Start i Stop to numery klatek zaczynające się od 0. Gdy przetwarzanie zostało rozpoczęte przez DetectScenesInFile2, obie wartości są względne względem Params.StartPosition.

Status

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

Wywoływane co 50 ms z aktualnym postępem przetwarzania. Ustaw *AbortProcess na 1, aby anulować trwające wykrywanie.