我正在关注这个 标签检测教程。
下面的代码执行以下操作(在获得响应后)
我们的响应将包含 AnnotateVideoResponse 中的结果,该结果由一个 annotationResults 列表组成,一个用于请求中发送的每个视频。因为我们在请求中只发送了一个视频,所以我们取结果的第一个 segmentLabelAnnotations。然后我们遍历 segmentLabelAnnotations 中的所有标签。出于本教程的目的,我们仅显示视频级别的注释。为了识别视频级注释,我们从结果中提取 segment_label_annotations 数据。每个片段标签注释包括描述 (segment_label.description)、实体类别列表 (category_entity.description) 以及它们在片段中出现的位置,按从视频开头的开始和结束时间偏移量计算。
segment_labels = result.annotation_results[0].segment_label_annotations
for i, segment_label in enumerate(segment_labels):
print('Video label description: {}'.format(
segment_label.entity.description))
for category_entity in segment_label.category_entities:
print('\tLabel category description: {}'.format(
category_entity.description))
for i, segment in enumerate(segment_label.segments):
start_time = (segment.segment.start_time_offset.seconds +
segment.segment.start_time_offset.nanos / 1e9)
end_time = (segment.segment.end_time_offset.seconds +
segment.segment.end_time_offset.nanos / 1e9)
positions = '{}s to {}s'.format(start_time, end_time)
confidence = segment.confidence
print('\tSegment {}: {}'.format(i, positions))
print('\tConfidence: {}'.format(confidence))
print('\n')
因此,它说“每个片段标签注释都包括一个描述 (segment_label.description)、一个实体类别列表 (category_entity.description) 以及它们在片段中出现的位置,按从视频开始的开始和结束时间偏移量计算。”
但是,在输出中,所有标签urban area
, traffic
, vehicle
.. 都相同start and end time offsets
,基本上是视频的开始和结束。
$ python label_det.py gs://cloud-ml-sandbox/video/chicago.mp4
Operation us-west1.4757250774497581229 started: 2017-01-30T01:46:30.158989Z
Operation processing ...
The video has been successfully processed.
Video label description: urban area
Label category description: city
Segment 0: 0.0s to 38.752016s
Confidence: 0.946980476379
Video label description: traffic
Segment 0: 0.0s to 38.752016s
Confidence: 0.94105899334
Video label description: vehicle
Segment 0: 0.0s to 38.752016s
Confidence: 0.919958174229
...
为什么会这样?
为什么 API 返回所有标签的这些偏移量,而不是该特定标签(实体)出现的片段的开始和结束时间偏移量?(我觉得它与 视频级注释有关,但我不是当然)
- 如何获得它们实际出现的段的开始和结束时间偏移?