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

Contattami.

 

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).
Predefinito consigliato 5.
Può essere da 0 a qualsiasi valore positivo.
Se la lunghezza della scena definita è inferiore a questo valore, questa scena viene unita alle scene precedenti, successive o a entrambe, in base al valore del campo Merge (vedi sotto).

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.
Ad esempio: "d:\filedir\filename%05d.jpg"
È necessario specificare il percorso completo con l'estensione corretta. Il numero di fotogramma verrà inserito al posto dei simboli %d per ottenere il nome file per una miniatura specifica.

 

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.