동작 인식

동작 인식은 걷기 또는 춤추기와 같은 동영상 클립의 다양한 작업을 식별합니다. 각 작업은 동영상의 전체 재생 시간 동안 수행되거나 수행되지 않을 수 있습니다.

AutoML 모델 사용

시작하기 전에

AutoML 모델 생성에 대한 배경 정보는 Vertex AI 초보자 가이드를 참조하세요. AutoML 모델을 만드는 방법에 대한 자세한 내용은 Console 또는 api를 사용하여 '데이터 세트 만들기'로 시작하세요.

AutoML 모델 사용

다음 코드 샘플은 스트리밍 클라이언트 라이브러리를 사용하여 작업 인식에 AutoML 모델을 사용하는 방법을 보여줍니다.

Python

import io

from google.cloud import videointelligence_v1p3beta1 as videointelligence

# path = 'path_to_file'
# project_id = 'project_id'
# model_id = 'automl_action_recognition_model_id'

client = videointelligence.StreamingVideoIntelligenceServiceClient()

model_path = "projects/{}/locations/us-central1/models/{}".format(
    project_id, model_id
)

automl_config = videointelligence.StreamingAutomlActionRecognitionConfig(
    model_name=model_path
)

video_config = videointelligence.StreamingVideoConfig(
    feature=videointelligence.StreamingFeature.STREAMING_AUTOML_ACTION_RECOGNITION,
    automl_action_recognition_config=automl_config,
)

# config_request should be the first in the stream of requests.
config_request = videointelligence.StreamingAnnotateVideoRequest(
    video_config=video_config
)

# Set the chunk size to 5MB (recommended less than 10MB).
chunk_size = 5 * 1024 * 1024

def stream_generator():
    yield config_request
    # Load file content.
    # Note: Input videos must have supported video codecs. See
    # https://cloud.google.com/video-intelligence/docs/streaming/streaming#supported_video_codecs
    # for more details.
    with io.open(path, "rb") as video_file:
        while True:
            data = video_file.read(chunk_size)
            if not data:
                break
            yield videointelligence.StreamingAnnotateVideoRequest(
                input_content=data
            )

requests = stream_generator()

# streaming_annotate_video returns a generator.
# The default timeout is about 300 seconds.
# To process longer videos it should be set to
# larger than the length (in seconds) of the video.
responses = client.streaming_annotate_video(requests, timeout=900)

# Each response corresponds to about 1 second of video.
for response in responses:
    # Check for errors.
    if response.error.message:
        print(response.error.message)
        break

    for label in response.annotation_results.label_annotations:
        for frame in label.frames:
            print(
                "At {:3d}s segment, {:5.1%} {}".format(
                    frame.time_offset.seconds,
                    frame.confidence,
                    label.entity.entity_id,
                )
            )