기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
비디오 분석
다음 예제는 DetectCustomLabels
항목과 비디오에서 추출한 프레임을 함께 사용하는 방법을 보여줍니다. 코드는 mov 및 mp4 형식의 비디오 파일을 사용하여 테스트되었습니다.
DetectCustomLabels
항목을 캡처한 프레임과 함께 사용
-
아직 하지 않았다면 AWS CLI 및 AWS SDK를 설치하고 구성하세요. 자세한 내용은 4단계: 및 SDK 설정 AWS CLIAWS 섹션을 참조하세요.
-
rekognition:DetectCustomLabels
및AmazonS3ReadOnlyAccess
의 권한이 있는지 확인하세요. 자세한 내용은 4단계: 및 SDK 설정 AWS CLIAWS 섹션을 참조하세요. -
다음 예제 코드를 사용하세요.
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()