COM komponenta
Scene Detector
Detekce scén ve videu pro vývojáře. Integrujte ji do své aplikace pomocí COM.
O produktu
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.
Vlastnosti
Š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.
Demo a cena
Kontaktujte mě pro získání demo verze a informací o cenách.
API Reference
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 |
| 0x80040601 | Nespecifikovaná chyba |
| 0x80040602 | DirectShow není nainstalováno nebo je verze příliš stará |
| 0x80040603 | Nelze získat délku videa – může se jednat o statický obrázek |
| 0x80040604 | Chybný argument |
| 0x80040605 | Nelze vytvořit kontext zařízení |
| 0x80040606 | Objekt je zaneprázdněn jinou úlohou |
| 0x80040607 | Snímková frekvence je nulová – může se jednat o statický obrázek |
| 0x80040608 | Nelze 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.