Python 视频智能API-标记段时间
我正在学习标签检测教程 下面的代码执行以下操作(返回响应后) 我们的回复将在回复中包含结果, 它由注释结果列表组成,每个视频发送一个注释结果 在请求中。因为我们在请求中只发送了一个视频,所以我们 第一部分是结果的标注。然后我们循环通过 所有标签均采用分段标签表示法。为此目的 在本教程中,我们仅显示视频级别的注释。识别 视频级注释,我们从数据中提取片段标签注释 结果。每个线段标签注释都包含一个说明 (segment_label.description),实体类别列表 (类别\实体说明)以及它们在分段中的位置 从视频开始的开始和结束时间偏移Python 视频智能API-标记段时间,python,google-cloud-platform,video-intelligence-api,Python,Google Cloud Platform,Video Intelligence Api,我正在学习标签检测教程 下面的代码执行以下操作(返回响应后) 我们的回复将在回复中包含结果, 它由注释结果列表组成,每个视频发送一个注释结果 在请求中。因为我们在请求中只发送了一个视频,所以我们 第一部分是结果的标注。然后我们循环通过 所有标签均采用分段标签表示法。为此目的 在本教程中,我们仅显示视频级别的注释。识别 视频级注释,我们从数据中提取片段标签注释 结果。每个线段标签注释都包含一个说明 (segment_label.description),实体类别列表 (类别\实体说明)以及它们在分
$ 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
...
因此,它说“每个片段标签注释包括一个描述(片段标签描述)、一个实体类别列表(类别实体描述)和它们在片段中出现的位置(从视频开始到结束的时间偏移量)。”
但是,在输出中,所有标签市区
,交通
,车辆
。。具有相同的开始和结束时间偏移量
,基本上是视频的开始和结束
$ 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返回所有标签的这些偏移量而不是 特定标签所在线段的开始和结束时间偏移 (实体)出现了吗?(我觉得这和 视频级别注释但我不确定)
- 如何获取分段的开始和结束时间偏移 他们真的出现了吗
- 选项1
videoContext
字段的一部分传递
如果通过API请求执行这些操作,则可以通过指定开始和结束时间偏移来执行以下请求,定义所需的任意多个段:
{
"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\u 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)
- 选项2
SHOT_模式
,它只提供视频级别和快照级别注释,这要求您按照选项1中的说明处理片段。如果改为使用帧\ u模式
,将处理帧级注释。这是一个昂贵的选项,因为它分析视频中的所有帧并对每个帧进行注释,但根据您的特定用例,它可能是一个合适的选项。这个模式(实际上是SHOT_和_FRAME_模式
one,它是前两种模式的组合)在我在回答开头提到的更完整的示例中使用。提供了一个关于如何执行视频/快照/帧级注释的完整示例,特别是关于如何在注释发生时获取有关帧的信息的说明
请注意,正如我前面所解释的,此选项的成本非常高,例如,我为教程中提供的“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;医生:
您将按照教程中的简单示例进行调用,并返回调用类型返回的结果。如果没有特定的配置,则视频将被视为单个片段,原因是您得到的响应标识了整个视频中的注释
如果您想获得有关何时识别元素的更多详细信息,则需要遵循以下两种方法之一:(1)在视频中定义片段(这要求您手动指定要分割视频的片段),或(2)使用
帧模式
(这是更昂贵和更精确的方式)。thnx为您的帮助和抱歉的延误:)没问题!我很高兴能帮上忙:)