Scene Detector – Objeto COM de Detecção de Cena de Vídeo

Descrição

Scene Detector é um componente COM poderoso para reconhecimento e processamento de cenas. Ele incorpora as tecnologias HandySaw DS premiadas para reconhecimento de cenas ópticas extremamente preciso e rápido. É orientado para empresas de software e desenvolvedores que desejam estender seus produtos. Um componente COM é um módulo de software reutilizável que segue a arquitetura do Component Object Model (COM), permitindo que seja usado em várias linguagens e ambientes de programação. Se você está procurando um aplicativo independente para detecção de cena, você pode usar o HandySaw DS seguindo este link.

O objeto Scene Detector processa o arquivo de vídeo e retorna uma lista de cenas encontradas. Ele também pode salvar miniaturas para cada cena e informar o aplicativo chamador imediatamente sobre cada nova cena encontrada através de interfaces de callback durante o processamento.

 

Principais recursos

  • Detecta cenas em quase qualquer arquivo de vídeo que possa ser reproduzido pelo Windows Media Player (devido ao uso da API DirectShow)
  • Algoritmo rápido e preciso
  • Fácil integração
  • Informa nova cena logo após ser definida, durante o processamento. Não há necessidade de esperar que a detecção termine
  • Pode gerar miniaturas - imagens do primeiro e último quadro para cada cena e salvá-las em arquivos BMP ou JPG
  • Possível especificar filtros de origem, separador e decodificador de vídeo a serem usados durante o processamento
  • Pode detectar cenas "brancas" e "pretas"
  • Pode trabalhar nos espaços de cores RGB e YUV
  • Pode processar parte de um arquivo de mídia - o usuário pode especificar as posições de início e fim do processamento

 

Versão demo e preço

Contate-me.

 

Documentação

 

Enum sdScenesMergeKind

Usado para dar instruções sobre o que fazer com cenas curtas.

sdMergeDelete = 0, Cena curta removida
sdMergeWithPrev = 1, Cena curta mesclada com a anterior
sdMergeWithNext = 2, Cena curta mesclada com a seguinte
sdMergeWithBoth = 3 Cenas curtas (intermediárias), anteriores e seguintes mescladas em uma única cena

 

Estrutura DetectorParameters

Esta estrutura contém os parâmetros do mecanismo de detecção de cena.

BSTR VideoFileName; Nome completo do arquivo de vídeo para detecção.
int Threshold; Valor limite de detecção.
Os padrões recomendados são 19 para espaço de cores RGB e 5 para YUV.
Pode ser de 0 a 255.
Este parâmetro é o principal.
Quando a diferença de dois quadros é maior que este valor, uma nova cena começa.
Assim: limite mais baixo - mais cenas.
int UpLumaTresh; Usado na detecção de "white fadeouts".
Padrão recomendado -1.
Pode ser de -1 a 255.
"-1" desativa este recurso.
Quando o brilho geral do quadro é maior que este valor, uma nova cena começa.
Com este recurso, é possível definir uma sequência de quadros tão brilhantes como uma cena separada.
int BottomLumaTresh; Usado na detecção de "black fadeouts".
Padrão recomendado -1.
Pode ser de -1 a 255.
"-1" desativa este recurso.
Quando o brilho geral do quadro é menor que este valor, uma nova cena começa.
Com este recurso, é possível definir uma sequência de quadros tão escuros como uma cena separada.
int MinSceneLength;

Define uma duração mínima de uma cena detectada (em quadros).
Padrão recomendado 5.
Pode ser de 0 a qualquer valor positivo.
Se o comprimento da cena definida for menor que este valor, esta cena será mesclada com as cenas anterior, seguinte ou ambas, de acordo com o valor do campo Merge (veja abaixo).

int RegisterGraph; Controla o registro do gráfico de processamento interno em tabela de objetos em execução (ROT).
Pode ser 1 (registrar em ROT) ou 0 (não registrar).
BSTR SourceFilterMoniker; Nome de exibição do moniker de filtro de origem desejado usado no gráfico de processamento interno.
Se NULL - filtro padrão usado.
BSTR SplitterFilterMoniker; Nome de exibição do moniker de filtro separador desejado usado no gráfico de processamento interno.
Se NULL - filtro padrão usado.
BSTR DecoderFilterMoniker; Nome de exibição do moniker de filtro decodificador desejado usado no gráfico de processamento interno.
Se NULL - filtro padrão usado.
sdScenesMergeKind Merge; Quando o comprimento da cena é menor que MinSceneLength, a cena é modificada de acordo com o valor deste parâmetro.

 

Estrutura DetectorParameters2

Esta estrutura expande um conjunto de parâmetros do mecanismo de detecção de cena definido na estrutura DetectorParameters. Além dos membros de DetectorParameters, ela contém:

int UseYUV; Permite selecionar o espaço de cores para detecção de cena.
Pode ser 1 (YUY2) ou 0 (RGB24).
int Pad; Reservado
double StartPosition; Especifica a posição inicial da mídia para detecção de cena em segundos.
Se for diferente de zero, não se esqueça de que todos os horários da cena são relativos a esta posição.
double StopPosition; Especifica a posição final da mídia para detecção de cena em segundos.
Defina como zero para ignorar.

 

Estrutura ThumbnailsParameters

Esta estrutura contém os parâmetros de geração de miniaturas.

int JpegFormat; Seleciona o formato do arquivo. 0 - gerar arquivos BMP, 1 - gerar arquivos JPEG.
int JpegQuality; Qualidade de compactação JPEG. Inteiro de 0 a 100.
int ImagesPerScene; Número de imagens por cena. 1 - apenas quadro inicial, 2 - quadros inicial e final de cada cena.
double Scale; Fator de escala da miniatura. 1 - imagem em tamanho real. Valor de ponto flutuante.
BSTR FileName;

Modelo de nomes de arquivos de miniaturas. String para a função "printf" "C" com um campo inteiro.
Por exemplo: "d:\filedir\filename%05d.jpg"
Você deve especificar o nome completo do caminho com a extensão apropriada. O número do quadro será inserido em vez dos símbolos %d para obter o nome do arquivo para uma miniatura específica.

 

Interface ISceneDetector

Esta interface fornece métodos para detecção de cena:

Método DetectScenesInFile

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

Este é o principal método de detecção de cena.
Passe os parâmetros de detecção em Params e o ponteiro para SAFEARRAY em Scenes.
Se Scenes for NULL, a função não retorna a lista de cenas detectadas.
O chamador não precisa criar SafeArray antes de chamar este método.
Se Scenes não for NULL e após a chamada de função *Scenes também não for NULL, o chamador deve destruir *Scenes SafeArray.
*Scenes é uma matriz bidimensional. Para cada cena encontrada, existem dois valores longos: números de quadro de início e fim da cena. Esses valores são relativos à posição inicial da mídia de processamento.
Passe um ponteiro não NULL como ThumbnailsParams para ativar a geração de miniaturas e especifique seus parâmetros. Passe NULL para desativar a geração de miniaturas.

Retorna um valor HRESULT . Os valores possíveis incluem o seguinte:

0 Sucesso
0x80040601 Erro não especificado
0x80040602 DirectShow não está instalado ou a versão é muito antiga
0x80040603 Não é possível obter a duração do vídeo. Pode ser imagem estática
0x80040604 Argumento inválido
0x80040605 Não é possível criar o contexto do dispositivo
0x80040606 O objeto está ocupado com outra tarefa
0x80040607 A taxa de quadros é igual a zero. Pode ser imagem estática
0x80040608 Não é possível construir o gráfico

 

Interface ISceneDetector2

Esta interface deriva da interface ISceneDetector e fornece métodos estendidos para detecção de cena. Além dos métodos herdados de ISceneDetector, a interface ISceneDetector2 expõe os seguintes métodos:

Método DetectScenesInFile2

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

Ao contrário de DetectScenesInFile, este método usa o conjunto de parâmetros DetectorParameters2, portanto, permite especificar o espaço de cores, as posições de início e fim do processamento.
Preste atenção ao fato de que os valores de início e fim das cenas retornados por este método são relativos ao valor de Params.StartPosition .
Consulte a descrição de DetectScenesInFile para obter outras informações.

Método GetFrameRate

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

Retorna a taxa de quadros do vídeo do último arquivo processado. Útil para tradução de tempo para número de quadro.
Retorna S_OK ou E_INVALIDARG se pFrameRate for NULL.

 

Interface de eventos ISceneDetectorEvents

Esta interface de eventos fornece métodos para recuperar informações de detecção de cena em tempo real.

Método NewScene

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

Evento disparado pelo detector quando uma nova cena é definida.
SceneIndex começa em 0.
Start e Stop também começam em 0 e são números de quadro.
Quando o processamento é iniciado através do método DetectScenesInFile2, os valores Start e Stop são relativos ao valor de Params.StartPosition.

Método Status

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

Evento disparado a cada 50 ms e informa ao cliente sobre o status do processo.
AbortProcess é um ponteiro para a variável. Assim, o cliente pode definir *AbortProcess para o valor 1 para cancelar a detecção de cena atual.