Scene Detector – Objet COM de détection de scènes vidéo

Description

Scene Detector est un composant COM puissant pour la reconnaissance et le traitement de scènes. Il intègre les technologies primées HandySaw DS pour une reconnaissance optique des scènes extrêmement précise et rapide. Il est destiné aux entreprises de logiciels et aux développeurs qui souhaitent étendre leurs produits. Un composant COM est un module logiciel réutilisable qui suit l'architecture COM (Component Object Model), ce qui lui permet d'être utilisé dans divers langages et environnements de programmation. Si vous recherchez une application autonome pour la détection de scènes, vous pouvez utiliser HandySaw DS en suivant ce lien.

L'objet Scene Detector traite le fichier vidéo et renvoie une liste des scènes détectées. Il peut également enregistrer des miniatures pour chaque scène et informer immédiatement l'application appelante de chaque nouvelle scène détectée via des interfaces de rappel pendant le traitement.

 

Fonctionnalités principales

  • Détecte les scènes dans presque tous les fichiers vidéo pouvant être lus par Windows Media Player (en raison de l'utilisation de l'API DirectShow)
  • Algorithme rapide et précis
  • Intégration facile
  • Signale une nouvelle scène juste après sa définition, pendant le traitement. Pas besoin d'attendre la fin de la détection
  • Peut générer des miniatures - images des première et dernière images pour chaque scène et les enregistrer dans des fichiers BMP ou JPG
  • Possibilité de spécifier les filtres de source, de séparateur et de décodeur vidéo à utiliser pendant le traitement
  • Peut détecter les scènes "blanches" et "noires"
  • Peut fonctionner dans les espaces colorimétriques RVB et YUV
  • Peut traiter une partie d'un fichier multimédia - l'utilisateur peut spécifier les positions de début et de fin du traitement

 

Version de démonstration et prix

Contactez moi.

 

Documentation

 

Enumération sdScenesMergeKind

Utilisée pour donner des instructions sur ce qu'il faut faire avec les scènes courtes.

sdMergeDelete = 0, Scène courte supprimée
sdMergeWithPrev = 1, Scène courte fusionnée avec la précédente
sdMergeWithNext = 2, Scène courte fusionnée avec la suivante
sdMergeWithBoth = 3 Scène courte (au milieu), scènes précédente et suivante fusionnées en une seule scène

 

Structure DetectorParameters

Cette structure contient les paramètres du moteur de détection de scènes.

BSTR VideoFileName; Nom complet du fichier vidéo pour la détection.
int Threshold; Valeur du seuil de détection.
Les valeurs par défaut recommandées sont 19 pour l'espace colorimétrique RVB et 5 pour YUV.
Peut être compris entre 0 et 255.
Ce paramètre est le principal.
Lorsque la différence entre deux images est supérieure à cette valeur, une nouvelle scène commence.
Ainsi : un seuil plus bas - plus de scènes.
int UpLumaTresh; Utilisé dans la détection des "fondues au blanc".
Valeur par défaut recommandée -1.
Peut être compris entre -1 et 255.
"-1" désactive cette fonctionnalité.
Lorsque la luminosité globale de l'image est supérieure à cette valeur, une nouvelle scène commence.
Avec cette fonctionnalité, il est possible de définir une séquence d'images aussi lumineuses comme une scène séparée.
int BottomLumaTresh; Utilisé dans la détection des "fondues au noir".
Valeur par défaut recommandée -1.
Peut être compris entre -1 et 255.
"-1" désactive cette fonctionnalité.
Lorsque la luminosité globale de l'image est inférieure à cette valeur, une nouvelle scène commence.
Avec cette fonctionnalité, il est possible de définir une séquence d'images aussi sombres comme une scène séparée.
int MinSceneLength;

Définit une durée minimale d'une scène détectée (en images).
Valeur par défaut recommandée 5.
Peut être compris entre 0 et toute valeur positive.
Si la durée de la scène définie est inférieure à cette valeur, cette scène est fusionnée avec les scènes précédente, suivante ou les deux, en fonction de la valeur du champ Merge (voir ci-dessous).

int RegisterGraph; Contrôle l'enregistrement du graphe de traitement interne dans la table des objets en cours d'exécution (ROT).
Peut être 1 (enregistrer dans ROT) ou 0 (ne pas enregistrer).
BSTR SourceFilterMoniker; Nom d'affichage du moniker du filtre de source souhaité utilisé dans le graphe de traitement interne.
Si NULL - le filtre par défaut est utilisé.
BSTR SplitterFilterMoniker; Nom d'affichage du moniker du filtre de séparateur souhaité utilisé dans le graphe de traitement interne.
Si NULL - le filtre par défaut est utilisé.
BSTR DecoderFilterMoniker; Nom d'affichage du moniker du filtre de décodeur souhaité utilisé dans le graphe de traitement interne.
Si NULL - le filtre par défaut est utilisé.
sdScenesMergeKind Merge; Lorsque la durée de la scène est inférieure à MinSceneLength, la scène est modifiée en fonction de la valeur de ce paramètre.

 

Structure DetectorParameters2

Cette structure développe un ensemble de paramètres de moteur de détection de scène définis dans la structure DetectorParameters. En plus des membres de DetectorParameters, elle contient :

int UseYUV; Permet de sélectionner l'espace colorimétrique pour la détection de scène.
Peut être 1 (YUY2) ou 0 (RVB24).
int Pad; Réservé
double StartPosition; Spécifie la position de début du média pour la détection de scène en secondes.
Si cette valeur est différente de zéro, n'oubliez pas que tous les temps de scène sont relatifs à cette position.
double StopPosition; Spécifie la position d'arrêt du média pour la détection de scène en secondes.
Définir sur zéro pour ignorer.

 

Structure ThumbnailsParameters

Cette structure contient les paramètres de génération des miniatures.

int JpegFormat; Sélectionnez le format de fichier. 0 - générer des fichiers BMP, 1 - générer des fichiers JPEG.
int JpegQuality; Qualité de compression JPEG. Entier de 0 à 100.
int ImagesPerScene; Nombre d'images par scène. 1 - uniquement l'image de début, 2 - les images de début et de fin de chaque scène.
double Scale; Facteur de mise à l'échelle des miniatures. 1 - image en taille réelle. Valeur à virgule flottante.
BSTR FileName;

Modèle de noms de fichiers miniatures. Chaîne pour la fonction "printf" "C" avec un champ entier.
Par exemple : "d:\filedir\filename%05d.jpg"
Vous devez spécifier le chemin d'accès complet avec l'extension appropriée. Le numéro de l'image sera inséré à la place des symboles %d pour obtenir le nom de fichier de la miniature spécifique.

 

Interface ISceneDetector

Cette interface fournit des méthodes pour la détection de scènes :

Méthode DetectScenesInFile

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

C'est la principale méthode de détection de scène.
Transmettez les paramètres de détection dans Params et le pointeur vers SAFEARRAY dans Scenes.
Si Scenes est NULL, la fonction ne renvoie pas la liste des scènes détectées.
L'appelant n'a pas besoin de créer SafeArray avant d'appeler cette méthode.
Si Scenes n'est pas NULL et qu'après l'appel de la fonction *Scenes n'est pas NULL non plus, l'appelant doit détruire SafeArray *Scenes.
*Scenes est un tableau à deux dimensions. Pour chaque scène détectée, il y a deux valeurs longues : les numéros de l'image de début et de fin de la scène. Ces valeurs sont relatives à la position de début du traitement du média.
Transmettez un pointeur non NULL en tant que ThumbnailsParams pour activer la génération des miniatures et spécifier ses paramètres. Transmettez NULL pour désactiver la génération des miniatures.

Renvoie une valeur HRESULT. Les valeurs possibles sont les suivantes :

0 Succès
0x80040601 Erreur non spécifiée
0x80040602 DirectShow n'est pas installé ou la version est trop ancienne
0x80040603 Impossible d'obtenir la durée de la vidéo. Peut-être une image fixe
0x80040604 Argument incorrect
0x80040605 Impossible de créer le contexte de l'appareil
0x80040606 L'objet est occupé par une autre tâche
0x80040607 La fréquence d'images est égale à zéro. Peut-être une image fixe
0x80040608 Impossible de créer le graphe

 

Interface ISceneDetector2

Cette interface dérive de l'interface ISceneDetector et fournit des méthodes étendues pour la détection de scènes. En plus des méthodes héritées de ISceneDetector, l'interface ISceneDetector2 expose les méthodes suivantes :

Méthode DetectScenesInFile2

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

Contrairement à DetectScenesInFile, cette méthode utilise l'ensemble de paramètres DetectorParameters2, ce qui permet de spécifier l'espace colorimétrique, les positions de début et de fin du traitement.
Faites attention au fait que les valeurs de début et de fin des scènes renvoyées par cette méthode sont relatives à la valeur Params.StartPosition .
Voir la description de DetectScenesInFile pour d'autres informations.

Méthode GetFrameRate

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

Renvoie la fréquence d'images vidéo du dernier fichier traité. Utile pour la traduction du temps en numéro d'image.
Renvoie S_OK ou E_INVALIDARG si pFrameRate est NULL.

 

Interface d'événements ISceneDetectorEvents

Cette interface d'événements fournit des méthodes pour récupérer des informations sur la détection de scènes en temps réel.

Méthode NewScene

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

Événement déclenché par le détecteur lorsqu'une nouvelle scène est définie.
SceneIndex commence à partir de 0.
Start et Stop commencent également à partir de 0 et sont des numéros d'image.
Lorsque le traitement a été démarré via la méthode DetectScenesInFile2, les valeurs Start et Stop sont relatives à la valeur Params.StartPosition.

Méthode Status

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

Événement déclenché toutes les 50 ms et informe le client de l'état du processus.
AbortProcess est un pointeur vers une variable. Ainsi, le client peut définir *AbortProcess sur la valeur 1 pour annuler la détection de scène en cours.