YoloSpatialDetectionNetwork
如何放置
Python
Python
1pipeline = dai.Pipeline()
2yoloSpatial = pipeline.create(dai.node.YoloSpatialDetectionNetwork)输入与输出
配置空间检测

检测网络负责在输入帧中检测物体。它输出检测到的物体列表,每个物体由一个边界框、标签和置信度分数表示。
深度图与输入帧对齐。这是必要的,因为DetectionNetwork在输入帧上操作,而SpatialLocationCalculator在深度图上操作。
来自网络的边界框被发送到SpatialLocationCalculator,并根据
BoundingBoxScaleFactor进行缩放。这样做是为了确保它包含整个物体。然后,边界框与深度一起用于计算物体的空间坐标。- X和Y坐标取自边界框中心。它们基于与帧中心的偏移以及该点的深度计算。
- 对于深度(Z),考虑缩放边界框(ROI)内的每个像素。这给我 们一组深度值,然后取平均值以获得最终深度值。
平均方法
- 平均值/均值:使用ROI的平均值进行计算。
- 最小值:使用ROI内的最小值进行计算。
- 最大值:使用ROI内的最大值进行计算。
- 众数:使用ROI内最频繁的值进行计算。
- 中位数:使用ROI内的中位数值进行计算。
常见错误
- 薄物体(如杆)的空间坐标可能不准确,因为 边界框中只有一小部分实际位于检测到的物体上。在这种情况下,最好尽可能使用较小的
BoundingBoxScaleFactor。 - 带孔的物体——圈、环等。为了获得正确的深度,边界框应包含整个物体。不使用中位数深度,而是使用最小值深度方法以排除背景。或者,可以设置深度阈值以在静态环境中忽略背景。

用法
Python
Python
1pipeline = dai.Pipeline()
2yoloSpatial = pipeline.create(dai.node.YoloSpatialDetectionNetwork)
3yoloSpatial.setBlobPath(nnBlobPath)
4
5# 空间检测特定参数
6yoloSpatial.setConfidenceThreshold(0.5)
7yoloSpatial.input.setBlocking(False)
8yoloSpatial.setBoundingBoxScaleFactor(0.5)
9yoloSpatial.setDepthLowerThreshold(100) # 最小10厘米
10yoloSpatial.setDepthUpperThreshold(5000) # 最大5米
11
12# Yolo特定参数
13yoloSpatial.setNumClasses(80)
14yoloSpatial.setCoordinateSize(4)
15yoloSpatial.setAnchors([10,14, 23,27, 37,58, 81,82, 135,169, 344,319])
16yoloSpatial.setAnchorMasks({ "side26": [1,2,3], "side13": [3,4,5] })
17yoloSpatial.setIouThreshold(0.5)功能示例
空间坐标系
参考
class
depthai.node.YoloSpatialDetectionNetwork(depthai.node.SpatialDetectionNetwork)
method
method
getAnchors(self) -> list[float]: list[float]Get anchors
method
getCoordinateSize(self) -> int: intGet coordianate size
method
getIouThreshold(self) -> float: floatGet Iou threshold
method
getNumClasses(self) -> int: intGet num classes
method
setAnchorMasks(self, anchorMasks: collections.abc.Mapping
[
str
,
collections.abc.Sequence
[
typing.SupportsInt
]
])Set anchor masks
method
method
setCoordinateSize(self, coordinates: typing.SupportsInt)Set coordianate size
method
setIouThreshold(self, thresh: typing.SupportsFloat)Set Iou threshold
method
setNumClasses(self, numClasses: typing.SupportsInt)Set num classes
需要帮助?
请前往 OAKChina 官网 获取技术支持或解答您的任何疑问。