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