동영상 주석 추가

모델을 만들고 학습시킨 후 batchPredict 메소드를 사용하여 하나 이상의 동영상에 대한 예측을 요청할 수 있습니다. 동영상 목록이 포함된 CSV 파일을 batchPredict 메소드에 제공합니다. batchPredict 메소드는 모델에서 예측하는 객체를 감지하고 추적하여 동영상에 주석을 추가합니다.

커스텀 모델의 최대 수명은 2년입니다. 이 기간이 지난 후에도 계속 동영상에 주석을 추가하려면 새 모델을 만들고 학습시켜야 합니다.

curl 사용

이 항목의 curl 샘플을 더 편리하게 실행하려면 다음 환경 변수를 설정합니다. project-id를 GCP 프로젝트의 이름으로 바꿉니다.

export PROJECT_ID="project-id"

예측 예

AutoML Video Intelligence 객체 추적에서 일괄 예측을 요청하려면 주석을 추가하려는 동영상에 대한 Google Cloud Storage 경로를 나열하는 CSV 파일을 만드세요. 또한 시작 및 종료 시간을 지정하여 AutoML Video Intelligence 객체 추적이 동영상의 특정 세그먼트에만 주석을 추가하도록 할 수 있습니다. 시작 시간은 0 이상이고 종료 시간보다 이전이어야 합니다. 종료 시간은 시작 시간보다 커야 하고 동영상의 재생 시간보다 작거나 같아야 합니다. 예를 들면 다음과 같습니다.

gs://my-videos-vcm/cow_video_1.mp4,cow,1,271.000000,0.002540,0.012093,0.002540,0.968629,0.856650,0.968629,0.856650,0.012093

gs://my-videos-vcm/bird_video_1.mp4,bird,1,271.000000,0.022858,0.080321,0.022858,0.335844,0.107141,0.335844,0.107141,0.080321

gs://my-videos-vcm/bird_video_2.mp4,bird,1,271.000000,0.111656,0.041525,0.111656,0.317114,0.269685,0.317114,0.269685,0.041525

gs://my-videos-vcm/dog_video_1.mp4,dog,1,271.000000,0.281725,0.091024,0.281725,0.297047,0.387078,0.297047,0.387078,0.091024

gs://my-videos-vcm/dog_video_2.mp4,dog,1,271.000000,0.382563,0.092362,0.382563,0.337181,0.491678,0.337181,0.491678,0.092362

또한 AutoML Video Intelligence 객체 추적이 모델의 예측 결과를 기록할 출력 파일 경로를 지정해야 합니다. 이 경로는 본인에게 쓰기 권한이 있는 Google Cloud Storage 버킷 및 객체여야 합니다.

각 동영상의 최대 재생 시간은 3시간이며 최대 파일 크기는 50GB입니다. AutoML Video Intelligence 객체 추적은 12시간의 처리 시간 안에 약 100시간의 동영상에 대한 예측을 생성할 수 있습니다.

명령줄

다음 예는 동영상에 대한 예측을 요청합니다.

  • model-id를 모델의 ID로 바꿉니다. ID는 모델 이름의 마지막 요소입니다. 예를 들어 모델의 이름이 projects/<var>project-id</var>/locations/us-central1/models/VOT6312181905852727296이면 모델의 ID는 VOT6312181905852727296입니다.

  • your-bucket-name을 Google Cloud Storage 버킷의 이름으로 바꿉니다. 예: my-project-vcm.

  • your-input-file을 주석을 추가할 동영상을 식별하는 CSV 파일의 이름으로 바꿉니다.

  • your-output-storage-path를 예측 결과를 저장할 Google Cloud Storage 경로로 바꿉니다. AutoML Video Intelligence 객체 추적은 이 경로에 prediction-model_name-timestamp와 같은 형식으로 이름이 지정된 하위 폴더를 만듭니다. 이 하위 폴더에는 일괄 요청의 각 동영상에 대한 예측 파일이 포함됩니다. 본인에게 이 경로에 대한 쓰기 권한이 있어야 합니다.


curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/models/your-model-id:batchPredict -d '{
  "request_id": "your-request-id",
  "inputConfig": {
    "gcsSource": {
      "inputUris": ["gs://your-bucket-name/your-input-file.csv"]
    }
  },
  "outputConfig": {
    "gcsDestination": {
      "outputUriPrefix": "gs://your-storage-path"
    }
  }
}'

일괄 예측 요청의 작업 ID를 받아야 합니다. 예: VOT4994527171125968896. 다음 curl 명령어를 사용하여 일괄 예측 작업의 상태를 쿼리할 수 있습니다.

  • your-operation-id는 일괄 예측 작업의 작업 ID로 바꿉니다.
curl -X GET -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://${ENDPOINT}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/operations/your-operation-id

작업이 진행 중일 경우 다음 예와 유사한 출력이 표시됩니다.

Example output:
{
  "name": "projects/965859579216/locations/us-central1/operations/VOT4994527171125968896",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2019-01-11T20:24:42.581578Z",
    "updateTime": "2019-01-11T20:24:42.581578Z",
    "batchPredictDetails": {
      "inputConfig": {
        "gcsSource": {
          "inputUris": [
            "gs://your-bucket-name/your-input-file.csv"
          ]
        }
      }
    }
  }
}

CSV 파일에서 지정한 동영상의 수에 따라 일괄 예측 작업을 완료하는 데 다소 시간이 걸릴 수 있습니다. 작업이 완료되면 다음 예에 나와 있는 것처럼 작업 상태에 done: true가 표시되고 오류가 나열되지 않습니다.

{
  "name": "projects/965859579216/locations/us-central1/operations/VOT6097909079831740416",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2019-01-11T21:39:19.832131Z",
    "updateTime": "2019-01-11T21:43:43.908318Z",
    "done": true,
    "batchPredictDetails": {
      "inputConfig": {
        "gcsSource": {
          "inputUris": [
            "gs://your-bucket-name/your-input-file.csv"
          ]
        }
      },
      "outputInfo": {
        "gcsOutputDirectory": "your-bucket-name/prediction-test_model_01-2019-01-11T21:39:19.684Z"
      }
    }
  }
}

일괄 예측 작업이 완료되면 명령어에 지정된 Google Cloud Storage 버킷에 예측 결과가 저장됩니다. 각 동영상 세그먼트에 대한 JSON 파일이 있습니다. 예를 들면 다음과 같습니다.

my-video-01.avi.json

{
  "object_annotations": [ {
    "annotation_spec": {

    },
    "confidence": 0.21380796,
    "frames": [ {
      "normalized_bounding_box": {
        "x_min": 0.052492704,
        "y_min": -8.7981018e-09,
        "x_max": 0.64148164,
        "y_max": 0.89988446
      },
      "time_offset": {
        "seconds": 40,
        "nanos": 100000000
      }
    }, {
      "normalized_bounding_box": {
        "x_min": 0.052370463,
        "y_min": 4.3086597e-08,
        "x_max": 0.64165705,
        "y_max": 0.89990062
      },
      "time_offset": {
        "seconds": 40,
        "nanos": 200000000
      }
    }, {
      "normalized_bounding_box": {
        "x_min": 0.052564789,
        "y_min": -1.9019263e-06,
        "x_max": 0.6416381,
        "y_max": 0.89996326
      },
      "time_offset": {
        "seconds": 40,
        "nanos": 300000000
      }
    }, {
      "normalized_bounding_box": {
        "x_min": 0.052563768,
        "y_min": 2.597355e-05,
        "x_max": 0.64150894,
        "y_max": 0.89981335
      },
      "time_offset": {
        "seconds": 40,
        "nanos": 400000000
      }
    }, {
      "normalized_bounding_box": {
        "x_min": 0.052523065,
        "y_min": -6.2882806e-05,
        "x_max": 0.6412282,
        "y_max": 0.90014684
      },
      "time_offset": {
        "seconds": 40,
        "nanos": 500000000
      }
    }, {
      "normalized_bounding_box": {
        "x_min": 0.052364551,
        "y_min": 4.0042476e-05,
        "x_max": 0.64101815,
        "y_max": 0.89997536
      },
      "time_offset": {
        "seconds": 40,
        "nanos": 600000000
      }
    }, {
      "normalized_bounding_box": {
        "x_min": 0.052531734,
        "y_min": 6.2558036e-05,
        "x_max": 0.64081323,
        "y_max": 0.89979166
      },
      "time_offset": {
        "seconds": 40,
        "nanos": 700000000
      }
    }, {
      "normalized_bounding_box": {
        "x_min": 0.052427795,
        "y_min": -4.3911001e-05,
        "x_max": 0.64108026,
        "y_max": 0.89999294
      },
      "time_offset": {
        "seconds": 40,
        "nanos": 800000000
      }
    }, {
      "normalized_bounding_box": {
        "x_min": 0.052480377,
        "y_min": -1.9756711e-05,
        "x_max": 0.64093488,
        "y_max": 0.90002483
      },
      "time_offset": {
        "seconds": 40,
        "nanos": 900000000
      }
    }, {
      "normalized_bounding_box": {
        "x_min": 0.052548293,
        "y_min": 4.8225011e-06,
        "x_max": 0.64074057,
        "y_max": 0.90001011
      },
      "time_offset": {
        "seconds": 41
      }
    }, {
      "normalized_bounding_box": {
        "x_min": 0.052226283,
        "y_min": 6.6190834e-05,
        "x_max": 0.64104807,
        "y_max": 0.89977437
      },
      "time_offset": {
        "seconds": 41,
        "nanos": 100000000
      }
    },
  ]
}