비디오 분석 - Rekognition

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

비디오 분석

다음 예제는 DetectCustomLabels 항목과 비디오에서 추출한 프레임을 함께 사용하는 방법을 보여줍니다. 코드는 movmp4 형식의 비디오 파일을 사용하여 테스트되었습니다.

DetectCustomLabels 항목을 캡처한 프레임과 함께 사용
  1. 아직 하지 않았다면 AWS CLI 및 AWS SDK를 설치하고 구성하세요. 자세한 내용은 4단계: 및 SDK 설정 AWS CLIAWS 섹션을 참조하세요.

  2. rekognition:DetectCustomLabelsAmazonS3ReadOnlyAccess의 권한이 있는지 확인하세요. 자세한 내용은 4단계: 및 SDK 설정 AWS CLIAWS 섹션을 참조하세요.

  3. 다음 예제 코드를 사용하세요. videoFile의 값을 비디오 파일 이름으로 변경합니다. projectVersionArn의 값을 Amazon Rekognition Custom Labels 모델의 Amazon 리소스 이름(ARN)으로 변경합니다.

    # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Purpose Shows how to analyze a local video with an Amazon Rekognition Custom Labels model. """ import argparse import logging import json import math import cv2 import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) def analyze_video(rek_client, project_version_arn, video_file): """ Analyzes a local video file with an Amazon Rekognition Custom Labels model. Creates a results JSON file based on the name of the supplied video file. :param rek_client: A Boto3 Amazon Rekognition client. :param project_version_arn: The ARN of the Custom Labels model that you want to use. :param video_file: The video file that you want to analyze. """ custom_labels = [] cap = cv2.VideoCapture(video_file) frame_rate = cap.get(5) # Frame rate. while cap.isOpened(): frame_id = cap.get(1) # Current frame number. print(f"Processing frame id: {frame_id}") ret, frame = cap.read() if ret is not True: break if frame_id % math.floor(frame_rate) == 0: has_frame, image_bytes = cv2.imencode(".jpg", frame) if has_frame: response = rek_client.detect_custom_labels( Image={ 'Bytes': image_bytes.tobytes(), }, ProjectVersionArn=project_version_arn ) for elabel in response["CustomLabels"]: elabel["Timestamp"] = (frame_id/frame_rate)*1000 custom_labels.append(elabel) print(custom_labels) with open(video_file + ".json", "w", encoding="utf-8") as f: f.write(json.dumps(custom_labels)) cap.release() def add_arguments(parser): """ Adds command line arguments to the parser. :param parser: The command line parser. """ parser.add_argument( "project_version_arn", help="The ARN of the model that you want to use." ) parser.add_argument( "video_file", help="The local path to the video that you want to analyze." ) def main(): logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") try: # Get command line arguments. parser = argparse.ArgumentParser(usage=argparse.SUPPRESS) add_arguments(parser) args = parser.parse_args() session = boto3.Session(profile_name='custom-labels-access') rekognition_client = session.client("rekognition") analyze_video(rekognition_client, args.project_version_arn, args.video_file) except ClientError as err: print(f"Couldn't analyze video: {err}") if __name__ == "__main__": main()