Зміна розміру, перетворення кольору та нормалізація
Використовуйте типізовані інтерфейси обробки зображень, коли потрібна одна операція
попередньої обробки, а не об’єднаний Preproc моделі. Вони виконуються на EV74;
не додають резервного виконання на CPU, перепакування чи копіювання даних.
#include <neat.h>
simaai::neat::ResizeOptions size;
size.width = 640;
size.height = 480;
size.max_input_width = 1920;
size.max_input_height = 1080;
auto resize = simaai::neat::nodes::Resize(size);
simaai::neat::ColorConvertOptions color;
color.output_format = simaai::neat::ImageFormat::NV12;
color.surface = simaai::neat::ImageSurfaceLayout::EncoderNv12;
auto convert = simaai::neat::nodes::ColorConvert(color);
Python надає ті самі типи параметрів і фабрики pyneat.nodes.resize,
pyneat.nodes.color_convert та pyneat.nodes.normalization.
Контракти в ходу та виходу
- Resize змінює геометрію, зберігаючи формат необробленого зображення. Вихідні
розміри фіксовані. Вхідні розміри можуть змінюватися в межах підготовленої
місткості; якщо максимум не вказано, використовується початковий вхідний розмір.
Застосовуйте
ResizeFit::Containдля доповнення полями абоStretchдля незалежного масштабування осей. Вхідний формат залишається фіксованим. - ColorConvert зберігає розміри й формує RGB, BGR, GRAY8, NV12, I420 або NV16. Вхідну геометрію та формат фіксують під час першої матеріалізації вузла. Щоб змінити їх, створіть новий вузол і граф; повторне збирання того самого графа не скидає стан вузла.
- Normalization приймає UInt8 RGB, BGR або GRAY8 і формує щільний тензор
BF16, а не необроблене відео. Вона зберігає розміри й порядок каналів. Як і
для ColorConvert, для зміни матеріалізованої вхідної геометрії або формату
потрібні новий вузол і граф. Коефіцієнти задано в семантичному порядку RGB,
зокре ма для зберігання BGR. Операція має вигляд
(x - float(mean * 255)) * float(1 / (stddev * 255)), після чого застосовується наявне усічення Preproc до BF16. Стандартні відхилення мають бути додатними та скінченними.
Наразі вихід GRAY8 потребує входу GRAY8; перетворення RGB/YUV на яскравість не надається. Перед нормалізацією перетворіть YUV на RGB або BGR. Для NV12 та I420 ширина й висота мають бути парними; NV16 потребує парної ширини та має кольорорізницеві компоненти повної висоти. Розміщення зображення з полями у YUV має відповідати тій самій сітці кольорорізницевих компонентів. Явно задані колориметрія джерела та розташування кольорорізницевих відліків мають узгоджуватися із заданою політикою. Черезрядкові зображення й кольорорізницеві компоненти DV або зі змінними рядками відхиляються. Ці інтерфейси обробляють один кадр за виклик, а не списки ROI чи пакети кадрів. Скалярний результат ROI від попереднього вузла з повними відомостями про походження афінного перетворення не є новим запитом обрізання. Скалярний запит ROI без цих відомостей відхиляється. Послідовне з’єднання складає перетворення координат виходу в координати оригіналу.
EV74 обмежує кожний розмір джерела та виходу 4096 пікселями. BoxAverage допускає
не більше восьми зачеплених комірок компонента на вісь, з урахуванням фази й
розташування кольорорізницевих відліків; тому невирівняне зменшення у вісім разів
може бути відхилене. Непідтримувана геометрія спричиняє помилку підготовки, а не
зміну інтерполяції чи перехід на A65.
Частота кадрів
Ці операції не змінюють частоту кадрів. Підготовлені вихідні caps необробленого зображення зберігають відому частоту попереднього вузла, зокрема дробову. Задайте її на Input або на попередній межі caps, якщо цього потребує наступний споживач; налаштування частоти кодера не встановлює вхідну частоту. Невідома частота залишається відсутньою, а не замінюється вигаданим значенням за замовчуванням.
Публікація зображень використовує сувору проєкцію на межі підготовки: вузол без
OutputSpecProvider робить успадковану частоту невідомою, навіть якщо фактично
лише пропускає кадри. Явна наступна межа caps може знову встановити частоту.
Це суворіше за загальну проєкцію OutputSpec за наявними відомостями. Зміна
підготовленої вхідної частоти потребує нового запуску; обмежена динамічна
геометрія входу Resize не дозволяє змінювати частоту кадрів.
Колір і зберігання
ImageColorOptions вибирає сімейство матриць BT.601 або BT.709. Прямі операції
YUV-to-YUV підтримують повний або обмежений діапазон та центровані або суміщені
кольорорізницеві відліки на кожній осі; вони зберігають діапазон кодування й
матрицю, а не перетворюють їх. RGB/GRAY-to-YUV підтримує лише повний діапазон
із центрованими кольорорізницевими відліками. Інші профілі відхиляються під час
підготовки. Ці параметри не виконують перетворення передавальної функції.
Упаковані виходи RGB/GRAY зберігають попереднє трактування YUV з повним діапазоном
і центрованими відліками; запит інших налаштувань діапазону чи розташування
спричиняє помилку замість прихованого наближення.
Багатоплощинний результат — це одне зображення з одним власником сховища.
Зміщення площин і додатні кроки рядків надходять із GstVideoMeta; споживачі
не повинні вважати площини щільно упакованими. Публічні зразки NV16 містять
площини Y та UV, де UV має форму [height, width] із чергуванням байтів.
ImageSurfaceLayout::Native використовує щільно упаковані рядки RGB/GRAY та
вирівнює кроки рядків YUV до 16 байтів. Він зберігає доповнення рядків YUV і
проміжки між площинами. EncoderNv12 використовує правила розміщення кодера:
крок рядка, вирівняний до 64 байтів, і висоту сховища яскравості, округлену до
восьми рядків. EV74 записує всі оголошені хвости рядків і рядки, призначені лише
для зберігання, за кожного виклику. Покадрове заповнення нулями на CPU не
додається. Цей варіант поверхні допустимий лише для NV12; він не додає підтримки
NV16 до кодека, який відхиляє NV16.
Для доповнення YUV полями ResizeOptions::yuv_padding задається як необроблені
[Y, U, V]. Якщо значення не вказано, чорний визначає вихідний діапазон:
[0,128,128] для повного або [16,128,128] для обмеженого.
pad_value залишається значенням заповнення упакованих RGB/GRAY і має
дорівнювати нулю для виходу YUV.
Наявний об’єднаний API Preproc та його поведінка, визначена моделлю, не змінюються.
Нові фабрики зберігають канонічний тип вузла Preproc для інструментів роботи з графом.