人员和车辆数量分析指南

控制台中的乘车情况分析模型卡片

借助客流量分析模型,您可以根据在视频帧中添加的特定输入来统计人数或车辆数量。与人员车辆检测器模型相比,占用情况分析模型提供了高级功能。这些功能包括活跃区间计数、线条穿越计数和逗留检测。

  • 借助活跃区域,用户可以在特定的用户定义区域内统计人员或车辆。
  • 线条穿越功能可用于统计对象穿越特定线条的方向。
  • 逗留时间检测基于活跃区域,可检测对象是否在某个区域内停留了最短时间。

该模型接受视频流作为输入,并输出包含每个帧中检测到的人和车辆数量的协议缓冲区。该模型的运行速度为 6 FPS。

使用场景:智能城市交通分析

以下视频展示了如何使用 Vertex AI Vision 创建、构建和部署入住人数分析应用。

此应用使用模型统计用户在 Google Cloud 控制台中指定的十字路口中越线的汽车数量。此外,该应用还使用人脸模糊处理模型来保护视频动态来源中出现的任何人的身份。

该应用会将分析后的数据发送到 Vertex AI Vision 的媒体仓库以进行媒体存储,还会将结构化数据发送到 BigQuery 以便在表中存储。借助该仓库,您可以按模型中的条件(例如车辆或人员数量)搜索存储的数据。借助 BigQuery 中的表数据,您可以查询数据以获取分析信息。

模型输出

“人员和车辆检测”摘要卡会显示当前已处理的帧中检测到的人员和车辆的数量。计数类型取决于用户提供的注释输入。输出中还包含原始检测和跟踪结果。 以下是处理器输出的 protocol buffer 定义。输出流的频率恒定:每秒 3 帧。

// The prediction result proto for Person/Vehicle Detection.
message OccupancyCountingPredictionResult {

 // Current timestamp.
 google.protobuf.Timestamp current_time = 1;

 // The entity info for annotations from the processor.
 message Entity {
   // Label id.
   int64 label_id = 1;
   // Human readable string of the label.
   string label_string = 2;
 }

 // Identified box contains location and the entity of the object.
 message IdentifiedBox {
   // An unique id for this box.
   int64 box_id = 1;
   // Bounding Box in the normalized coordinates.
   message NormalizedBoundingBox {
     // Min in x coordinate.
     float xmin = 1;
     // Min in y coordinate.
     float ymin = 2;
     // Width of the bounding box.
     float width = 3;
     // Height of the bounding box.
     float height = 4;
   }

   // Bounding Box in the normalized coordinates.
   NormalizedBoundingBox normalized_bounding_box = 2;

   // Confidence score associated with this box.
   float score = 3;

   // Entity of this box.
   Entity entity = 4;

   // A unique id to identify a track. It must be consistent across frames.
   // It only exists if tracking is enabled.
   int64 track_id = 5;
 }

 // A list of identified boxes.
 repeated IdentifiedBox identified_boxes = 2;

 // The statistics info for annotations from the processor.
 message Stats {
   // The object info and count for annotations from the processor.
   message ObjectCount {
     // Entity of this object.
     Entity entity = 1;
     // Count of the object.
     int32 count = 2;
   }

   // Counts of the full frame.
   repeated ObjectCount full_frame_count = 1;

   // Message for Crossing line count.
   message CrossingLineCount {
     // Line annotation from the user.
     StreamAnnotation annotation = 1;
     // The direction that follows the right hand rule.
     repeated ObjectCount positive_direction_counts = 2;
     // The direction that is opposite to the right hand rule.
     repeated ObjectCount negative_direction_counts = 3;
   }

   // Crossing line counts.
   repeated CrossingLineCount crossing_line_counts = 2;

   // Message for the active zone count.
   message ActiveZoneCount {
     // Active zone annotation from the user.
     StreamAnnotation annotation = 1;
     // Counts in the zone.
     repeated ObjectCount counts = 2;
   }

   // Active zone counts.
   repeated ActiveZoneCount active_zone_counts = 3;
 }

 // Detection statistics.
 Stats stats = 3;

 // The track info for annotations from the processor.
 message TrackInfo {
   // A unique id to identify a track. It must be consistent across frames.
   string track_id = 1;
   // Start timestamp of this track.
   google.protobuf.Timestamp start_time = 2;
 }

 // The dwell time info for annotations from the processor.
 message DwellTimeInfo {
   // A unique id to identify a track. It must be consistent across frames.
   string track_id = 1;
   // The unique id for the zone in which the object is dwelling/waiting.
   string zone_id = 2;
   // The beginning time when a dwelling object has been identified in a zone.
   google.protobuf.Timestamp dwell_start_time = 3;
   // The end time when a dwelling object has exited in a zone.
   google.protobuf.Timestamp dwell_end_time = 4;
 }

 // Track related information. All the tracks that are live at this timestamp.
 // It only exists if tracking is enabled.
 repeated TrackInfo track_info = 4;

 // Dwell time related information. All the tracks that are live in a given
 // zone with a start and end dwell time timestamp
 repeated DwellTimeInfo dwell_time_info = 5;
}

最佳做法和限制

  • 避免使用不寻常的摄像头视角(例如从上往下拍摄的视角),因为在这种视角下,人和车辆的显示效果与标准或常见视角下有所不同。异常观看可能会在很大程度上影响检测质量。
  • 确保人员和车辆完全或大部分都位于取景范围内。检测质量可能会受到其他对象的部分遮挡影响。
  • 人和车辆检测器具有最小可检测对象大小。此大小约为相机视图大小的 2%。确保目标人物和车辆距离摄像头不太远。这些关键对象的可见大小必须足够大。
  • 感兴趣的区域必须有适当的光线。
  • 确保视频源摄像头镜头干净。
  • 确保实体(人或车辆除外)不会遮挡摄像头视野的任何部分。
  • 以下因素可能会降低模型的性能。在获取数据时,请考虑以下因素:
    • 光线条件不佳。
    • 拥挤和物体遮挡。
    • 不常见或不太常见的视角。
    • 对象大小较小。