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). |
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. |
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.