Scene Detector – Oggetto COM di rilevamento scene video
Descrizione
Scene Detector è un potente componente COM per il riconoscimento e l'elaborazione di scene. Incorpora le pluripremiate tecnologie HandySaw DS per un riconoscimento di scene ottiche estremamente preciso e veloce. È orientato alle aziende di software e agli sviluppatori che desiderano estendere i propri prodotti. Un componente COM è un modulo software riutilizzabile che segue l'architettura Component Object Model (COM), consentendone l'utilizzo in vari linguaggi e ambienti di programmazione. Se stai cercando un'applicazione standalone per il rilevamento di scene, puoi utilizzare HandySaw DS seguendo questo link.
L'oggetto Scene Detector elabora il file video e restituisce un elenco di scene trovate. Può anche salvare miniature per ogni scena e informare immediatamente l'applicazione chiamante di ogni nuova scena trovata tramite interfacce di callback durante l'elaborazione.
Caratteristiche principali
- Rileva scene in quasi tutti i file video che possono essere riprodotti da Windows Media Player (grazie all'utilizzo dell'API DirectShow)
- Algoritmo veloce e preciso
- Facile integrazione
- Segnala una nuova scena subito dopo che è stata definita, durante l'elaborazione. Non è necessario attendere il completamento del rilevamento
- Può generare miniature: immagini del primo e dell'ultimo fotogramma per ogni scena e salvarle in file BMP o JPG
- Possibilità di specificare i filtri sorgente, splitter e decoder video da utilizzare durante l'elaborazione
- Può rilevare scene "bianche" e "nere"
- Può funzionare negli spazi colore RGB e YUV
- Può elaborare parte di un file multimediale: l'utente può specificare le posizioni di inizio e fine dell'elaborazione
Versione demo e prezzo
Documentazione
enum sdScenesMergeKind
Utilizzato per dare istruzioni su cosa fare con le scene brevi.
sdMergeDelete = 0, | Scena breve rimossa |
sdMergeWithPrev = 1, | Scena breve unita alla precedente |
sdMergeWithNext = 2, | Scena breve unita alla successiva |
sdMergeWithBoth = 3 | Scene brevi (intermedie), precedenti e successive unite in un'unica scena |
Struttura DetectorParameters
Questa struttura contiene i parametri del motore di rilevamento delle scene.
BSTR VideoFileName; | Nome completo del file video per il rilevamento. |
int Threshold; | Valore di soglia di rilevamento. I valori predefiniti consigliati sono 19 per lo spazio colore RGB e 5 per YUV. Può essere da 0 a 255. Questo parametro è il principale. Quando la differenza tra due fotogrammi è maggiore di questo valore, inizia una nuova scena. Pertanto: Soglia inferiore - più scene. |
int UpLumaTresh; | Utilizzato nel rilevamento di "dissolvenze in bianco". Predefinito consigliato -1. Può essere da -1 a 255. "-1" disabilita questa funzionalità. Quando la luminosità complessiva del fotogramma è maggiore di questo valore, inizia una nuova scena. Con questa funzione è possibile definire la sequenza di tali fotogrammi luminosi come scena separata. |
int BottomLumaTresh; | Utilizzato nel rilevamento di "dissolvenze in nero". Predefinito consigliato -1. Può essere da -1 a 255. "-1" disabilita questa funzionalità. Quando la luminosità complessiva del fotogramma è inferiore a questo valore, inizia una nuova scena. Con questa funzione è possibile definire la sequenza di tali fotogrammi scuri come scena separata. |
int MinSceneLength; | Imposta una durata minima di una scena rilevata (in fotogrammi). |
int RegisterGraph; | Controlla la registrazione del grafico di elaborazione interno nella tabella degli oggetti in esecuzione (ROT). Può essere 1 (registra in ROT) o 0 (non registra). |
BSTR SourceFilterMoniker; | Nome visualizzato del moniker del filtro sorgente desiderato utilizzato nel grafico di elaborazione interno. Se NULL - viene utilizzato il filtro predefinito. |
BSTR SplitterFilterMoniker; | Nome visualizzato del moniker del filtro splitter desiderato utilizzato nel grafico di elaborazione interno. Se NULL - viene utilizzato il filtro predefinito. |
BSTR DecoderFilterMoniker; | Nome visualizzato del moniker del filtro decoder desiderato utilizzato nel grafico di elaborazione interno. Se NULL - viene utilizzato il filtro predefinito. |
sdScenesMergeKind Merge; | Quando la lunghezza della scena è inferiore a MinSceneLength, la scena viene modificata in base al valore di questo parametro. |
Struttura DetectorParameters2
Questa struttura espande un insieme di parametri del motore di rilevamento delle scene definiti nella struttura DetectorParameters. Oltre ai membri di DetectorParameters contiene:
int UseYUV; | Consente di selezionare lo spazio colore per il rilevamento delle scene. Può essere 1 (YUY2) o 0 (RGB24). |
int Pad; | Riservato |
double StartPosition; | Specifica la posizione iniziale del supporto per il rilevamento delle scene in secondi. Se questo è diverso da zero, non dimenticare che tutti i tempi delle scene sono relativi a questa posizione. |
double StopPosition; | Specifica la posizione di arresto del supporto per il rilevamento delle scene in secondi. Impostare su zero per ignorare. |
Struttura ThumbnailsParameters
Questa struttura contiene i parametri di generazione delle miniature.
int JpegFormat; | Seleziona il formato del file. 0 - genera file BMP, 1 - genera file JPEG. |
int JpegQuality; | Qualità della compressione JPEG. Numero intero da 0 a 100. |
int ImagesPerScene; | Numero di immagini per scena. 1 - solo fotogramma iniziale, 2 - fotogrammi iniziale e finale di ogni scena. |
double Scale; | Fattore di scala della miniatura. 1 - immagine a grandezza naturale. Valore in virgola mobile. |
BSTR FileName; | Modello di nomi file di anteprima. Stringa per la funzione "C" "printf" con un campo intero. |
Interfaccia ISceneDetector
Questa interfaccia fornisce metodi per il rilevamento delle scene:
Metodo DetectScenesInFile
HRESULT _stdcall DetectScenesInFile([in] DetectorParameters *Params, [in] ThumbnailsParameters *ThumbnailsParams, [out] SAFEARRAY(long) *Scenes );
Questo è il metodo principale di rilevamento delle scene.
Passa i parametri di rilevamento in Params e il puntatore a SAFEARRAY in Scenes.
Se Scenes è NULL, la funzione non restituisce l'elenco delle scene rilevate.
Il chiamante non deve creare SafeArray prima di chiamare questo metodo.
Se Scenes non è NULL e dopo la chiamata di funzione *Scenes non è NULL, anche il chiamante deve distruggere SafeArray *Scenes.
*Scenes è un array bidimensionale. Per ogni scena trovata ci sono due valori lunghi: i numeri di fotogramma di inizio e fine scena. Questi valori sono relativi alla posizione di inizio dell'elaborazione del supporto.
Passa un puntatore non NULL come ThumbnailsParams per attivare la generazione di miniature e specificarne i parametri. Passa NULL per disabilitare la generazione di miniature.Restituisce un valore HRESULT. I valori possibili includono i seguenti:
0 Successo 0x80040601 Errore non specificato 0x80040602 DirectShow non è installato o la versione è troppo vecchia 0x80040603 Impossibile ottenere la durata del video. Può essere un'immagine fissa 0x80040604 Argomento non valido 0x80040605 Impossibile creare il contesto del dispositivo 0x80040606 L'oggetto è occupato con un'altra attività 0x80040607 Framerate uguale a zero. Può essere un'immagine fissa 0x80040608 Impossibile creare il grafico
Interfaccia ISceneDetector2
Questa interfaccia deriva dall'interfaccia ISceneDetector e fornisce metodi estesi per il rilevamento delle scene. Oltre ai metodi ereditati da ISceneDetector, l'interfaccia ISceneDetector2 espone i seguenti metodi:
Metodo DetectScenesInFile2
HRESULT _stdcall DetectScenesInFile2([in] DetectorParameters2 *Params, [in] ThumbnailsParameters *ThumbnailsParams, [out] SAFEARRAY(long) *Scenes );
A differenza di DetectScenesInFile, questo metodo utilizza il set di parametri DetectorParameters2, quindi consente di specificare lo spazio colore, le posizioni di inizio e fine dell'elaborazione.
Presta attenzione al fatto che i valori di inizio e fine delle scene restituiti da questo metodo sono relativi al valore di Params.StartPosition.
Consulta la descrizione di DetectScenesInFile per altre informazioni.Metodo GetFrameRate
HRESULT _stdcall GetFrameRate([out, retval] double *pFrameRate );
Restituisce la frequenza dei fotogrammi video dell'ultimo file elaborato. Utile per la traduzione da tempo a numero di fotogramma.
Restituisce S_OK o E_INVALIDARG se pFrameRate è NULL.
Interfaccia eventi ISceneDetectorEvents
Questa interfaccia eventi fornisce metodi per il recupero di informazioni sul rilevamento delle scene in tempo reale.
Metodo NewScene
HRESULT NewScene([in] long SceneIndex, [in] long Start, [in] long Stop );
Evento attivato dal rilevatore quando viene definita una nuova scena.
SceneIndex inizia da 0.
Anche Start e Stop iniziano da 0 e sono numeri di fotogramma.
Quando l'elaborazione è iniziata tramite il metodo DetectScenesInFile2, i valori di Start e Stop sono relativi al valore di Params.StartPosition.Metodo Status
HRESULT Status([in] long ScenesFound, [in] long CurrentFrame, [in] long TotalFrames, [out] long *AbortProcess );
Evento attivato ogni 50 ms e informa il client sullo stato del processo.
AbortProcess è un puntatore a una variabile. Pertanto, il client può impostare *AbortProcess sul valore 1 per annullare il rilevamento della scena corrente.