我正在遵循这 标签检测教程。
下面的代码执行以下操作(在获得响应后)
我们的响应将在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
...发布于 2018-04-13 11:29:03
我看到教程中您所关注的部分使用了最简单的例子,而示例列表提供了一个使用视频智能API更多特性的更完整的例子。
为了实现您想要的目标(了解确定每个注释时的时间瞬间的更详细信息),您可以探索两种可能性:
这里的关键是视频级注释只在细分市场上工作。正如我链接的这个文档页面中所解释的,如果没有指定视频中的片段,API将把视频作为一个单独的片段来处理。因此,如果您希望API返回关于每个注释何时标识的更“特定”的结果,您应该自己将视频分割成不同的片段(可以重叠,可能不需要完整的视频),并将这些参数作为videoContext字段的一部分在注释请求中传递。
如果通过API请求执行这些操作,则可以通过指定开始和结束TimeOffsets来执行如下请求,定义任意数量的段:
{
"inputUri": "gs://cloud-ml-sandbox/video/chicago.mp4",
"features": [
"LABEL_DETECTION"
],
"videoContext": {
"segments": [
{
"startTimeOffset": "TO_DO",
"endTimeOffset": "TO_DO"
}
{
"startTimeOffset": "TO_DO",
"endTimeOffset": "TO_DO"
}
]
}
}如果您愿意使用Python,则可以使用video_context参数,如下所示:
video_client = videointelligence.VideoIntelligenceServiceClient()
features = [videointelligence.enums.Feature.LABEL_DETECTION]
mode = videointelligence.enums.LabelDetectionMode.SHOT_AND_FRAME_MODE
config = videointelligence.types.LabelDetectionConfig(label_detection_mode=mode)
context = videointelligence.types.VideoContext(label_detection_config=config)
operation = video_client.annotate_video("gs://cloud-ml-sandbox/video/chicago.mp4", features=features, video_context=context)我为您的用例提出的第二个选项是使用不同的标签检测模式。可用标签检测模式的列表可在此文档链接中使用。默认情况下,使用的是SHOT_MODE,它只提供视频级和镜头级注释,这要求您使用选项1中所解释的片段。如果您使用FRAME_MODE,则将处理帧级注释。这是一个昂贵的选择,因为它分析了视频中的所有帧并对每个帧进行注释,但根据具体的用例,它可能是一个合适的选项。这个模式(实际上是SHOT_AND_FRAME_MODE 1,它是前面两种模式的组合)在我回答的开头提到的更完整的例子中使用。函数在该代码中。提供了一个关于如何执行视频/镜头/帧级注释的真正完整的示例,特别是对于帧级注释,有一个关于在注释发生时如何获取有关帧的信息的解释。
请注意,正如我前面解释的那样,这个选项非常昂贵,例如,我已经为教程中提供的"chicago.mp4“视频运行了它,它花了大约30分钟才完成。但是,所实现的细节级别非常高(同样,分析每个帧,然后按元素对注释进行分组),这是您可以期望得到的响应类型:
"frameLabelAnnotations": [
{
"entity": {
"entityId": "/m/088l6h",
"description": "family car",
"languageCode": "en-US"
},
"categoryEntities": [
{
"entityId": "/m/0k4j",
"description": "car",
"languageCode": "en-US"
}
],
"frames": [
{
"timeOffset": "0.570808s",
"confidence": 0.76606256
},
{
"timeOffset": "1.381775s",
"confidence": 0.74966145
},
{
"timeOffset": "2.468091s",
"confidence": 0.85502887
},
{
"timeOffset": "3.426006s",
"confidence": 0.78749716
},
]
},TL;DR:
您按照本教程中的简单示例进行的调用类型返回的结果是预期的。如果没有特定的配置,视频将被视为单个片段,您所得到的响应将识别整个视频中的注释。
如果您想获得有关何时标识元素的更多详细信息,则需要遵循以下两种方法中的一种:(1)在视频中定义段(这需要手动指定要分割视频的段),或者(2) use FRAME_MODE (这是成本更高、更精确的方法)。
https://stackoverflow.com/questions/49806443
复制相似问题