Gen1 Python API
关于DepthAI第一代管道构建器的API详细介绍。
- class Device
- Canonical
depthai.Device
用与之交互的方法表示 DepthAI 设备。
Warning
请注意,除
get_available_streams()
之外的所有方法都要首先运行create_pipeline()
。例如
import depthai device = depthai.Device('', False) pipeline = device.create_pipeline(config={ 'streams': ['previewout', 'metaout'], 'ai': { "blob_file": "/path/to/model.blob", "blob_file_config": "/path/to/config.json", }, })
方法
- __init__(device_id: str, usb2_mode: bool) Device
标准和推荐的方式来设置对象。
device_id 代表设备连接的 USB 端口 ID。 如果设置为特定值 (例如:
"1"
) 它将在特定的 USB 端口中查找设备, 而如果留空 -''
- 将在所有端口上查找设备。 当我们连接了不止一台 DepthAI 设备并希望在代码中指定要使用哪一台设备时,这个方法很有用。usb2_mode, 为
True/False
, 允许 DepthAI 使用 USB2 协议(而不是 USB3)进行通信。 这降低了管道的吞吐量,但允许使用> 1m USB 电缆进行连接。
- __init__(cmd_file: str, device_id: str) Device
初始化 DepthAI 设备的开发和调试方法。
cmd_file 是固件
.cmd
文件的路径,该文件将加载到设备上以进行引导。device_id 代表设备连接的 USB 端口 ID。 如果设置为特定值 (例如:
"1"
) 它将在特定的 USB 端口中查找设备,而如果留空 -''
- 将在所有端口上查找设备。 当我们连接了不止一台 DepthAI 设备并希望在代码中指定要使用哪一台设备时,这个方法很有用。
- create_pipeline(config: dict) depthai.CNNPipeline
初始化 DepthAI 管道,如果成功,则返回创建的
CNNPipeline
否则返回None
。config(dict) - 管道的配置使用
dict
设置。 配置的示例键/值:{ # Possible streams: # 'color' - 4K 彩色摄像机预览 # 'left' - 左单声道相机预览 # 'right' - 右单声道相机预览 # 'rectified_left' - 校正左镜头预览 # 'rectified_right' - 校正右镜头预览 # 'previewout' - 神经网络输入预览 # 'metaout' - CNN 输出张量 # 'depth' - 原始深度图,视差转换为现实距离 # 'disparity' - 视差图,左右摄像机之间的视差,以像素为单位 # 'disparity_color' - 视差图着色 # 'meta_d2h' - device metadata stream # 'video' - H.264/H.265 编码的彩色摄像机帧 # 'jpegout' - JPEG 编码的彩色相机帧 # 'object_tracker' - 对象跟踪器结果 'streams': [ 'left', # 如果使用left,它必须在第一个位置 'right', {'name': 'previewout', 'max_fps': 12.0}, # 流可以指定为对象 'metaout', # 与深度有关的流 {'name': 'depth', 'max_fps': 12.0}, {'name': 'disparity', 'max_fps': 12.0}, {'name': 'disparity_color', 'max_fps': 12.0}, ], 'depth': { 'calibration_file': consts.resource_paths.calib_fpath, 'left_mesh_file': consts.resource_paths.left_mesh_fpath, 'right_mesh_file': consts.resource_paths.right_mesh_fpath, 'padding_factor': 0.3, 'depth_limit_m': 10.0, # 以米为单位,用于在 x,y,z calc 期间进行过滤 'median_kernel_size': 7, # 视差/深度中值滤波器内核大小(N x N)。 0 = 禁用过滤 'lr_check': True # 启用双目“左右检查”功能。 'warp_rectify': { 'use_mesh' : True, # 如果为 False,将使用单应性。 'mirror_frame': True, # 如果为 False,则视差将被镜像 'edge_fill_color': 0, # 灰色 0..255 或 -1 以复制像素值 }, }, 'ai': { 'blob_file': blob_file, 'blob_file_config': blob_file_config, 'blob_file2': blob_file2, 'blob_file_config2': blob_file_config2, 'calc_dist_to_bb': True, # 带边界框输出的 CNN 模型的深度计算 'keep_aspect_ratio': False, # 保持宽高比,不要对 NN 使用完整的 RGB FOV 'camera_input': "left", # 'rgb', 'left', 'right', 'left_right', 'rectified_left', 'rectified_right', 'rectified_left_right' 'shaves' : 7, # 1 - 14 NN 使用的 shaves 数量。 'cmx_slices' : 7, # 1 - 14 NN 使用的 cmx_slices 数。 'NN_engines' : 2, # 1 - 2 NN 使用的 NN_engine 的数量。 }, # 对象追踪器 'ot': { 'max_tracklets' : 20, # 最多支持 20 个 'confidence_threshold' : 0.5, # 仅针对超过此阈值的检测跟踪对象 }, 'board_config': { 'swap_left_and_right_cameras': True, # 交换左右摄像机。 'left_fov_deg': 71.86, # 立体摄像机的水平视场(HFOV),以[deg]为单位。 'rgb_fov_deg': 68.7938, # RGB 摄像机的水平视场(HFOV),以[deg]为单位 'left_to_right_distance_cm': 9.0, # 左/右摄像机基线,以[cm]为单位 'left_to_rgb_distance_cm': 2.0, # RGB 相机与左相机的距离。 'store_to_eeprom': False, # 将校准和 board_config(fov,baselines,swap-lr)存储在板载 EEPROM 中 'clear_eeprom': False, # 使 EEPROM 中的 calib 和 board_config 无效 'override_eeprom': False, # 使用主机上的 calib 和 board_config,如果编程则忽略 EEPROM 数据. }, 'camera': { 'rgb': { # 3840x2160, 1920x1080 # 目前仅支持 UHD / 1080p / 30 fps 'resolution_h': 3040, # possible - 1080, 2160, 3040 'fps': 30, }, 'mono': { # 1280x720, 1280x800, 640x400 (启用分箱) 'resolution_h': 800, # possible - 400, 720, 800 'fps': 30, }, }, 'app': { 'sync_video_meta_streams': False, # 同步“ previewout”和“ metaout”流 'sync_sequence_numbers' : False, # 同步所有数据包的序列号。 实验性 'usb_chunk_KiB' : 64, # 设备上的 USB 传输块。 更高(高达兆字节)可以提高吞吐量,或者为 0 则禁用分块 }, #'video_config': #{ # 'rateCtrlMode': 'cbr', # 选件: cbr / vbr # 'profile': 'h265_main', # 选件: 'h264_baseline' / 'h264_main' / 'h264_high' / 'h265_main / 'mjpeg' ' # 'bitrate': 8000000, # 使用 CBR 时(仅限 H264 / H265) # 'maxBitrate': 8000000, # 使用 CBR 时(仅限 H264 / H265) # 'keyframeFrequency': 30, (H264/H265 only) # 'numBFrames': 0, (H264/H265 only) # 'quality': 80 # (0-100%)使用 VBR 或 MJPEG 配置文件时 #} #'video_config': #{ # 'profile': 'mjpeg', # 'quality': 95 #} }
- get_available_streams() List[str]
返回 DepthAI 库支持的所有流的列表。
>>> device.get_available_streams() ['meta_d2h', 'color', 'left', 'right', 'rectified_left', 'rectified_right', 'disparity', 'depth', 'metaout', 'previewout', 'jpegout', 'video', 'object_tracker']
- get_nn_to_depth_bbox_mapping() dict
返回允许将 CNN 输出与视差信息匹配的字典。
由于 RGB 相机具有 4K 分辨率,并且神经网络仅接受具有特定分辨率的图像(例如 300x300),则原始图像会被裁剪以满足神经网络的要求。另一方面,由神经网络返回的视差帧在单声道相机上具有完整分辨率。
为了能够确定 CNN 预览图像在视差帧上的位置,应使用此方法指定要使用的偏移量和尺寸。
>>> device.get_nn_to_depth_bbox_mapping() {'max_h': 681, 'max_w': 681, 'off_x': 299, 'off_y': 59}
- request_af_mode()
将 4K RGB 相机自动对焦模式设置为可用的
AutofocusMode
之一。
- request_af_trigger()
在 4k RGB 相机上手动将触发操作发送到 AutoFocus
- request_jpeg()
从 RGB 相机捕获 JPEG 帧,并将其发送到:
jpegout
流。框架具有完整的可用分辨率,但未裁剪为符合 CNN 输入的尺寸。
- send_disparity_confidence_threshold(confidence: int)
发送用于 StereoSGBM 算法的视差置信度阈值的功能。如果视差值置信度低于阈值,则将该值标记为无效视差并当作背景。
- get_right_homography()
- get_left_homography()
- get_left_intrinsic()
- get_right_intrinsic()
- get_rotation()
- get_translation()
- class AutofocusMode
- Canonical
depthai.AutofocusMode
一个包含所有可用自动对焦模式的枚举
成员
- AF_MODE_AUTO
该模式将自动对焦设置为手动模式,您需要调用
Device.request_af_trigger()
来启动对焦程序。
- AF_MODE_CONTINUOUS_PICTURE
此模式连续调整焦点以提供最佳的对焦图像流,并且在拍摄时相机静止不动时应使用此模式。 对焦过程会以最快的速度完成。
这是 DepthAI 运行的默认模式。
- AF_MODE_CONTINUOUS_VIDEO
此模式不断调整焦距以提供最佳对焦图像流,应在相机尝试捕捉流畅的视频流时使用。 对焦程序较慢,可避免对焦过冲。
- AF_MODE_EDOF
该模式将禁用自动对焦。 EDOF 代表增强景深,是一种数字对焦。
- AF_MODE_MACRO
这和
AF_MODE_AUTO
的工作模式是一样的。
- class CNNPipeline
- Canonical
depthai.CNNPipeline
管道对象,设备可以用它向主机发送结果。
方法
- get_available_data_packets() List[depthai.DataPacket]
只返回设备本身产生的数据包,不含 CNN 结果
- class NNetPacket
- Canonical
depthai.NNetPacket
对于任何神经网络推理输出,都可以使用
NNPacket.get_tensor()
。 对于Mobilenet-SSD
的具体情况,可以在固件中进行YOLO-v3
解码。 解码后的对象除了原始输出外,还可以通过getDetectedObjects()
访问解码后的对象,以便轻松访问此常用网络的结果。 有关不同神经网络输出格式以及如何在这些格式之间进行选择的更多详细信息,请参见 blob 配置文件 。神经网络结果包。这不是单个结果,而是附加了其他元数据的一批结果
方法
- getMetadata() depthai.FrameMetadata
返回包含与此数据包相关的所有专有数据的元数据对象
- get_tensor(name: Union[int, str]) numpy.ndarray
Warning
只有在 blob 配置文件 中
output_format
被设置为raw
时才有效。根据神经网络的输出层信息,返回特定网络输出张量的形状 numpy 数组。
例如:在使用
Mobilenet-SSD
的情况下,它返回一个[1, 1, 100, 7]
形状的数组,其中numpy.dtype
是float16
。用法示例:
nnetpacket.get_tensor(0) # or nnetpacket.get_tensor('detection_out')
- __getitem__(name: Union[int, str]) numpy.ndarray
和
get_tensor()
相同Mobilenet-SSD
的使用实例:nnetpacket[0] # or nnetpacket['detection_out']
- getOutputLayersInfo() depthai.TensorInfo
返回网络的输出层信息。
- getInputLayersInfo() depthai.TensorInfo
返回网络的输入层信息。
- getDetectedObjects() depthai.Detections
Warning
当 blob 配置文件 中的
output_format
设置为detection
并使用检测网络 (以Mobilenet-SSD
,(tiny-)YOLO-v3
为基础的网络)时,可以使用。以
Detections
格式返回检测到的对象。在设备端对网络进行解码。
- class TensorInfo
- Canonical
depthai.TensorInfo
网络的输入/输出层、张量的描述符。
当网络加载时,会自动打印张量信息。
属性
- data_type: string
张量的数据类型。例如:
float16
方法
- class Detections
- Canonical
depthai.Detections
在设备端解码的神经网络结果的容器。
访问 detections 的示例
假设检测到的对象存储在
detections
对象中。detection 的数量
detections.size() # or len(detections)
访问第 n 个 detection
detections[0] detections[1] # ...
遍历所有 detection
for detection in detections:
- class Detection
- Canonical
depthai.Detection
检测到的对象描述符。
属性
方法
- class Dimension
- Canonical
depthai.TensorInfo.Dimension
张量形状的维度描述符。 由于并非所有神经网络模型都尊重输出张量的
维度
语义,因此对输入张量的意义最大。Values
- W / WIDTH
宽
- H / HEIGHT
高
- C / CHANNEL
通道数
- N / NUMBER
推断数
- B / BATCH
推断批次
- class DataPacket
- Canonical
depthai.DataPacket
DepthAI 数据包,包含设备上生成的信息。 与 NNetPacket 不同的是,它包含一个单一的 “结果 “和源流信息。
属性
Methods
- getData() numpy.ndarray
返回数据为 NumPy 数组,你可以使用 OpenCV
imshow
对其进行进一步转换或显示。用于返回帧的流,例如
previewout
,left
,right
, 或编码数据,例如video
,jpegout
.
- getMetadata() FrameMetadata
返回包含与此数据包相关的所有专有数据的元数据对象
- getObjectTracker() ObjectTracker
Warning
仅对来自
object_tracker
流的数据包有效。返回包含
ObjectTracker
对象的元数据对象。
- class FrameMetadata
- Canonical
depthai.FrameMetadata
附加在通过管道发送的数据包上的元数据对象
Methods
- class ObjectTracker
- Canonical
depthai.ObjectTracker
表示跟踪器当前状态的对象,通过对来自
object_tracker
流的数据包调用DataPacket.getObjectTracker()
方法获得方法
- getTracklet(tracklet_nr: int) Tracklet
返回具有指定
tracklet_nr
的 tracklet。 要检查有多少个 tracklet,请使用getNrTracklets()
方法
- class Tracklet
- Canonical
depthai.Tracklet
Tracklet 表示单个被跟踪的对象,由
ObjectTracker
类生成。 要获取它,请调用ObjectTracker.getTracklet()
方法。方法
有疑问?
我们很乐意为您提供代码或其他问题的帮助。
我们的联系方式
还可以通过我们发布的视频和文章了解OAK