Scene Detector – COM-об’єкт виявлення сцени відео

опис

Scene Detector — потужний COM-компонент для розпізнавання та обробки сцен. Він містить відзначені нагородами технології HandySaw DS для надзвичайно точного та швидкого оптичного розпізнавання сцени. Він орієнтований на компанії та розробників програмного забезпечення, які хочуть розширити свої продукти. Компонент COM — це програмний модуль багаторазового використання, який відповідає архітектурі Component Object Model (COM), що дозволяє використовувати його в різних мовах програмування та середовищах. Якщо ви шукаєте окрему програму для виявлення сцени, ви можете використовувати HandySaw DS, перейшовши за цим посиланням .

Об'єкт Scene Detector обробляє відеофайл і повертає список знайдених сцен. Він також може зберігати мініатюри для кожної сцени та негайно інформувати програму, що викликає, про кожну нову знайдену сцену через інтерфейс зворотного виклику під час обробки.

Основні риси

  • Виявляє сцени майже в будь-якому відеофайлі, який можна відтворити Windows Media Player (завдяки використанню 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 до будь-якого позитивного значення.
Якщо довжина визначеної сцени менша за це значення, ця сцена об’єднується з попередньою, наступною або обома сценами відповідно до значення поля «Злиття» (див. нижче).

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.
*Сцени — це двовимірний масив. Для кожної знайденої сцени є два довгих значення: номери кадрів початку та кінця сцени. Ці значення відносяться до позиції носія початку обробки.
Передайте вказівник, відмінний від NULL, як 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.
Пуск і зупинка також починаються з 0 і є номерами кадрів.
Коли обробку розпочато через метод DetectScenesInFile2 , значення Start і Stop відносяться до значення Params.StartPosition .

Статусний метод

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

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