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

Описание

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

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

Основные особенности

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

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

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

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

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

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

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

Структура DetectorParameters

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

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

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

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; Указывает положение остановки носителя для обнаружения сцены в секундах.
Установите ноль, чтобы игнорировать.

МиниатюрыСтруктура параметров

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

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

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

Интерфейс ISceneDetector

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

Метод Детектсценсинфиле

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

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

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

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

Интерфейс ISceneDetector2

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

Метод Детектсценсинфиле2

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

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

метод новой сцены

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

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

Метод статуса

Статус HRESULT ([in] long ScenesFound, [in] long CurrentFrame, [in] long TotalFrames, [out] long *AbortProcess );

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