Scene Detector – COM-об'єкт для виявлення відеосцен
Опис
Scene Detector - це потужний COM-компонент для розпізнавання та обробки сцен. Він включає відзначені нагородами технології HandySaw DS для надзвичайно точного та швидкого оптичного розпізнавання сцен. Він орієнтований на компанії-розробники програмного забезпечення та розробників, які хочуть розширити свої продукти. COM-компонент - це модуль програмного забезпечення для багаторазового використання, який відповідає архітектурі Об'єктної моделі компонентів (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; | Встановлює мінімальну тривалість виявленої сцени (у кадрах). |
int RegisterGraph; | Керування реєстрацією внутрішнього графіка обробки в
Running Object Table (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; | Шаблон імен файлів мініатюр. Рядок для функції "C" "printf" з одним цілим полем. |
Інтерфейс 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, програма, що викликає, повинна знищити SafeArray *Scenes.
*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, щоб скасувати поточне виявлення сцени.