카메라 입력 노드
다음 libcamera 가이드는 기본 백엔드를 설명합니다. Metoak SIMOR의 소유권 있는 원시 텐서는 아래 V4L2 절을 참조하세요.
CameraInput은 libcamera와 GStreamer의 libcamerasrc를 통해 노출된 MIPI 카메라에 대한 소스 노드입니다. 프레임이 run.push(...) 대신 DevKit 카메라 스택에서 가져와야 할 때 소스에서 소유한 그래프의 시작 부분에 사용합니다.
작업 가이드는 MIPI 카메라를 사용하세요.를 참조하십시오.
필수 조건
CameraInput을 사용하기 전에, Neat 외부에서 카메라를 실행하세요.
- Modalix DevKit의 전원이 꺼진 상태에서 카메라를 연결하십시오.
- 캐리어 보드, 카메라 제조업체, 센서 및 포트에 맞는
.dtbo오버레이를 선택합니다. - libcamera가 카메라 목록을 제대로 표시하는지 확인합니다.
- 요청하려는 정확한
format,width,height,framerate로libcamerasrc가 스트리밍할 수 있는지 확인하십시오.
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);
}
파이썬:
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가 참일 때, 대기열에 쌓을 수 있는 최대 버퍼 수입니다. |
allow_cpu_fallback | false | false인 경우 카메라/장치의 제로 복사 지원을 필수로 설정합니다. true로 설정하는 것은 SiMaAI 메모리에 대한 Neat의 비공개 적응형 브리지를 사용하도록 선택하는 것입니다. |
capture_buffer_count는 이제 CameraInputOptions 필드로도 제공됩니다. 0은 백엔드 기본값을 유지하고, 0이 아닌 값은 캡처 수를 재정의합니다. 기존 C++ 팩토리와 Python 키워드도 유지됩니다. libcamera의 상한은 128이며 원시 V4L2는 4–128개 버퍼가 필요합니다.
입력 및 출력 계약
| 계약 항목 | 행동 |
|---|---|
| 입력 역할: | 소스 노드. 이 그래프는 카메라에서 프레임을 가져옵니다. 앱에서 샘플을 이 노드로 보내지는 않습니다. |
| 출력 미디어 유형: | video/x-raw. |
| 출력 형식 | 요청된 형식은 일반적으로 format, 보통 NV12입니다. |
| 메모리 계약 | 장치/SiMaAI 제로 복사 방식을 선호합니다. 폴백 기능이 활성화되면 OS/libcamera 버퍼가 후속 CVU/MLA 단계를 위해 SiMaAI 메모리로 조정됩니다. |
| 요청된 옵션을 기반으로 정지된 힌트를 통해 기능 제한을 확정합니다. 런타임 기능 제한 협상은 여전히 카메라 스택에 따라 달라집니다. |