Scene Detector – Objeto COM de detecção de cena de vídeo

Descrição

O Scene Detector é um poderoso componente COM para reconhecimento e processamento de cenas. Ele incorpora tecnologias premiadas HandySaw DS para reconhecimento óptico de cena extremamente preciso e rápido. É voltado para empresas e desenvolvedores de software que desejam ampliar seus produtos. Um componente COM é um módulo de software reutilizável que segue a arquitetura Component Object Model (COM), permitindo sua utilização em diversas linguagens e ambientes de programação. Se você estiver procurando um aplicativo independente para detecção de cena, poderá 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 de cada cena e informar imediatamente o aplicativo chamador sobre cada nova cena encontrada por meio de interfaces de retorno de chamada durante o processamento.

Principais características

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

Versão de demonstração e preço

Contate- me.

Documentação

enumeração 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 próxima
sdMergeWithBoth = 3 Cenas curtas (intermediárias), anteriores e seguintes mescladas em uma única cena

Estrutura DetectorParameters

Esta estrutura contém 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 for maior que este valor, uma nova cena começa.
Assim: limite inferior - mais cenas.
int UpLumaTresh; Usado na detecção de "fadeouts brancos".
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 a sequência de quadros brilhantes como uma cena separada.
int BottomLumaTresh; Usado na detecção de "fadeouts de preto".
Padrão recomendado -1.
Pode ser de -1 a 255.
"-1" desativa este recurso.
Quando o brilho geral do quadro for menor que esse valor, uma nova cena será iniciada.
Com este recurso é possível definir a sequência desses quadros escuros como uma cena separada.
int MinSceneLength;

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

int RegisterGraph; Controle o registro do gráfico de processamento interno na Running Object Table (ROT).
Pode ser 1 (cadastrar no 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 identificador de filtro divisor desejado usado no gráfico de processamento interno.
Se NULL – filtro padrão usado.
BSTR DecoderFilterMoniker; Nome de exibição do identificador de filtro do decodificador desejado usado no gráfico de processamento interno.
Se NULL – filtro padrão usado.
sdScenesMergeKind Merge; Quando a duração da cena é menor que MinSceneLength, a cena é modificada de acordo com o valor deste parâmetro.

Estrutura DetectorParameters2

Essa estrutura expande um conjunto de parâmetros do mecanismo de detecção de cena definidos na estrutura DetectorParameters . Além dos membros do DetectorParameters, ele 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 esqueça que todos os tempos de cena são relativos a esta posição.
double StopPosition; Especifica a posição de parada da mídia para detecção de cena em segundos.
Defina como zero para ignorar.

Estrutura de parâmetros de miniaturas

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

int JpegFormat; Selecione o formato do arquivo. 0 - gera arquivos BMP, 1 - gera arquivos JPEG.
int JpegQuality; Qualidade de compressão JPEG. Número inteiro de 0 a 100.
int ImagesPerScene; Imagens por número de cena. 1 - apenas quadro inicial, 2 - quadros inicial e final de cada cena.
double Scale; Fator de escala de miniatura. 1 - foto em tamanho real. Valor de ponto flutuante.
BSTR FileName;

Modelo de nomes de arquivos em miniatura. String para função "C" "printf" com um campo inteiro.
Por exemplo: "d:\filedir\nomedoarquivo%05d.jpg"
Você deve especificar o caminho completo com a extensão adequada. 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 método principal de detecção de cena.
Passe os parâmetros de detecção em Params e o ponteiro para SAFEARRAY em Scenes.
Se Cenas for NULL, a função não retorna a lista de cenas detectadas.
O chamador não precisa criar SafeArray antes de chamar esse 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 deverá destruir *Scenes SafeArray.
*As cenas são uma matriz bidimensional. Para cada cena encontrada existem dois valores longos: números de quadros de início e parada 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 especificar seus parâmetros. Passe NULL para desabilitar 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 uma imagem estática
0x80040604 Argumento ruim
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 uma 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 do DetectScenesInFile , este método usa o conjunto de parâmetros DetectorParameters2 , portanto, permite especificar o espaço de cores, iniciar e parar as posições de processamento.
Preste atenção ao fato de que os valores de início e parada das cenas retornados por este método são relativos ao valor Params.StartPosition .
Consulte a descrição do DetectScenesInFile para outras informações.

Método GetFrameRate

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

Retorna a taxa de quadros de vídeo do último arquivo processado. Útil para a tradução do número do 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] longo SceneIndex, [in] longo Start, [in] longo 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 quadros.
Quando o processamento é iniciado por meio do método DetectScenesInFile2 , os valores Start e Stop são relativos ao valor Params.StartPosition .

Método de status

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

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