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