Python 视频智能API-标记段时间

Python 视频智能API-标记段时间,python,google-cloud-platform,video-intelligence-api,Python,Google Cloud Platform,Video Intelligence Api,我正在学习标签检测教程 下面的代码执行以下操作(返回响应后) 我们的回复将在回复中包含结果, 它由注释结果列表组成,每个视频发送一个注释结果 在请求中。因为我们在请求中只发送了一个视频,所以我们 第一部分是结果的标注。然后我们循环通过 所有标签均采用分段标签表示法。为此目的 在本教程中,我们仅显示视频级别的注释。识别 视频级注释,我们从数据中提取片段标签注释 结果。每个线段标签注释都包含一个说明 (segment_label.description),实体类别列表 (类别\实体说明)以及它们在分

我正在学习标签检测教程

下面的代码执行以下操作(返回响应后)

我们的回复将在回复中包含结果, 它由注释结果列表组成,每个视频发送一个注释结果 在请求中。因为我们在请求中只发送了一个视频,所以我们 第一部分是结果的标注。然后我们循环通过 所有标签均采用分段标签表示法。为此目的 在本教程中,我们仅显示视频级别的注释。识别 视频级注释,我们从数据中提取片段标签注释 结果。每个线段标签注释都包含一个说明 (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返回所有标签的这些偏移量而不是 特定标签所在线段的开始和结束时间偏移 (实体)出现了吗?(我觉得这和 视频级别注释但我不确定)

  • 如何获取分段的开始和结束时间偏移 他们真的出现了吗

我看到您下面的教程部分使用了,而示例列表提供了一个示例,其中使用了视频智能API的更多功能

为了实现您想要的目标(有关于识别每个注释时的时间点的更详细信息),您可以探索两种可能性:

  • 选项1
这里的关键一点是,视频级别的注释只会重复使用。如我链接的本文档页面所述,如果未指定视频中的片段,API将把视频视为单个片段。因此,如果您希望API返回关于何时识别每个注释的更“具体”的结果,您应该自己将视频分割成段,方法是将其分割成不同的段(可以重叠,可能不需要完整的视频),并将这些参数作为中的
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为您的帮助和抱歉的延误:)没问题!我很高兴能帮上忙:)