Scene Detector – Objeto COM de detección de escenas de vídeo

Descripción

Scene Detector es un potente componente COM para el reconocimiento y procesamiento de escenas. Incorpora las galardonadas tecnologías HandySaw DS para un reconocimiento de escenas óptico extremadamente preciso y rápido. Está orientado a empresas de software y desarrolladores que desean ampliar sus productos. Un componente COM es un módulo de software reutilizable que sigue la arquitectura del Modelo de objetos componentes (COM), lo que permite utilizarlo en diversos lenguajes y entornos de programación. Si está buscando una aplicación independiente para la detección de escenas, puede utilizar HandySaw DS siguiendo este enlace.

El objeto Scene Detector procesa el archivo de vídeo y devuelve una lista de las escenas encontradas. También puede guardar miniaturas de cada escena e informar a la aplicación que llama inmediatamente sobre cada nueva escena encontrada a través de interfaces de devolución de llamada durante el procesamiento.

 

Características principales

  • Detecta escenas en casi cualquier archivo de vídeo que pueda reproducirse con el Reproductor de Windows Media (debido al uso de la API DirectShow)
  • Algoritmo rápido y preciso
  • Fácil integración
  • Informa de la nueva escena justo después de que se defina, durante el procesamiento. No es necesario esperar a que termine la detección
  • Puede generar miniaturas: imágenes del primer y último fotograma de cada escena y guardarlas en archivos BMP o JPG
  • Posibilidad de especificar los filtros de origen, divisor y descodificador de vídeo que se utilizarán durante el procesamiento
  • Puede detectar escenas "blancas" y "negras"
  • Puede funcionar en espacios de color RGB y YUV
  • Puede procesar parte de un archivo multimedia: el usuario puede especificar las posiciones de inicio y fin del procesamiento

 

Versión de demostración y precio

Póngase en contacto conmigo.

 

Documentación

 

Enumeración sdScenesMergeKind

Se utiliza para dar instrucciones sobre qué hacer con las escenas cortas.

sdMergeDelete = 0, Escena corta eliminada
sdMergeWithPrev = 1, Escena corta fusionada con la anterior
sdMergeWithNext = 2, Escena corta fusionada con la siguiente
sdMergeWithBoth = 3 Escena corta (media), escenas anterior y siguiente fusionadas en una sola escena

 

Estructura DetectorParameters

Esta estructura contiene los parámetros del motor de detección de escenas.

BSTR VideoFileName; Nombre completo del archivo de vídeo para la detección.
int Threshold; Valor de umbral de detección.
Los valores predeterminados recomendados son 19 para el espacio de color RGB y 5 para YUV.
Puede ser de 0 a 255.
Este parámetro es el principal.
Cuando la diferencia de dos fotogramas es mayor que este valor, comienza una nueva escena.
Por lo tanto: umbral más bajo - más escenas.
int UpLumaTresh; Se utiliza en la detección de "fundidos blancos".
Valor predeterminado recomendado -1.
Puede ser de -1 a 255.
"-1" desactiva esta función.
Cuando el brillo general del fotograma es mayor que este valor, comienza una nueva escena.
Con esta función es posible definir la secuencia de estos fotogramas brillantes como una escena separada.
int BottomLumaTresh; Se utiliza en la detección de "fundidos negros".
Valor predeterminado recomendado -1.
Puede ser de -1 a 255.
"-1" desactiva esta función.
Cuando el brillo general del fotograma es inferior a este valor, comienza una nueva escena.
Con esta función es posible definir la secuencia de estos fotogramas oscuros como una escena separada.
int MinSceneLength;

Establece una duración mínima de una escena detectada (en fotogramas).
Valor predeterminado recomendado 5.
Puede ser de 0 a cualquier valor positivo.
Si la longitud de la escena definida es inferior a este valor, esta escena se fusiona con las escenas anterior, siguiente o ambas, según el valor del campo Merge (véase más adelante).

int RegisterGraph; Controla el registro del gráfico de procesamiento interno en la tabla de objetos en ejecución (ROT).
Puede ser 1 (registrar en ROT) o 0 (no registrar).
BSTR SourceFilterMoniker; Nombre para mostrar del moniker del filtro de origen deseado utilizado en el gráfico de procesamiento interno.
Si es NULL, se utiliza el filtro predeterminado.
BSTR SplitterFilterMoniker; Nombre para mostrar del moniker del filtro divisor deseado utilizado en el gráfico de procesamiento interno.
Si es NULL, se utiliza el filtro predeterminado.
BSTR DecoderFilterMoniker; Nombre para mostrar del moniker del filtro descodificador deseado utilizado en el gráfico de procesamiento interno.
Si es NULL, se utiliza el filtro predeterminado.
sdScenesMergeKind Merge; Cuando la longitud de la escena es inferior a MinSceneLength, la escena se modifica según el valor de este parámetro.

 

Estructura DetectorParameters2

Esta estructura amplía un conjunto de parámetros del motor de detección de escenas definidos en la estructura DetectorParameters. Además de los miembros de DetectorParameters contiene:

int UseYUV; Permite seleccionar el espacio de color para la detección de escenas.
Puede ser 1(YUY2) o 0(RGB24).
int Pad; Reservado
double StartPosition; Especifica la posición inicial de los medios para la detección de escenas en segundos.
Si esto es distinto de cero, no olvide que todos los tiempos de la escena son relativos a esta posición.
double StopPosition; Especifica la posición de parada de los medios para la detección de escenas en segundos.
Establezca este valor en cero para ignorarlo.

 

Estructura ThumbnailsParameters

Esta estructura contiene los parámetros de generación de miniaturas.

int JpegFormat; Seleccione el formato de archivo. 0 - generar archivos BMP, 1 - generar archivos JPEG.
int JpegQuality; Calidad de compresión JPEG. Entero de 0 a 100.
int ImagesPerScene; Número de imágenes por escena. 1 - sólo fotograma inicial, 2 - fotogramas inicial y final de cada escena.
double Scale; Factor de escala de la miniatura. 1 - imagen a tamaño completo. Valor de punto flotante.
BSTR FileName;

Plantilla de nombres de archivo de miniaturas. Cadena para la función "printf" de "C" con un campo entero.
Por ejemplo: "d:\filedir\filename%05d.jpg"
Debe especificar la ruta completa con la extensión adecuada. El número de fotograma se insertará en lugar de los símbolos %d para obtener el nombre de archivo de una miniatura específica.

 

Interfaz ISceneDetector

Esta interfaz proporciona métodos para la detección de escenas:

Método DetectScenesInFile

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

Este es el método principal de detección de escenas.
Pasa los parámetros de detección en Params y el puntero a SAFEARRAY en Scenes.
Si Scenes es NULL, la función no devuelve la lista de escenas detectadas.
La persona que llama no necesita crear SafeArray antes de llamar a este método.
Si Scenes no es NULL y después de la llamada a la función *Scenes tampoco es NULL, la persona que llama debe destruir SafeArray *Scenes.
*Scenes es una matriz bidimensional. Para cada escena encontrada hay dos valores largos: los números de fotograma de inicio y fin de la escena. Estos valores son relativos a la posición inicial de los medios de procesamiento.
Pasa un puntero no NULL como ThumbnailsParams para activar la generación de miniaturas y especificar sus parámetros. Pasa NULL para desactivar la generación de miniaturas.

Devuelve un valor HRESULT. Los valores posibles incluyen los siguientes:

0 Éxito
0x80040601 Error no especificado
0x80040602 DirectShow no está instalado o la versión es demasiado antigua
0x80040603 No se puede obtener la duración del vídeo. Puede ser una imagen fija
0x80040604 Argumento incorrecto
0x80040605 No se puede crear el contexto del dispositivo
0x80040606 El objeto está ocupado con otra tarea
0x80040607 La velocidad de fotogramas es cero. Puede ser una imagen fija
0x80040608 No se puede construir el gráfico

 

Interfaz ISceneDetector2

Esta interfaz deriva de la interfaz ISceneDetector y proporciona métodos ampliados para la detección de escenas. Además de los métodos heredados de ISceneDetector, la interfaz ISceneDetector2 expone los siguientes métodos:

Método DetectScenesInFile2

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

A diferencia de DetectScenesInFile, este método utiliza el conjunto de parámetros DetectorParameters2, por lo que permite especificar el espacio de color, las posiciones de inicio y fin del procesamiento.
Preste atención al hecho de que los valores de inicio y fin de las escenas devueltos por este método son relativos al valor Params.StartPosition .
Consulte la descripción de DetectScenesInFile para obtener otra información.

Método GetFrameRate

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

Devuelve la velocidad de fotogramas de vídeo del último archivo procesado. Útil para la traducción del tiempo al número de fotograma.
Devuelve S_OK o E_INVALIDARG si pFrameRate es NULL.

 

Interfaz de eventos ISceneDetectorEvents

Esta interfaz de eventos proporciona métodos para recuperar información de detección de escenas en tiempo real.

Método NewScene

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

Evento disparado por el detector cuando se define una nueva escena.
SceneIndex empieza desde 0.
Start y Stop también empiezan desde 0 y son números de fotograma.
Cuando el procesamiento se inicia a través del método DetectScenesInFile2, los valores Start y Stop son relativos al valor Params.StartPosition.

Método Status

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

Evento disparado cada 50 ms e informa al cliente sobre el estado del proceso.
AbortProcess es un puntero a una variable. Por lo tanto, el cliente puede establecer *AbortProcess en el valor 1 para cancelar la detección de escena actual.