Scene Detector – COM-объект обнаружения видео сцен

Описание

Scene Detector - это мощный COM-компонент для распознавания и обработки сцен. Он включает в себя удостоенные наград технологии HandySaw DS для чрезвычайно точного и быстрого оптического распознавания сцен. Он ориентирован на компании-разработчиков программного обеспечения, которые хотят расширить свои продукты. COM-компонент — это многократно используемый программный модуль, который соответствует архитектуре Component Object Model (COM), что позволяет использовать его в различных языках программирования и средах. Если вы ищете автономное приложение для обнаружения сцен, вы можете использовать HandySaw DS, перейдя по этой ссылке.

Объект Scene Detector обрабатывает видеофайл и возвращает список найденных сцен. Он также может сохранять миниатюры для каждой сцены и немедленно информировать вызывающее приложение о каждой новой найденной сцене через интерфейсы обратного вызова во время обработки.

 

Основные характеристики

  • Обнаруживает сцены практически в любом видеофайле, который можно воспроизвести с помощью проигрывателя Windows Media (из-за использования DirectShow API)
  • Быстрый и точный алгоритм
  • Простая интеграция
  • Сообщает о новой сцене сразу после ее определения, во время обработки. Не нужно ждать окончания обнаружения
  • Может генерировать миниатюры — изображения первого и последнего кадров для каждой сцены и сохранять их в файлах BMP или JPG
  • Можно указать исходный, разделительный и видеодекодерные фильтры, которые будут использоваться во время обработки
  • Может обнаруживать "белые" и "черные" сцены
  • Может работать в цветовых пространствах RGB и YUV
  • Может обрабатывать часть медиафайла — пользователь может указать начальную и конечную позиции обработки

 

Демо-версия и цена

Свяжитесь со мной.

 

Документация

 

Перечисление sdScenesMergeKind

Используется для указания того, что делать с короткими сценами.

sdMergeDelete = 0, Короткая сцена удалена
sdMergeWithPrev = 1, Короткая сцена объединена с предыдущей
sdMergeWithNext = 2, Короткая сцена объединена со следующей
sdMergeWithBoth = 3 Короткая (средняя), предыдущая и следующая сцены объединены в одну сцену

 

Структура DetectorParameters

Эта структура содержит параметры движка обнаружения сцен.

BSTR VideoFileName; Полное имя видеофайла для обнаружения.
int Threshold; Значение порога обнаружения.
Рекомендуемые значения по умолчанию — 19 для цветового пространства RGB и 5 для YUV.
Может быть от 0 до 255.
Этот параметр является основным.
Когда разница между двумя кадрами больше этого значения, начинается новая сцена.
Таким образом: чем ниже порог, тем больше сцен.
int UpLumaTresh; Используется при обнаружении "белых затуханий".
Рекомендуемое значение по умолчанию -1.
Может быть от -1 до 255.
"-1" отключает эту функцию.
Когда общая яркость кадра больше этого значения, начинается новая сцена.
С помощью этой функции можно определить последовательность таких ярких кадров как отдельную сцену.
int BottomLumaTresh; Используется при обнаружении "черных затуханий".
Рекомендуемое значение по умолчанию -1.
Может быть от -1 до 255.
"-1" отключает эту функцию.
Когда общая яркость кадра меньше этого значения, начинается новая сцена.
С помощью этой функции можно определить последовательность таких темных кадров как отдельную сцену.
int MinSceneLength;

Устанавливает минимальную продолжительность обнаруженной сцены (в кадрах).
Рекомендуемое значение по умолчанию 5.
Может быть от 0 до любого положительного значения.
Если длина определенной сцены меньше этого значения, эта сцена объединяется с предыдущей, следующей или обеими сценами в соответствии со значением поля Merge (см. ниже).

int RegisterGraph; Управление регистрацией внутреннего графа обработки в Таблице работающих объектов (ROT).
Может быть 1 (зарегистрировать в ROT) или 0 (не регистрировать).
BSTR SourceFilterMoniker; Отображаемое имя желаемого мононикера исходного фильтра, используемого во внутреннем графе обработки.
Если NULL — используется фильтр по умолчанию.
BSTR SplitterFilterMoniker; Отображаемое имя желаемого мононикера разделительного фильтра, используемого во внутреннем графе обработки.
Если NULL — используется фильтр по умолчанию.
BSTR DecoderFilterMoniker; Отображаемое имя желаемого мононикера фильтра декодера, используемого во внутреннем графе обработки.
Если NULL — используется фильтр по умолчанию.
sdScenesMergeKind Merge; Когда длина сцены меньше MinSceneLength, сцена изменяется в соответствии со значением этого параметра.

 

Структура DetectorParameters2

Эта структура расширяет набор параметров движка обнаружения сцен, определенных в структуре DetectorParameters. В дополнение к элементам DetectorParameters она содержит:

int UseYUV; Позволяет выбрать цветовое пространство для обнаружения сцен.
Может быть 1 (YUY2) или 0 (RGB24).
int Pad; Зарезервировано
double StartPosition; Указывает начальную позицию мультимедиа для обнаружения сцен в секундах.
Если это ненулевое значение, не забудьте, что все временные метки сцен относятся к этой позиции.
double StopPosition; Указывает конечную позицию мультимедиа для обнаружения сцен в секундах.
Установите значение ноль, чтобы игнорировать.

 

Структура ThumbnailsParameters

Эта структура содержит параметры создания миниатюр.

int JpegFormat; Выберите формат файла. 0 — генерировать BMP-файлы, 1 — генерировать JPEG-файлы.
int JpegQuality; Качество сжатия JPEG. Целое число от 0 до 100.
int ImagesPerScene; Количество изображений на сцену. 1 — только начальный кадр, 2 — начальный и конечный кадры каждой сцены.
double Scale; Коэффициент масштабирования миниатюр. 1 — полноразмерное изображение. Значение с плавающей запятой.
BSTR FileName;

Шаблон имен файлов миниатюр. Строка для функции "printf" языка "C" с одним целочисленным полем.
Например: "d:\filedir\filename%05d.jpg"
Вы должны указать полный путь с правильным расширением. Номер кадра будет вставлен вместо символов %d, чтобы получить имя файла для конкретной миниатюры.

 

Интерфейс ISceneDetector

Этот интерфейс предоставляет методы для обнаружения сцен:

Метод DetectScenesInFile

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

Это основной метод обнаружения сцен.
Передайте параметры обнаружения в Params и указатель на SAFEARRAY в Scenes.
Если Scenes имеет значение NULL, функция не возвращает список обнаруженных сцен.
Вызывающему абоненту не нужно создавать SafeArray перед вызовом этого метода.
Если Scenes не NULL и после вызова функции *Scenes также не NULL, вызывающий абонент должен уничтожить *Scenes SafeArray.
*Scenes — это двумерный массив. Для каждой найденной сцены есть два длинных значения: номера начального и конечного кадров сцены. Эти значения относятся к начальной позиции обработки мультимедиа.
Передайте ненулевой указатель в качестве ThumbnailsParams, чтобы включить создание миниатюр и указать его параметры. Передайте NULL, чтобы отключить создание миниатюр.

Возвращает значение HRESULT . Возможные значения включают следующие:

0 Успех
0x80040601 Неуказанная ошибка
0x80040602 DirectShow не установлен или версия слишком старая
0x80040603 Невозможно получить продолжительность видео. Может быть неподвижное изображение
0x80040604 Неверный аргумент
0x80040605 Невозможно создать контекст устройства
0x80040606 Объект занят другой задачей
0x80040607 Частота кадров равна нулю. Может быть неподвижное изображение
0x80040608 Невозможно построить граф

 

Интерфейс ISceneDetector2

Этот интерфейс является производным от интерфейса ISceneDetector и предоставляет расширенные методы для обнаружения сцен. В дополнение к методам, унаследованным от ISceneDetector, интерфейс ISceneDetector2 предоставляет следующие методы:

Метод DetectScenesInFile2

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

В отличие от DetectScenesInFile, этот метод использует набор параметров DetectorParameters2, что позволяет указать цветовое пространство, начальную и конечную позиции обработки.
Обратите внимание на то, что значения начала и остановки сцен, возвращаемые этим методом, относятся к значению Params.StartPosition .
См. описание DetectScenesInFile для получения другой информации.

Метод GetFrameRate

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

Возвращает частоту кадров видео последнего обработанного файла. Полезно для перевода времени в номер кадра.
Возвращает S_OK или E_INVALIDARG, если pFrameRate имеет значение NULL.

 

Интерфейс событий ISceneDetectorEvents

Этот интерфейс событий предоставляет методы для получения информации об обнаружении сцен в режиме реального времени.

Метод NewScene

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

Событие, запускаемое детектором при определении новой сцены.
SceneIndex начинается с 0.
Start и Stop также начинаются с 0 и являются номерами кадров.
Когда обработка запускается с помощью метода DetectScenesInFile2, значения Start и Stop относятся к значению Params.StartPosition.

Метод Status

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

Событие срабатывает каждые 50 мс и информирует клиента о состоянии процесса.
AbortProcess — это указатель на переменную. Таким образом, клиент может установить для *AbortProcess значение 1, чтобы отменить текущее обнаружение сцен.