Scene Detector : objeto COM de detección de escena 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 óptico de escenas extremadamente preciso y rápido. Está orientado a empresas de software y desarrolladores que quieran 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 su uso en varios 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 video y devuelve una lista de escenas encontradas. También puede guardar miniaturas para cada escena e informar inmediatamente a la aplicación que llama sobre cada nueva escena encontrada a través de interfaces de devolución de llamada durante el procesamiento.

Principales características

  • Detecta escenas en casi cualquier archivo de vídeo que pueda reproducir Windows Media Player (debido al uso de DirectShow API)
  • Algoritmo rápido y preciso
  • Fácil integración
  • Informa sobre una nueva escena inmediatamente después de definirla, durante el procesamiento. No es necesario esperar a que finalice la detección.
  • Puede generar miniaturas: imágenes del primer y último cuadro para cada escena y guardarlas en archivos BMP o JPG.
  • Es posible especificar filtros de fuente, divisor y decodificador de video para usar 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 parada del procesamiento

Versión demo y precio

Contáctame .

Documentación

enumeración sdScenesMergeKind

Se utiliza para dar instrucciones sobre qué hacer con 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 Escenas cortas (intermedias), anteriores y siguientes fusionadas en una sola escena

Estructura de parámetros del detector

Esta estructura contiene 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 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 "desvanecimientos blancos".
Valor predeterminado recomendado -1.
Puede ser de -1 a 255.
"-1" desactiva esta función.
Cuando el brillo general del cuadro es mayor que este valor, comienza una nueva escena.
Con esta característica es posible definir la secuencia de cuadros tan brillantes como una escena separada.
int BottomLumaTresh; Se utiliza en la detección de "desvanecimientos negros".
Valor predeterminado recomendado -1.
Puede ser de -1 a 255.
"-1" desactiva esta función.
Cuando el brillo general del cuadro es menor que este valor, comienza una nueva escena.
Con esta característica es posible definir la secuencia de cuadros 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 duración de la escena definida es menor que este valor, esta escena se fusionará con la escena anterior, la siguiente o ambas, de acuerdo con el valor del campo Fusionar (ver más abajo).

int RegisterGraph; Controlar el registro del gráfico de procesamiento interno en la Running Object Table (ROT).
Puede ser 1(registra en ROT) o 0(no registra).
BSTR SourceFilterMoniker; Nombre para mostrar del apodo 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 apodo 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 apodo del filtro decodificador deseado utilizado en el gráfico de procesamiento interno.
Si es NULL, se utiliza el filtro predeterminado.
sdScenesMergeKind Merge; Cuando la duración de la escena es menor que 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 del medio para la detección de escenas en segundos.
Si es distinto de cero, no olvide que todos los tiempos de las escenas son relativos a esta posición.
double StopPosition; Especifica la posición de parada del medio para la detección de escenas en segundos.
Establezca en cero para ignorar.

MiniaturasEstructura de parámetros

Esta estructura contiene 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; Imágenes por número de escena. 1 - solo fotograma inicial, 2 - fotogramas inicial y final de cada escena.
double Scale; Factor de escala de miniaturas. 1 - imagen a tamaño completo. Valor de punto flotante.
BSTR FileName;

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

Interfaz ISceneDetector

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

Método DetectScenesInFile

HRESULT _stdcall DetectScenesInFile ([en] DetectorParameters *Params, [en] ThumbnailsParameters *ThumbnailsParams, [salida] SAFEARRAY (largo) *Scenes);

Este es el método principal de detección de escenas.
Pase los parámetros de detección en Params y el puntero a SAFEARRAY en Escenas.
Si Escenas 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 *Scenes SafeArray.
*Las escenas son una matriz bidimensional. Para cada escena encontrada hay dos valores largos: números de fotograma de inicio y fin de escena. Estos valores son relativos a la posición inicial del medio de procesamiento.
Pase un puntero no NULL como ThumbnailsParams para activar la generación de miniaturas y especificar sus parámetros. Pase NULL para deshabilitar 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 Mal argumento
0x80040605 No se puede crear el contexto del dispositivo
0x80040606 El objeto está ocupado con otra tarea.
0x80040607 La velocidad de fotogramas es igual a cero. Puede ser una imagen fija
0x80040608 No se puede construir el gráfico

Interfaz ISceneDetector2

Esta interfaz se deriva de la interfaz ISceneDetector y proporciona métodos extendidos 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 ([en] DetectorParameters2 *Params, [en] ThumbnailsParameters *ThumbnailsParams, [salida] SAFEARRAY (largo) *Scenes);

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

Método GetFrameRate

HRESULT _stdcall GetFrameRate ([salida, recuperación] doble *pFrameRate);

Devuelve la velocidad de fotogramas del vídeo del último archivo procesado. Útil para la traducción de números a la hora de enmarcar.
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 nueva escena

HRESULT NewScene ([en] largo SceneIndex, [en] largo Inicio, [en] largo Parada);

Evento activado por el detector cuando se definió una nueva escena.
SceneIndex comienza desde 0.
Iniciar y Detener también comienzan desde 0 y son números de fotograma.
Cuando el procesamiento se inició a través del método DetectScenesInFile2 , los valores de inicio y detención son relativos al valor de Params.StartPosition .

Método de estado

Estado HRESULT ([en] largo EscenasFound, [en] largo CurrentFrame, [en] largo TotalFrames, [fuera] largo *AbortProcess);

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