Вхідний вузол камери.
Наведений нижче посібник libcamera описує типовий бекенд. Для сирих тензорів Metoak SIMOR у власній пам’яті дивіться розділ V4L2 нижче.
CameraInput — це вихідний вузол для MIPI-камер, доступ до яких здійснюється через libcamera та GStreamer libcamerasrc. Використовуйте його на початку графа, що належить джерелу, коли кадри повинні надходити зі стеку камер DevKit, а не з run.push(...).
Інструкції щодо виконання завдання див. у розділі Використовуйте камеру MIPI..
Необхідні умови.
Перш ніж використовувати CameraInput, активуйте камеру за межами Neat:
- прикріпіть камеру, коли Modalix DevKit вимкнено.
- оберіть відповідне накладення
.dtbo, яке відповідає материнській платі, виробнику камери, сенсору та порту. - перевірте, чи відображається камера в списку libcamera;
- підтвердьте, чи може
libcamerasrcздійснювати потокову передачу у вказаному вами форматіformat,width,height,framerate.
camera_name – це назва камери libcamera. Залиште це значення порожнім для використання камери за замовчуванням або скопіюйте назву з cam -l, якщо на платі встановлено більше однієї камери.
Швидкий старт.
#include <neat.h>
namespace neat = simaai::neat;
neat::CameraInputOptions opt;
opt.width = 1920;
opt.height = 1080;
opt.framerate_num = 30;
opt.framerate_den = 1;
opt.format = "NV12";
opt.buffer_name = "camera0";
opt.allow_cpu_fallback = true;
neat::Graph graph;
graph.add(neat::nodes::CameraInput(opt));
graph.add(neat::nodes::Output("frames"));
neat::Run run = graph.build();
std::optional<neat::Sample> frame = run.pull(/*timeout_ms=*/5000);
Оскільки CameraInput є власником джерела, створіть граф, не додаючи загальнодоступний вузол Input, якщо ваш застосунок насправді не має іншого вхідного вузла, що надходить від іншого застосунку.
Інтерфейс API.
namespace simaai::neat {
struct CameraInputOptions;
class CameraInput;
}
namespace simaai::neat::nodes {
std::shared_ptr<simaai::neat::Node> CameraInput(
simaai::neat::CameraInputOptions opt = {});
std::shared_ptr<simaai::neat::Node> CameraInputWithCaptureBuffers(
simaai::neat::CameraInputOptions opt,
std::uint32_t capture_buffer_count);
}
Python:
opt = pyneat.CameraInputOptions()
node = pyneat.nodes.camera_input(opt, capture_buffer_count=32)
Параметри
| Поле | Значення за замовчуванням | Опис |
|---|---|---|
camera_name | не встановлено | Необов’язкова назва камери libcamera, зазвичай копіюється з cam -l. Залиште порожнім, щоб дозволити libcamera вибрати камеру за замовчуванням. |
width | 1920 | Зазначена ширина кадру в пікселях. Має підтримуватися камерою та накладкою. |
height | 1080 | Запитана висота фрейму в пікселях. |
framerate_num | 30 | Чисельник частоти кадрів. |
framerate_den | 1 | Знаменник частоти кадрів. 0 нормалізується до 1. |
format | "NV12" | Запитано video/x-raw формат. NV12 є рекомендованим шляхом попередньої обробки для моделі. |
buffer_name | "camera" | Логічна назва буфера, що використовується в подальших метаданих і для іменування моделей. |
insert_queue | true | Після узгодження з алокатором і перевірки можливості використання механізму «нульового копіювання» вставте н евелику чергу для потокового джерела даних. |
leaky_queue | true | Зробіть чергу пропускною у нижній частині, щоб динамічні графіки надавали перевагу останнім кадрам, а не застарілим даним. |
queue_depth | 2 | Максимальна кількість буферів у черзі, коли insert_queue має значення true. |
allow_cpu_fallback | false | Якщо false, вимагайте підтримку функції «нульового копіювання» для камери/пристрою. Встановіть значення true лише для активації приватної адаптивної інтеграції Neat із пам’яттю SiMaAI. |
capture_buffer_count тепер також є полем CameraInputOptions. Нуль зберігає типове значення бекенду, ненульове значення перевизначає кількість буферів захоплення. Наявна фабрика C++ та ключовий аргумент Python залишаються доступними. Межа libcamera — 128; сирому V4L2 потрібно 4–128 буферів.
Вхідні та вихідні параметри контракту.
| Пункт контракту | Поведінка |
|---|---|
| Вхідна роль: | Вхідний вузол. Граф отримує кадри з камери; додаток не передає дані до цього вузла. |
| Тип вихідного медіафайлу: | video/x-raw. |
| Формат виводу: | Зазвичай, запитуваний формат format – це NV12. |
| Контракт пам’яті | Віддає перевагу механізму обміну даними без копіювання між пристроєм і SiMaAI. У разі активації механізму резервного копіювання, буфери ОС/libcamera адаптуються для використання в пам’яті SiMaAI для подальших етапів обробки CVU/MLA. |
| Обмеження можливостей, що гарантуються | Статична підказка, що базується на запрошених параметрах. Узгодження обмежень можливостей під час роботи все ще залежить від програмного забезпечення камери. |