DepthAI v2 has been superseded by DepthAI v3. You are viewing legacy documentation.
此页面由 AI 自动翻译。查看英文原版

本页目录

  • 如何放置它
  • 输入和输出
  • 用法
  • 3A 算法
  • 限制
  • 功能示例
  • 参考

ColorCamera

ColorCamera 节点是 ImgFrame 的来源。您可以使用 InputControlInputConfig 在运行时控制它。

如何放置它

Python

Python
1pipeline = dai.Pipeline()
2cam = pipeline.create(dai.node.ColorCamera)

C++

C++
1dai::Pipeline pipeline;
2auto cam = pipeline.create<dai::node::ColorCamera>();

输入和输出

消息类型
  • inputConfig - ImageManipConfig
  • inputControl - CameraControl
  • raw - ImgFrame - RAW10 bayer 数据。解包的演示代码 在此处
  • isp - ImgFrame - YUV420 Планар (与 YU12/IYUV/I420 相同)
  • still - ImgFrame - NV12,适用于较大尺寸的帧。当发送捕获事件到 ColorCamera 时创建图像,就像拍照一样
  • preview - ImgFrame - RGB (如果配置为 BGR Планар/交错),主要适用于小尺寸预览以及将图像馈送到 NeuralNetwork
  • video - ImgFrame - NV12,适用于较大尺寸的帧
ISP (图像信号处理器) 用于 bayer 转换、去马赛克、降噪和其他图像增强。 它与 3A 算法交互:自动对焦自动曝光自动白平衡,这些算法在运行时处理图像传感器 调整,如曝光时间、灵敏度 (ISO) 和镜头位置 (如果相机模块有电动镜头)。 有关更多信息,请点击 此处图像后处理 将来自 ISP 的 YUV420 Планар 帧转换为 video/preview/still 帧。still (触发捕获时) 和 isp 以最大相机分辨率工作,而 videopreview 则限制在最高 4K (3840 x 2160) 分辨率,这是从 isp 裁剪的。 对于 IMX378 (12MP),后处理 的工作方式如下:
software/depthai/nodes/isp.webp
上图是 ColorCamera 的 isp 输出 (IMX378 的 12MP 分辨率)。如果您不向下缩放 ISP, video 输出将被裁剪到 4k (由于 video 输出的限制,最大为 3840x2160),如 蓝色矩形所示。黄色矩形表示当预览尺寸设置为 1:1 宽高比时裁剪的 preview 输出 (例如,当使用 300x300 预览尺寸用于 MobileNet-SSD NN 模型时),因为 preview 输出是从 video 输出派生的。

用法

Python

Python
1pipeline = dai.Pipeline()
2cam = pipeline.create(dai.node.ColorCamera)
3cam.setPreviewSize(300, 300)
4cam.setBoardSocket(dai.CameraBoardSocket.CAM_A)
5cam.setResolution(dai.ColorCameraProperties.SensorResolution.THE_1080_P)
6cam.setInterleaved(False)
7cam.setColorOrder(dai.ColorCameraProperties.ColorOrder.RGB)

C++

C++
1dai::Pipeline pipeline;
2auto cam = pipeline.create<dai::node::ColorCamera>();
3cam->setPreviewSize(300, 300);
4cam->setBoardSocket(dai::CameraBoardSocket::CAM_A);
5cam->setResolution(dai::ColorCameraProperties::SensorResolution::THE_1080_P);
6cam->setInterleaved(false);
7cam->setColorOrder(dai::ColorCameraProperties::ColorOrder::RGB);

3A 算法

3A - 自动曝光 (AE)、自动白平衡 (AWB) 和自动对焦 (AF) - 算法用于优化图像质量,并直接在 RVC 上运行。 默认情况下,这些设置处于 AUTO 模式,并具有特定于每个传感器的限制(例如,最小/最大曝光)(有关详细信息,请参阅 支持的传感器)。您可以通过遵循 RGB 相机控制示例 中的步骤,或使用 cam_test.py 脚本 来手动控制这些设置。
  • 立体相机: 传感器共享同一 I2C 总线,可确保自动同步 3A 设置(AWB、AE)。
  • 独立传感器: 在 OAK FFC 或 OAK-D-LR 等设置中,每个传感器都有自己的 I2C,可以使用 3a-follow 功能将一个传感器的 3A 设置同步到其他传感器。
示例用法
Python
1cam['cam_b'].initialControl.setMisc("3a-follow", dai.CameraBoardSocket.CAM_A)
2cam['cam_c'].initialControl.setMisc("3a-follow", dai.CameraBoardSocket.CAM_A)
3a-follow 功能将 3A 设置(曝光、ISO 和白平衡)从主相机(例如 CAM_A)复制到设置中的其他相机(例如 CAM_B 和 CAM_C)。

限制

以下是 RVC2 的已知相机限制:
  • ISP 可处理约 600 MP/s,当流水线同时运行 NN 和视频编码器时,可处理约 500 MP/s
  • 3A 算法 可处理约 200..250 FPS 总计 (针对所有相机流)。这是我们当前实现的限制,我们计划采取变通方法来运行每 X 帧的 3A 算法,但尚未确定时间表
  • ISP 缩放 的分子值可以是 1..16,分母值可以是 1..32 (水平和垂直缩放)。因此,您可以将例如 12MP (4056x3040) 缩放到 此处计算的分辨率

功能示例

参考

class

depthai.node.ColorCamera(depthai.Node)

method
getBoardSocket(self) -> depthai.CameraBoardSocket: depthai.CameraBoardSocket
Retrieves which board socket to use  Returns:     Board socket to use
method
method
getCamera(self) -> str: str
Retrieves which camera to use by name  Returns:     Name of the camera to use
method
method
getFp16(self) -> bool: bool
Get fp16 (0..255) data of preview output frames
method
getFps(self) -> float: float
Get rate at which camera should produce frames  Returns:     Rate in frames per second
method
method
method
getInterleaved(self) -> bool: bool
Get planar or interleaved data of preview output frames
method
getIspHeight(self) -> int: int
Get 'isp' output height
method
getIspNumFramesPool(self) -> int: int
Get number of frames in isp pool
method
getIspSize(self) -> tuple[int, int]: tuple[int, int]
Get 'isp' output resolution as size, after scaling
method
getIspWidth(self) -> int: int
Get 'isp' output width
method
method
getPreviewKeepAspectRatio(self) -> bool: bool
See also:     setPreviewKeepAspectRatio  Returns:     Preview keep aspect ratio option
method
getPreviewNumFramesPool(self) -> int: int
Get number of frames in preview pool
method
method
method
getRawNumFramesPool(self) -> int: int
Get number of frames in raw pool
method
method
getResolutionHeight(self) -> int: int
Get sensor resolution height
method
method
getResolutionWidth(self) -> int: int
Get sensor resolution width
method
method
getSensorCropX(self) -> float: float
Get sensor top left x crop coordinate
method
getSensorCropY(self) -> float: float
Get sensor top left y crop coordinate
method
method
getStillNumFramesPool(self) -> int: int
Get number of frames in still pool
method
method
method
method
getVideoNumFramesPool(self) -> int: int
Get number of frames in video pool
method
method
method
getWaitForConfigInput(self) -> bool: bool
See also:     setWaitForConfigInput  Returns:     True if wait for inputConfig message, false otherwise
method
sensorCenterCrop(self)
Specify sensor center crop. Resolution size / video size
method
setBoardSocket(self, boardSocket: depthai.CameraBoardSocket)
Specify which board socket to use  Parameter ``boardSocket``:     Board socket to use
method
method
setCamera(self, name: str)
Specify which camera to use by name  Parameter ``name``:     Name of the camera to use
method
setColorOrder(self, colorOrder: depthai.ColorCameraProperties.ColorOrder)
Set color order of preview output images. RGB or BGR
method
setFp16(self, fp16: bool)
Set fp16 (0..255) data type of preview output frames
method
setFps(self, fps: typing.SupportsFloat)
Set rate at which camera should produce frames  Parameter ``fps``:     Rate in frames per second
method
method
method
setInterleaved(self, interleaved: bool)
Set planar or interleaved data of preview output frames
method
setIsp3aFps(self, isp3aFps: typing.SupportsInt)
Isp 3A rate (auto focus, auto exposure, auto white balance, camera controls etc.). Default (0) matches the camera FPS, meaning that 3A is running on each frame. Reducing the rate of 3A reduces the CPU usage on CSS, but also increases the convergence rate of 3A. Note that camera controls will be processed at this rate. E.g. if camera is running at 30 fps, and camera control is sent at every frame, but 3A fps is set to 15, the camera control messages will be processed at 15 fps rate, which will lead to queueing.
method
method
method
method
setPreviewKeepAspectRatio(self, keep: bool)
Specifies whether preview output should preserve aspect ratio, after downscaling from video size or not.  Parameter ``keep``:     If true, a larger crop region will be considered to still be able to create     the final image in the specified aspect ratio. Otherwise video size is     resized to fit preview size
method
method
method
method
setRawOutputPacked(self, packed: bool)
Configures whether the camera `raw` frames are saved as MIPI-packed to memory. The packed format is more efficient, consuming less memory on device, and less data to send to host: RAW10: 4 pixels saved on 5 bytes, RAW12: 2 pixels saved on 3 bytes. When packing is disabled (`false`), data is saved lsb-aligned, e.g. a RAW10 pixel will be stored as uint16, on bits 9..0: 0b0000'00pp'pppp'pppp. Default is auto: enabled for standard color/monochrome cameras where ISP can work with both packed/unpacked, but disabled for other cameras like ToF.
method
method
setSensorCrop(self, x: typing.SupportsFloat, y: typing.SupportsFloat)
Specifies the cropping that happens when converting ISP to video output. By default, video will be center cropped from the ISP output. Note that this doesn't actually do on-sensor cropping (and MIPI-stream only that region), but it does postprocessing on the ISP (on RVC).  Parameter ``x``:     Top left X coordinate  Parameter ``y``:     Top left Y coordinate
method
setStillNumFramesPool(self, arg0: typing.SupportsInt)
Set number of frames in preview pool
method
method
setVideoNumFramesPool(self, arg0: typing.SupportsInt)
Set number of frames in preview pool
method
method
setWaitForConfigInput(self, wait: bool)
Specify to wait until inputConfig receives a configuration message, before sending out a frame.  Parameter ``wait``:     True to wait for inputConfig message, false otherwise
property
frameEvent
Outputs metadata-only ImgFrame message as an early indicator of an incoming frame.  It's sent on the MIPI SoF (start-of-frame) event, just after the exposure of the current frame has finished and before the exposure for next frame starts. Could be used to synchronize various processes with camera capture. Fields populated: camera id, sequence number, timestamp
property
initialControl
Initial control options to apply to sensor
property
inputConfig
Input for ImageManipConfig message, which can modify crop parameters in runtime  Default queue is non-blocking with size 8
property
inputControl
Input for CameraControl message, which can modify camera parameters in runtime  Default queue is blocking with size 8
property
isp
Outputs ImgFrame message that carries YUV420 planar (I420/IYUV) frame data.  Generated by the ISP engine, and the source for the 'video', 'preview' and 'still' outputs
property
preview
Outputs ImgFrame message that carries BGR/RGB planar/interleaved encoded frame data.  Suitable for use with NeuralNetwork node
property
raw
Outputs ImgFrame message that carries RAW10-packed (MIPI CSI-2 format) frame data.  Captured directly from the camera sensor, and the source for the 'isp' output.
property
still
Outputs ImgFrame message that carries NV12 encoded (YUV420, UV plane interleaved) frame data.  The message is sent only when a CameraControl message arrives to inputControl with captureStill command set.
property
video
Outputs ImgFrame message that carries NV12 encoded (YUV420, UV plane interleaved) frame data.  Suitable for use with VideoEncoder node

需要帮助?

请前往 Discussion Forum 获取技术支持或提出您可能有的任何其他问题。