安装和运行车辆分析(预览版)

车辆分析是一组功能,当与空间分析容器一起使用时,可以分析实时流式处理视频以了解车辆特征和位置。 在本文中,你将了解如何使用空间分析容器的功能来部署车辆分析操作。

先决条件

  • 要利用车辆分析操作,必须首先按照安装和运行空间分析容器步骤操作,包括配置主机、下载和配置 DeploymentManifest.json 文件、执行部署,以及设置设备日志记录
    • 配置 DeploymentManifest.json 文件时,请参阅以下步骤,在部署容器之前将用于车辆分析的图形配置添加到清单中。 也可以在空间分析容器启动并运行后,添加图形配置并按照步骤重新部署。 以下步骤将概述如何正确配置容器。
  • 如果没有 Azure 订阅,可在开始前创建一个试用帐户

提示

在部署空间分析模块之前,确保你正在使用的边缘设备至少有 50 GB 的可用磁盘空间。

车辆分析操作

与空间分析类似,车辆分析可以分析来自相机设备的实时流式处理视频。 对于配置的每个相机设备,车辆分析的操作会生成发送到 Azure IoT 中心实例的 JSON 消息输出流。

当前空间分析容器中提供了以下车辆分析操作。 车辆分析提供针对 GPU 和 CPU 优化的操作(CPU 操作包括 .cpu 区分)。

操作标识符 说明
cognitiveservices.vision.vehicleanalysis-vehiclecount-preview 和 cognitiveservices.vision.vehicleanalysis-vehiclecount.cpu-preview 计算停在摄像头视野中指定区域的车辆数目。
发出初始 vehicleCountEvent 事件,然后在计数发生更改时发出 vehicleCountEvent 事件
cognitiveservices.vision.vehicleanalysis-vehicleinpolygon-preview 和 cognitiveservices.vision.vehicleanalysis-vehicleinpolygon.cpu-preview 识别车辆何时停在摄像头视野中的指定停车区域。
当车辆停在停车位内时发出 vehicleInPolygonEvent 事件

除了显示车辆位置外,cognitiveservices.vision.vehicleanalysis-vehiclecount-preview、cognitiveservices.vision.vehicleanalysis-vehiclecount.cpu-preview、cognitiveservices.vision.vehicleanalysis-vehicleinpolygon-preview 和 cognitiveservices.vision.vehicleanalysis-vehicleinpolygon.cpu-preview 的其他估计属性包括车辆颜色和车辆类型。 这些属性的所有可能值都可以在输出部分(如下)中找到。

车辆分析的操作参数

下表显示每个车辆分析操作所需的参数。 许多参数与空间分析共享;唯一不共享的是 PARKING_REGIONS 设置。 空间分析操作参数的完整列表可以在空间分析容器指南中找到。

操作参数 说明
Operation ID 上表中的操作标识符。
enabled 布尔值:true 或 false
VIDEO_URL 相机设备的 RTSP URL(例如:rtsp://username:password@url)。 空间分析通过 RTSP、HTTP 或 MP4 支持 H.264 编码流。
VIDEO_SOURCE_ID 照相机设备或视频流的友好名称。 这会随事件 JSON 输出一起返回。
VIDEO_IS_LIVE 对于照相机设备为 true,对于录制的视频为 false。
VIDEO_DECODE_GPU_INDEX 用于指定哪个 GPU 将解码视频帧的索引。 其默认值为 0。 这应该与 VICA_NODE_CONFIGDETECTOR_NODE_CONFIG 等其他节点配置中的 gpu_index 相同。
PARKING_REGIONS 区域和线的 JSON 配置,如下所述。
PARKING_REGIONS 必须在归一化坐标 ([0, 1]) 中包含定义凸区域的四个点(这些点按顺时针或逆时针顺序排列)。
EVENT_OUTPUT_MODE 可以是 ON_INPUT_RATE 或 ON_CHANGE。 ON_INPUT_RATE 会在接收到的每一帧(一个 FPS)上生成一个输出。 ON_CHANGE 会在发生更改(车辆数量或停车位占用率)时生成输出。
PARKING_SPOT_METHOD 可以是 BOX 或 PROJECTION。 BOX 使用检测到的边界框和参考边界框之间的重叠。 PROJECTIONS 将中心点投影到在地面上绘制的停车位多边形中。 这仅用于停车位并且可以被抑制。

下面是有效 PARKING_REGIONS 配置的示例:

"{\"parking_slot1\": {\"type\": \"SingleSpot\", \"region\": [[0.20833333, 0.46203704], [0.3015625 , 0.66203704], [0.13229167, 0.7287037 ], [0.07395833, 0.51574074]]}}"

用于 cognitiveservices.vision.vehicleanalysis-vehiclecount-preview 和 cognitiveservices.vision.vehicleanalysis-vehiclecount.cpu-preview 的区域配置

下面是一个配置区域的 PARKING_REGIONS 参数的 JSON 输入示例。 你可以为此操作配置多个区域。

{
    "zone1": {
        type: "Queue",
        region: [(x1, y1), (x2, y2), (x3, y3), (x4, y4)]
    }
}
名称 Type 说明
zones dictionary 键是区域名称,值是包含类型和区域的字段。
name string 此区域的友好名称。
region list 每个值对表示多边形顶点的 x、y。 多边形表示跟踪或统计车辆数量的区域。 浮点值表示顶点相对于左上角的位置。 要计算 x、y 的绝对值,可以用这些值乘以帧大小。
type string 对于 cognitiveservices.vision.vehicleanalysis-vehiclecount,这应该是“队列”。

用于 cognitiveservices.vision.vehicleanalysis-vehicleinpolygon-preview 和 cognitiveservices.vision.vehicleanalysis-vehicleinpolygon.cpu-preview 的区域配置

下面是一个配置区域的 PARKING_REGIONS 参数的 JSON 输入示例。 你可以为此操作配置多个区域。

{
    "zone1": {
        type: "SingleSpot",
        region: [(x1, y1), (x2, y2), (x3, y3), (x4, y4)]
    }
}
名称 Type 说明
zones dictionary 键是区域名称,值是包含类型和区域的字段。
name string 此区域的友好名称。
region list 每个值对表示多边形顶点的 x、y。 多边形表示跟踪或统计车辆数量的区域。 浮点值表示顶点相对于左上角的位置。 要计算 x、y 的绝对值,可以用这些值乘以帧大小。
type string 对于 cognitiveservices.vision.vehicleanalysis-vehicleingpolygon-preview 和 cognitiveservices.vision.vehicleanalysis-vehicleingpolygon.cpu-preview,这应该是“SingleSpot”。

配置车辆分析操作

必须在 DeploymentManifest.json 文件中配置用于车辆分析的图形,以启用车辆分析操作。 下面是用于车辆分析的示例图。 可将这些 JSON 片段添加到“图形”配置部分中的部署清单中,配置视频流的参数,然后部署模块。 如果只打算利用车辆分析功能,可以将 DeploymentManifest.json 中的现有图形替换为车辆分析图。

下面是针对车辆计数操作优化的图形。

"vehiclecount": {
    "operationId": "cognitiveservices.vision.vehicleanalysis-vehiclecount-preview",
    "version": 1,
    "enabled": true,
    "parameters": {
        "VIDEO_URL": "<Replace RTSP URL here>",
        "VIDEO_SOURCE_ID": "vehiclecountgraph",
        "VIDEO_DECODE_GPU_INDEX": 0,
        "VIDEO_IS_LIVE":true,
        "PARKING_REGIONS": ""{\"1\": {\"type\": \"Queue\", \"region\": [[0.20833333, 0.46203704], [0.3015625 , 0.66203704], [0.13229167, 0.7287037 ], [0.07395833, 0.51574074]]}}"
    }
}

下面是针对多边形中的车辆操作而优化的图形,用于停车位中的车辆。

"vehicleinpolygon": {
    "operationId": "cognitiveservices.vision.vehicleanalysis-vehicleinpolygon-preview",
    "version": 1,
    "enabled": true,
    "parameters": {
        "VIDEO_URL": "<Replace RTSP URL here>",
        "VIDEO_SOURCE_ID": "vehcileinpolygon",
        "VIDEO_DECODE_GPU_INDEX": 0,
        "VIDEO_IS_LIVE":true,
        "PARKING_REGIONS": ""{\"1\": {\"type\": \"SingleSpot\", \"region\": [[0.20833333, 0.46203704], [0.3015625 , 0.66203704], [0.13229167, 0.7287037 ], [0.07395833, 0.51574074]]}}"
    }
}

示例 cognitiveservices.vision.vehicleanalysis-vehiclecount-preview 和 cognitiveservices.vision.vehicleanalysis-vehiclecount.cpu-preview 输出

下面的 JSON 演示了车辆计数操作图输出的示例。

{
    "events": [
        {
            "id": "95144671-15f7-3816-95cf-2b62f7ff078b",
            "type": "vehicleCountEvent",
            "detectionIds": [
                "249acdb1-65a0-4aa4-9403-319c39e94817",
                "200900c1-9248-4487-8fed-4b0c48c0b78d"
            ],
            "properties": {
                "@type": "type.googleapis.com/microsoft.rtcv.insights.VehicleCountEventMetadata",
                "detectionCount": 3
            },
            "zone": "1",
            "trigger": ""
        }
    ],
    "sourceInfo": {
        "id": "vehiclecountTest",
        "timestamp": "2022-09-21T19:31:05.558Z",
        "frameId": "4",
        "width": 0,
        "height": 0,
        "imagePath": ""
    },
    "detections": [
        {
            "type": "vehicle",
            "id": "200900c1-9248-4487-8fed-4b0c48c0b78d",
            "region": {
                "type": "RECTANGLE",
                "points": [
                    {
                        "x": 0.5962499976158142,
                        "y": 0.46250003576278687,
                        "visible": false,
                        "label": ""
                    },
                    {
                        "x": 0.7544531226158142,
                        "y": 0.64000004529953,
                        "visible": false,
                        "label": ""
                    }
                ],
                "name": "",
                "normalizationType": "UNSPECIFIED_NORMALIZATION"
            },
            "confidence": 0.9934938549995422,
            "attributes": [
                {
                    "task": "VehicleType",
                    "label": "Bicycle",
                    "confidence": 0.00012480001896619797
                },
                {
                    "task": "VehicleType",
                    "label": "Bus",
                    "confidence": 1.4998147889855318e-05
                },
                {
                    "task": "VehicleType",
                    "label": "Car",
                    "confidence": 0.9200984239578247
                },
                {
                    "task": "VehicleType",
                    "label": "Motorcycle",
                    "confidence": 0.0058081308379769325
                },
                {
                    "task": "VehicleType",
                    "label": "Pickup_Truck",
                    "confidence": 0.0001521655503893271
                },
                {
                    "task": "VehicleType",
                    "label": "SUV",
                    "confidence": 0.04790870100259781
                },
                {
                    "task": "VehicleType",
                    "label": "Truck",
                    "confidence": 1.346438511973247e-05
                },
                {
                    "task": "VehicleType",
                    "label": "Van/Minivan",
                    "confidence": 0.02388562448322773
                },
                {
                    "task": "VehicleType",
                    "label": "type_other",
                    "confidence": 0.0019937530159950256
                },
                {
                    "task": "VehicleColor",
                    "label": "Black",
                    "confidence": 0.49258527159690857
                },
                {
                    "task": "VehicleColor",
                    "label": "Blue",
                    "confidence": 0.47634875774383545
                },
                {
                    "task": "VehicleColor",
                    "label": "Brown/Beige",
                    "confidence": 0.007451261859387159
                },
                {
                    "task": "VehicleColor",
                    "label": "Green",
                    "confidence": 0.0002614705008454621
                },
                {
                    "task": "VehicleColor",
                    "label": "Grey",
                    "confidence": 0.0005819533253088593
                },
                {
                    "task": "VehicleColor",
                    "label": "Red",
                    "confidence": 0.0026496786158531904
                },
                {
                    "task": "VehicleColor",
                    "label": "Silver",
                    "confidence": 0.012039118446409702
                },
                {
                    "task": "VehicleColor",
                    "label": "White",
                    "confidence": 0.007863214239478111
                },
                {
                    "task": "VehicleColor",
                    "label": "Yellow/Gold",
                    "confidence": 4.345366687630303e-05
                },
                {
                    "task": "VehicleColor",
                    "label": "color_other",
                    "confidence": 0.0001758455764502287
                }
            ],
            "metadata": {
                "tracking_id": ""
            }
        },
        {
            "type": "vehicle",
            "id": "249acdb1-65a0-4aa4-9403-319c39e94817",
            "region": {
                "type": "RECTANGLE",
                "points": [
                    {
                        "x": 0.44859376549720764,
                        "y": 0.5375000238418579,
                        "visible": false,
                        "label": ""
                    },
                    {
                        "x": 0.6053906679153442,
                        "y": 0.7537500262260437,
                        "visible": false,
                        "label": ""
                    }
                ],
                "name": "",
                "normalizationType": "UNSPECIFIED_NORMALIZATION"
            },
            "confidence": 0.9893689751625061,
            "attributes": [
                {
                    "task": "VehicleType",
                    "label": "Bicycle",
                    "confidence": 0.0003215899341739714
                },
                {
                    "task": "VehicleType",
                    "label": "Bus",
                    "confidence": 3.258735432609683e-06
                },
                {
                    "task": "VehicleType",
                    "label": "Car",
                    "confidence": 0.825579047203064
                },
                {
                    "task": "VehicleType",
                    "label": "Motorcycle",
                    "confidence": 0.14065399765968323
                },
                {
                    "task": "VehicleType",
                    "label": "Pickup_Truck",
                    "confidence": 0.00044341650209389627
                },
                {
                    "task": "VehicleType",
                    "label": "SUV",
                    "confidence": 0.02949284389615059
                },
                {
                    "task": "VehicleType",
                    "label": "Truck",
                    "confidence": 1.625348158995621e-05
                },
                {
                    "task": "VehicleType",
                    "label": "Van/Minivan",
                    "confidence": 0.003406822681427002
                },
                {
                    "task": "VehicleType",
                    "label": "type_other",
                    "confidence": 8.27941985335201e-05
                },
                {
                    "task": "VehicleColor",
                    "label": "Black",
                    "confidence": 2.028317430813331e-05
                },
                {
                    "task": "VehicleColor",
                    "label": "Blue",
                    "confidence": 0.00022600525699090213
                },
                {
                    "task": "VehicleColor",
                    "label": "Brown/Beige",
                    "confidence": 3.327144668219262e-06
                },
                {
                    "task": "VehicleColor",
                    "label": "Green",
                    "confidence": 5.160827640793286e-05
                },
                {
                    "task": "VehicleColor",
                    "label": "Grey",
                    "confidence": 5.614096517092548e-05
                },
                {
                    "task": "VehicleColor",
                    "label": "Red",
                    "confidence": 1.0396311012073056e-07
                },
                {
                    "task": "VehicleColor",
                    "label": "Silver",
                    "confidence": 0.9996315240859985
                },
                {
                    "task": "VehicleColor",
                    "label": "White",
                    "confidence": 1.0256461791868787e-05
                },
                {
                    "task": "VehicleColor",
                    "label": "Yellow/Gold",
                    "confidence": 1.8006812751991674e-07
                },
                {
                    "task": "VehicleColor",
                    "label": "color_other",
                    "confidence": 5.103976263853838e-07
                }
            ],
            "metadata": {
                "tracking_id": ""
            }
        }
    ],
    "schemaVersion": "2.0"
}
事件字段名称 类型 说明
id string 事件 ID
type string 事件类型
detectionsId array 触发了此事件的车辆检测的唯一标识符数组
properties collection 值集合 [detectionCount]
zone string 多边形的“名称”字段,多边形代表已越过区域
trigger string 未使用
检测字段名称 类型 说明
id string 检测 ID
type string 检测类型
region collection 值的集合
type string 区域类型
points collection 当区域类型为矩形时,表示左上角和右下角的点
confidence FLOAT 算法置信度
属性 类型 说明
VehicleType FLOAT 检测到的车辆类型。 可能的检测包括 VehicleType_Bicycle、VehicleType_Bus、VehicleType_Car、VehicleType_Motorcycle、VehicleType_Pickup_Truck、VehicleType_SUV、VehicleType_Truck、VehicleType_Van/Minivan、VehicleType_type_other
VehicleColor float 检测到的车辆颜色。 可能的检测包括 VehicleColor_Black、VehicleColor_Blue、VehicleColor_Brown/Beige、VehicleColor_Green、VehicleColor_Grey、VehicleColor_Red、VehicleColor_Silver、VehicleColor_White、VehicleColor_Yellow/Gold、VehicleColor_color_other
confidence float 算法置信度
SourceInfo 字段名称 类型 说明
id string 相机 ID
timestamp date 以 YYYY-MM-DDTHH:MM:SS.ssZ 格式发出 JSON 有效负载时的 UTC 日期
width int 视频帧宽度
height int 视频帧高度
frameId int 帧标识符

示例 cognitiveservices.vision.vehicleanalysis-vehicleinpolygon-preview 和 cognitiveservices.vision.vehicleanalysis-vehicleinpolygon.cpu-preview 输出

下面的 JSON 演示了多边形操作图输出中的车辆示例。

{
    "events": [
        {
            "id": "1b812a6c-1fa3-3827-9769-7773aeae733f",
            "type": "vehicleInPolygonEvent",
            "detectionIds": [
                "de4256ea-8b38-4883-9394-bdbfbfa5bd41"
            ],
            "properties": {
                "@type": "type.googleapis.com/microsoft.rtcv.insights.VehicleInPolygonEventMetadata",
                "status": "PARKED"
            },
            "zone": "1",
            "trigger": ""
        }
    ],
    "sourceInfo": {
        "id": "vehicleInPolygonTest",
        "timestamp": "2022-09-21T20:36:47.737Z",
        "frameId": "3",
        "width": 0,
        "height": 0,
        "imagePath": ""
    },
    "detections": [
        {
            "type": "vehicle",
            "id": "de4256ea-8b38-4883-9394-bdbfbfa5bd41",
            "region": {
                "type": "RECTANGLE",
                "points": [
                    {
                        "x": 0.18703125417232513,
                        "y": 0.32875001430511475,
                        "visible": false,
                        "label": ""
                    },
                    {
                        "x": 0.2650781273841858,
                        "y": 0.42500001192092896,
                        "visible": false,
                        "label": ""
                    }
                ],
                "name": "",
                "normalizationType": "UNSPECIFIED_NORMALIZATION"
            },
            "confidence": 0.9583820700645447,
            "attributes": [
                {
                    "task": "VehicleType",
                    "label": "Bicycle",
                    "confidence": 0.0005135730025358498
                },
                {
                    "task": "VehicleType",
                    "label": "Bus",
                    "confidence": 2.502854385966202e-07
                },
                {
                    "task": "VehicleType",
                    "label": "Car",
                    "confidence": 0.9575894474983215
                },
                {
                    "task": "VehicleType",
                    "label": "Motorcycle",
                    "confidence": 0.03809007629752159
                },
                {
                    "task": "VehicleType",
                    "label": "Pickup_Truck",
                    "confidence": 6.314369238680229e-05
                },
                {
                    "task": "VehicleType",
                    "label": "SUV",
                    "confidence": 0.003204471431672573
                },
                {
                    "task": "VehicleType",
                    "label": "Truck",
                    "confidence": 4.916510079056025e-07
                },
                {
                    "task": "VehicleType",
                    "label": "Van/Minivan",
                    "confidence": 0.00029918691143393517
                },
                {
                    "task": "VehicleType",
                    "label": "type_other",
                    "confidence": 0.00023934587079565972
                },
                {
                    "task": "VehicleColor",
                    "label": "Black",
                    "confidence": 0.7501943111419678
                },
                {
                    "task": "VehicleColor",
                    "label": "Blue",
                    "confidence": 0.02153826877474785
                },
                {
                    "task": "VehicleColor",
                    "label": "Brown/Beige",
                    "confidence": 0.0013857109006494284
                },
                {
                    "task": "VehicleColor",
                    "label": "Green",
                    "confidence": 0.0006621106876991689
                },
                {
                    "task": "VehicleColor",
                    "label": "Grey",
                    "confidence": 0.007349356077611446
                },
                {
                    "task": "VehicleColor",
                    "label": "Red",
                    "confidence": 0.1460476964712143
                },
                {
                    "task": "VehicleColor",
                    "label": "Silver",
                    "confidence": 0.015320491977036
                },
                {
                    "task": "VehicleColor",
                    "label": "White",
                    "confidence": 0.053948428481817245
                },
                {
                    "task": "VehicleColor",
                    "label": "Yellow/Gold",
                    "confidence": 0.0030805091373622417
                },
                {
                    "task": "VehicleColor",
                    "label": "color_other",
                    "confidence": 0.0004731453664135188
                }
            ],
            "metadata": {
                "tracking_id": ""
            }
        }
    ],
    "schemaVersion": "2.0"
}
事件字段名称 类型 说明
id string 事件 ID
type string 事件类型
detectionsId array 触发了此事件的车辆检测的唯一标识符数组
properties collection 值状态集合 [PARKED/EXITED]
zone string 多边形的“名称”字段,多边形代表已越过区域
trigger string 未使用
检测字段名称 类型 说明
id string 检测 ID
type string 检测类型
region collection 值的集合
type string 区域类型
points collection 当区域类型为矩形时,表示左上角和右下角的点
confidence FLOAT 算法置信度
属性 类型 说明
VehicleType FLOAT 检测到的车辆类型。 可能的检测包括 VehicleType_Bicycle、VehicleType_Bus、VehicleType_Car、VehicleType_Motorcycle、VehicleType_Pickup_Truck、VehicleType_SUV、VehicleType_Truck、VehicleType_Van/Minivan、VehicleType_type_other
VehicleColor float 检测到的车辆颜色。 可能的检测包括 VehicleColor_Black、VehicleColor_Blue、VehicleColor_Brown/Beige、VehicleColor_Green、VehicleColor_Grey、VehicleColor_Red、VehicleColor_Silver、VehicleColor_White、VehicleColor_Yellow/Gold、VehicleColor_color_other
confidence float 算法置信度
SourceInfo 字段名称 类型 说明
id string 相机 ID
timestamp date 以 YYYY-MM-DDTHH:MM:SS.ssZ 格式发出 JSON 有效负载时的 UTC 日期
width int 视频帧宽度
height int 视频帧高度
frameId int 帧标识符

用于车辆分析的区域和停车线配置

有关将区域放置在何处以进行车辆分析的指导,可以参阅空间分析的区域和停车线位置指南。 如果已在要分析的区域中定义停车位,则为车辆分析配置区域可能比为空间分析配置区域更简单。

用于车辆分析的摄像头放置

有关将摄像头放置在何处以及如何放置以进行车辆分析的指导,请参阅空间分析文档中的相机放置指南。 其他需要考虑的限制还包括安装在停车场空间中的摄像头的高度。 当分析车辆模式时,较高的有利位置是理想的选择,确保摄像头的视野足够广阔,能够容纳一辆或多辆车辆,具体取决于你的场景。

计费

车辆分析容器使用 Azure 帐户中的视觉资源向 Azure 发送账单信息。 车辆分析公共预览版目前供免费使用。

Azure AI 容器在未连接到计量/计费终结点的情况下无权运行。 必须始终让容器可以向计费终结点传送计费信息。 Azure AI 容器不会将客户数据(例如正在分析的视频或图像)发送给 Microsoft。

后续步骤