Scene Detector – Objekt COM pro detekci video scén
Popis
Scene Detector je výkonná komponenta COM pro rozpoznávání a zpracování scén. Zahrnuje oceňované technologie HandySaw DS pro mimořádně přesné a rychlé optické rozpoznávání scén. Je zaměřena na softwarové společnosti a vývojáře, kteří chtějí rozšířit své produkty. Komponenta COM je opakovaně použitelný softwarový modul, který se řídí architekturou Component Object Model (COM), což umožňuje jeho použití v různých programovacích jazycích a prostředích. Pokud hledáte samostatnou aplikaci pro detekci scén, můžete použít HandySaw DS podle tohoto odkazu.
Objekt Scene Detector zpracovává video soubor a vrací seznam nalezených scén. Může také ukládat náhledy pro každou scénu a informovat volající aplikaci okamžitě o každé nové nalezené scéně prostřednictvím callback rozhraní během zpracování.
Hlavní funkce
- Detekuje scény téměř v jakémkoli video souboru, který lze přehrát pomocí aplikace Windows Media Player (díky použití DirectShow API)
- Rychlý a přesný algoritmus
- Snadná integrace
- Hlásí novou scénu ihned po jejím definování, během zpracování. Není třeba čekat na dokončení detekce
- Může generovat náhledy - obrázky prvního a posledního snímku pro každou scénu a ukládat je do souborů BMP nebo JPG
- Je možné zadat zdrojové, splitter a video dekodérové filtry, které se mají použít během zpracování
- Může detekovat „bílé“ a „černé“ scény
- Může pracovat v barevných prostorech RGB a YUV
- Může zpracovávat část mediálního souboru - uživatel může zadat počáteční a koncové pozice zpracování
Demo verze a cena
Kontaktujte mě.
Dokumentace
sdScenesMergeKind enum
Používá se k zadání instrukcí, co dělat s krátkými scénami.
sdMergeDelete = 0, | Krátká scéna odstraněna |
sdMergeWithPrev = 1, | Krátká scéna sloučena s předchozí |
sdMergeWithNext = 2, | Krátká scéna sloučena s následující |
sdMergeWithBoth = 3 | Krátká (prostřední), předchozí a následující scény sloučeny do jedné scény |
Struktura DetectorParameters
Tato struktura obsahuje parametry enginu detekce scén.
BSTR VideoFileName; | Úplný název video souboru pro detekci. |
int Threshold; | Hodnota prahu detekce. Doporučené výchozí hodnoty jsou 19 pro barevný prostor RGB a 5 pro YUV. Může být od 0 do 255. Tento parametr je hlavní. Pokud je rozdíl dvou snímků větší než tato hodnota, začíná nová scéna. Tedy: nižší práh - více scén. |
int UpLumaTresh; | Používá se při detekci "bílých prolínaček". Doporučená výchozí hodnota -1. Může být od -1 do 255. "-1" deaktivuje tuto funkci. Pokud je celkový jas snímku větší než tato hodnota, začíná nová scéna. S touto funkcí je možné definovat sekvenci takových jasných snímků jako samostatnou scénu. |
int BottomLumaTresh; | Používá se při detekci "černých prolínaček". Doporučená výchozí hodnota -1. Může být od -1 do 255. "-1" deaktivuje tuto funkci. Pokud je celkový jas snímku menší než tato hodnota, začíná nová scéna. S touto funkcí je možné definovat sekvenci takových tmavých snímků jako samostatnou scénu. |
int MinSceneLength; | Nastaví minimální délku detekované scény (v snímcích). |
int RegisterGraph; | Řídí registraci interního grafu zpracování v
tabulce spuštěných objektů (ROT). Může být 1 (registrovat v ROT) nebo 0 (neregistrovat). |
BSTR SourceFilterMoniker; | Zobrazovaný název požadovaného source filter monikeru použitého v interním grafu zpracování. Pokud je NULL - použit výchozí filtr. |
BSTR SplitterFilterMoniker; | Zobrazovaný název požadovaného splitter filter monikeru použitého v interním grafu zpracování. Pokud je NULL - použit výchozí filtr. |
BSTR DecoderFilterMoniker; | Zobrazovaný název požadovaného decoder filter monikeru použitého v interním grafu zpracování. Pokud je NULL - použit výchozí filtr. |
sdScenesMergeKind Merge; | Když je délka scény menší než MinSceneLength, scéna se upraví podle hodnoty tohoto parametru. |
Struktura DetectorParameters2
Tato struktura rozšiřuje sadu parametrů enginu detekce scén definovaných ve struktuře DetectorParameters. Kromě členů DetectorParameters obsahuje:
int UseYUV; | Umožňuje vybrat barevný prostor pro detekci scén. Může být 1 (YUY2) nebo 0 (RGB24). |
int Pad; | Rezervováno |
double StartPosition; | Určuje počáteční pozici média pro detekci scén v sekundách. Pokud je toto nenulové, nezapomeňte, že všechny časy scén jsou relativní k této pozici. |
double StopPosition; | Určuje koncovou pozici média pro detekci scén v sekundách. Nastavte na nulu pro ignorování. |
Struktura ThumbnailsParameters
Tato struktura obsahuje parametry generování náhledů.
int JpegFormat; | Vyberte formát souboru. 0 - generovat soubory BMP, 1 - generovat soubory JPEG. |
int JpegQuality; | Kvalita komprese JPEG. Celé číslo od 0 do 100. |
int ImagesPerScene; | Počet obrázků na scénu. 1 - pouze počáteční snímek, 2 - počáteční a koncové snímky každé scény. |
double Scale; | Faktor škálování náhledu. 1 - obrázek v plné velikosti. Hodnota s plovoucí desetinnou čárkou. |
BSTR FileName; | Šablona názvů souborů náhledů. Řetězec pro funkci "C" "printf" s jedním celočíselným polem. |
Rozhraní ISceneDetector
Toto rozhraní poskytuje metody pro detekci scén:
Metoda DetectScenesInFile
HRESULT _stdcall DetectScenesInFile([in] DetectorParameters *Params, [in] ThumbnailsParameters *ThumbnailsParams, [out] SAFEARRAY(long) *Scenes );
Toto je hlavní metoda detekce scén.
Předá parametry detekce v Params a ukazatel na SAFEARRAY v Scenes.
Pokud je Scenes NULL, funkce nevrací seznam detekovaných scén.
Volající nemusí vytvářet SafeArray před voláním této metody.
Pokud Scenes není NULL a po volání funkce *Scenes není také NULL, volající musí zničit SafeArray *Scenes.
*Scenes je dvourozměrné pole. Pro každou nalezenou scénu existují dvě dlouhé hodnoty: číslo počátečního a koncového snímku scény. Tyto hodnoty jsou relativní k počáteční pozici média pro zpracování.
Předá ne NULL ukazatel jako ThumbnailsParams pro zapnutí generování náhledů a určení jeho parametrů. Předá NULL pro zakázání generování náhledů.Vrací hodnotu HRESULT . Mezi možné hodnoty patří:
0 Úspěch 0x80040601 Nespecifikovaná chyba 0x80040602 DirectShow není nainstalován nebo je verze příliš stará 0x80040603 Nelze získat délku trvání videa. Může to být statický obrázek 0x80040604 Špatný argument 0x80040605 Nelze vytvořit kontext zařízení 0x80040606 Objekt je zaneprázdněn jiným úkolem 0x80040607 Snímková frekvence se rovná nule. Může to být statický obrázek 0x80040608 Nelze sestavit graf
Rozhraní ISceneDetector2
Toto rozhraní je odvozeno od rozhraní ISceneDetector a poskytuje rozšířené metody pro detekci scén. Kromě metod zděděných z ISceneDetector, rozhraní ISceneDetector2 zpřístupňuje následující metody:
Metoda DetectScenesInFile2
HRESULT _stdcall DetectScenesInFile2([in] DetectorParameters2 *Params, [in] ThumbnailsParameters *ThumbnailsParams, [out] SAFEARRAY(long) *Scenes );
Na rozdíl od DetectScenesInFile tato metoda používá sadu parametrů DetectorParameters2, takže umožňuje určit barevný prostor, počáteční a koncové pozice zpracování.
Věnujte pozornost skutečnosti, že hodnoty počátku a konce scén vrácené touto metodou jsou relativní k hodnotě Params.StartPosition .
Viz popis DetectScenesInFile pro další informace.Metoda GetFrameRate
HRESULT _stdcall GetFrameRate([out, retval] double *pFrameRate );
Vrací snímkovou frekvenci videa posledního zpracovaného souboru. Užitečné pro překlad času na číslo snímku.
Vrací S_OK nebo E_INVALIDARG, pokud je pFrameRate NULL.
Rozhraní událostí ISceneDetectorEvents
Toto rozhraní událostí poskytuje metody pro získávání informací o detekci scén v reálném čase.
Metoda NewScene
HRESULT NewScene([in] long SceneIndex, [in] long Start, [in] long Stop );
Událost spuštěná detektorem, když je definována nová scéna.
SceneIndex začíná od 0.
Start a Stop také začínají od 0 a jsou to čísla snímků.
Když je zpracování spuštěno pomocí metody DetectScenesInFile2, hodnoty Start a Stop jsou relativní k hodnotě Params.StartPosition.Metoda Status
HRESULT Status([in] long ScenesFound, [in] long CurrentFrame, [in] long TotalFrames, [out] long *AbortProcess );
Událost spuštěna každých 50 ms a informuje klienta o stavu procesu.
AbortProcess je ukazatel na proměnnou. Klient tedy může nastavit *AbortProcess na hodnotu 1 pro zrušení aktuální detekce scény.