COM komponenta

Scene Detector

Detekce scén ve videu pro vývojáře. Integrujte ji do své aplikace pomocí COM.

Scene Detector je COM komponenta postavená na technologii rozpoznávání scén HandySaw DS. Zpracovává video soubor a vrací seznam detekovaných scén s přesností na jednotlivé snímky. Komponenta může také generovat náhledy pro každou scénu a hlásit nově nalezené scény v reálném čase prostřednictvím rozhraní zpětného volání (callback). Nemusíte čekat na dokončení celého procesu detekce.

COM komponenta využívá standardní architekturu, díky čemuž je použitelná prakticky v jakémkoli vývojovém prostředí pro Windows. Pokud potřebujete samostatný desktopový nástroj namísto vývojářské komponenty, je správnou volbou HandySaw DS.

Široká podpora formátů

Zpracovává jakýkoli video soubor přehratelný v Windows Media Playeru prostřednictvím DirectShow API.

Zpětná volání v reálném čase

Hlásí každou novou scénu ihned po jejím nalezení. Vaše aplikace dostává výsledky již během zpracování.

Generování náhledů

Volitelně ukládá první a poslední snímek každé scény jako soubory BMP nebo JPEG v libovolném měřítku.

Barevné prostory RGB a YUV

Detekce může probíhat v barevném prostoru RGB24 nebo YUY2; každý má svá vlastní doporučená výchozí nastavení prahových hodnot.

Detekce bílých a černých scén

Konfigurovatelné prahy jasu identifikují přechody do bílé a do černé jako samostatné scény.

Zpracování části souboru

Určete počáteční a koncovou pozici pro detekci scén pouze ve vybraném segmentu mediálního souboru.

Vlastní pipeline filtrů

Pro maximální kompatibilitu můžete přepsat interně používané DirectShow filtry (zdroj, splitter a dekodér).

Sloučení krátkých scén

Scény kratší než konfigurovatelné minimum jsou automaticky sloučeny se sousedními scénami nebo odstraněny.

Kontaktujte mě pro získání demo verze a informací o cenách.

sdScenesMergeKind enum

Určuje, jak se nakládá s krátkými scénami po detekci.

sdMergeDelete = 0 Krátká scéna je odstraněna.
sdMergeWithPrev = 1 Krátká scéna je sloučena s předchozí scénou.
sdMergeWithNext = 2 Krátká scéna je sloučena s následující scénou.
sdMergeWithBoth = 3 Krátká scéna, předchozí scéna a následující scéna jsou sloučeny do jedné.

DetectorParameters structure

Parametry jádra pro detekci scén.

BSTR VideoFileName Úplná cesta ke zpracovávanému video souboru.
int Threshold Citlivost detekce. Rozsah 0–255. Doporučené výchozí hodnoty: 19 (RGB) a 5 (YUV). Nová scéna začíná, když rozdíl mezi dvěma po sobě jdoucími snímky překročí tuto hodnotu. Nižší hodnoty vytvářejí více scén.
int UpLumaTresh Práh pro přechod do bílé. Rozsah -1–255. Hodnota -1 tuto funkci vypíná. Když celkový jas snímku překročí tuto hodnotu, začíná nová scéna, která seskupuje světlé snímky dohromady.
int BottomLumaTresh Práh pro přechod do černé. Rozsah -1–255. Hodnota -1 tuto funkci vypíná. Když celkový jas snímku klesne pod tuto hodnotu, začíná nová scéna, která seskupuje tmavé snímky dohromady.
int MinSceneLength Minimální trvání scény ve snímcích. Scény kratší než tato hodnota jsou upraveny podle pole Merge. Doporučená výchozí hodnota: 5.
int RegisterGraph Registrace interního grafu zpracování v ROT. 1: registrovat. 0: neregistrovat.
BSTR SourceFilterMoniker Zobrazovaný název požadovaného zdrojového filtru. NULL: použít výchozí.
BSTR SplitterFilterMoniker Zobrazovaný název požadovaného splitter filtru. NULL: použít výchozí.
BSTR DecoderFilterMoniker Zobrazovaný název požadovaného dekodéru. NULL: použít výchozí.
sdScenesMergeKind Merge Strategie sloučení použitá, pokud je detekovaná scéna kratší než MinSceneLength.

DetectorParameters2 structure

Rozšiřuje DetectorParameters o výběr barevného prostoru a zpracování části souboru. Obsahuje všechna pole DetectorParameters plus následující.

int UseYUV Barevný prostor. 1: YUY2. 0: RGB24.
int Pad Rezervováno.
double StartPosition Počáteční pozice zpracování v sekundách. Pokud není nula, všechny vrácené časy scén jsou relativní k tomuto offsetu.
double StopPosition Koncová pozice zpracování v sekundách. 0: zpracovat do konce souboru.

ThumbnailsParameters structure

Řídí generování náhledů. Pro povolení náhledů předejte ukazatel na tuto strukturu, nebo NULL pro zakázání.

int JpegFormat Výstupní formát. 0: BMP. 1: JPEG.
int JpegQuality Kvalita komprese JPEG, 0–100.
int ImagesPerScene 1: pouze počáteční snímek. 2: počáteční a koncový snímek každé scény.
double Scale Měřítko náhledu. 1.0: plná velikost.
BSTR FileName Šablona názvu souboru využívající syntaxi C printf s jedním celočíselným polem, např. d:\dir\frame%05d.jpg. Číslo snímku nahradí zástupný symbol %d. Vyžaduje úplnou cestu se správnou příponou.

ISceneDetector interface

Hlavní rozhraní pro detekci scén.

DetectScenesInFile

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

Hlavní detekční metoda. Volající nemusí předem vytvářet SafeArray – předejte ukazatel na proměnnou SAFEARRAY. Pokud je *Scenes po volání nenulové, volající jej musí uvolnit. Výsledkem je dvourozměrné pole. Pro každou scénu dvě hodnoty typu long udávají čísla počátečního a koncového snímku relativně k počáteční pozici zpracování. Pro povolení generování náhledů předejte nenulové ThumbnailsParams.

HRESULT Význam
0Úspěch
0x80040601Nespecifikovaná chyba
0x80040602DirectShow není nainstalováno nebo je verze příliš stará
0x80040603Nelze získat délku videa – může se jednat o statický obrázek
0x80040604Chybný argument
0x80040605Nelze vytvořit kontext zařízení
0x80040606Objekt je zaneprázdněn jinou úlohou
0x80040607Snímková frekvence je nulová – může se jednat o statický obrázek
0x80040608Nelze sestavit graf

ISceneDetector2 interface

Rozšiřuje ISceneDetector. Dědí všechny jeho metody a přidává následující.

DetectScenesInFile2

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

Stejné jako DetectScenesInFile, ale používá DetectorParameters2, což umožňuje výběr barevného prostoru a zpracování části souboru. Vrácené hodnoty začátku a konce scény jsou relativní k Params.StartPosition.

GetFrameRate

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

Vrací snímkovou frekvenci naposledy zpracovaného souboru. Užitečné pro převod čísel snímků na časové značky. Vrací S_OK, nebo E_INVALIDARG, pokud je pFrameRate NULL.

ISceneDetectorEvents interface

Rozhraní zpětného volání pro události detekce v reálném čase. Implementujte ve své aplikaci pro příjem výsledků ihned po jejich nalezení.

NewScene

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

Vyvoláno při dokončení nové scény. SceneIndex začíná od 0. Start a Stop jsou čísla snímků začínající od 0. Při zpracování spuštěném přes DetectScenesInFile2 jsou obě hodnoty relativní k Params.StartPosition.

Status

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

Vyvoláno každých 50 ms s aktuálním průběhem zpracování. Nastavte *AbortProcess na 1 pro zrušení probíhající detekce.