翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
注記
サポート終了のお知らせ: 2025 年 10 月 31 日をもって、AWS は Amazon Rekognition の人物の動線の検出機能のサポートを終了いたします。2025 年 10 月 31 日のサポート終了後、Rekognition の人物の動線の検出機能はご利用いただけなくなります。詳細については、こちらのブログ記事
Amazon Rekognition Video は、ビデオ内の人物を動線を追跡し、以下のような情報を提供できます。
動線の追跡時点におけるビデオフレーム内の人物の位置。
検出時の顔のランドマーク (左目の位置など)。
Amazon Rekognition Video による保存済みビデオ内の人物の動線の検出は非同期オペレーションです。ビデオ内の人の追跡を開始するには、StartPersonTracking を呼び出します。Amazon Rekognition Video は、ビデオ分析の完了ステータスを Amazon Simple Notification Service トピックに発行します。ビデオ分析が成功したら、GetPersonTracking を呼び出してビデオ分析の結果を取得します。Amazon Rekognition Video API オペレーションの詳細については、Amazon Rekognition Video オペレーションを呼び出す を参照してください。
以下の手順では、Amazon S3 バケットに保存されたビデオを通じた人物の動線の追跡方法を示します。この例では、Amazon Simple Queue Service のキューを使用してビデオ分析リクエストの完了ステータスを取得する Java または Python を使用した、Amazon S3 バケットに保存されたビデオの分析 (SDK) のコードを拡張します。
Amazon S3 バケットに保存されたビデオ内のテキストを検出するには (SDK)
「Java または Python を使用した、Amazon S3 バケットに保存されたビデオの分析 (SDK)」を実行します。
ステップ 1 で作成したクラス
VideoDetect
に次のコードを追加します。//Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. //PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.) //Persons======================================================================== private static void StartPersonDetection(String bucket, String video) throws Exception{ NotificationChannel channel= new NotificationChannel() .withSNSTopicArn(snsTopicArn) .withRoleArn(roleArn); StartPersonTrackingRequest req = new StartPersonTrackingRequest() .withVideo(new Video() .withS3Object(new S3Object() .withBucket(bucket) .withName(video))) .withNotificationChannel(channel); StartPersonTrackingResult startPersonDetectionResult = rek.startPersonTracking(req); startJobId=startPersonDetectionResult.getJobId(); } private static void GetPersonDetectionResults() throws Exception{ int maxResults=10; String paginationToken=null; GetPersonTrackingResult personTrackingResult=null; do{ if (personTrackingResult !=null){ paginationToken = personTrackingResult.getNextToken(); } personTrackingResult = rek.getPersonTracking(new GetPersonTrackingRequest() .withJobId(startJobId) .withNextToken(paginationToken) .withSortBy(PersonTrackingSortBy.TIMESTAMP) .withMaxResults(maxResults)); VideoMetadata videoMetaData=personTrackingResult.getVideoMetadata(); System.out.println("Format: " + videoMetaData.getFormat()); System.out.println("Codec: " + videoMetaData.getCodec()); System.out.println("Duration: " + videoMetaData.getDurationMillis()); System.out.println("FrameRate: " + videoMetaData.getFrameRate()); //Show persons, confidence and detection times List<PersonDetection> detectedPersons= personTrackingResult.getPersons(); for (PersonDetection detectedPerson: detectedPersons) { long seconds=detectedPerson.getTimestamp()/1000; System.out.print("Sec: " + Long.toString(seconds) + " "); System.out.println("Person Identifier: " + detectedPerson.getPerson().getIndex()); System.out.println(); } } while (personTrackingResult !=null && personTrackingResult.getNextToken() != null); }
関数
main
で、以下の行を置き換えます。StartLabelDetection(amzn-s3-demo-bucket, video); if (GetSQSMessageSuccess()==true) GetLabelDetectionResults();
を:
StartPersonDetection(amzn-s3-demo-bucket, video); if (GetSQSMessageSuccess()==true) GetPersonDetectionResults();
注記
Java または Python を使用した、Amazon S3 バケットに保存されたビデオの分析 (SDK) 以外のビデオ例をすでに実行している場合、置き換えるコードは異なる可能性があります。
コードを実行します。追跡された人物の一意の ID が、人物の動線が追跡された時間 (秒単位) とともに表示されます。
GetPersonTracking オペレーションレスポンス
GetPersonTracking
は、ビデオ内で検出された人の詳細とその動線が追跡されたタイミングに関する情報を含む PersonDetection オブジェクトの配列 Persons
を返します。
Persons
入力パラメータを使用して SortBy
をソートすることができます。ビデオ内で人物の動線が追跡された時間によって要素をソートするには、TIMESTAMP
を指定します。ビデオ内で追跡された人物によってソートするには、INDEX
を指定します。人物の各結果セット内で、要素は動線の追跡の正確性の信頼度によって降順にソートされます。デフォルトでは、Persons
は TIMESTAMP
でソートされて返されます。GetPersonDetection
の JSON レスポンスの例を次に示します。結果は、ビデオの開始以降にビデオ内で人物の動線が追跡された時間 (ミリ秒単位) によってソートされます。レスポンスで、以下の点に注意してください。
-
個人情報 –
PersonDetection
配列要素には、検出された人物に関する情報が含まれています。たとえば、人物が検出された時間 (Timestamp
)、検出時のビデオフレームでの人物の位置 (BoundingBox
)、人物の正しい検出に関する Amazon Rekognition Video の信頼度 (Confidence
) などです。人物の動線が追跡されたタイムスタンプごとに顔の特徴は返されません。さらに、状況によっては、追跡された人物の体が見えない場合があり、その場合は顔の位置のみが返されます。
-
ページング情報 – 例は 1 ページの人物検出情報を示しています。人物要素を返す数は、
GetPersonTracking
のMaxResults
入力パラメータで指定できます。結果がMaxResults
を超える場合、GetPersonTracking
は次のページの結果を取得するためのトークン (NextToken
) を返します。詳細については、「Amazon Rekognition Video の分析結果を取得する」を参照してください。 -
インデックス –ビデオ全体で人物を識別するための一意の識別子。
-
ビデオの情報 – レスポンスには、
VideoMetadata
から返される情報のページごとにビデオ形式に関する情報 (GetPersonDetection
) が含まれます。
{
"JobStatus": "SUCCEEDED",
"NextToken": "AcDymG0fSSoaI6+BBYpka5wVlqttysSPP8VvWcujMDluj1QpFo/vf+mrMoqBGk8eUEiFlllR6g==",
"Persons": [
{
"Person": {
"BoundingBox": {
"Height": 0.8787037134170532,
"Left": 0.00572916679084301,
"Top": 0.12129629403352737,
"Width": 0.21666666865348816
},
"Face": {
"BoundingBox": {
"Height": 0.20000000298023224,
"Left": 0.029999999329447746,
"Top": 0.2199999988079071,
"Width": 0.11249999701976776
},
"Confidence": 99.85971069335938,
"Landmarks": [
{
"Type": "eyeLeft",
"X": 0.06842322647571564,
"Y": 0.3010137975215912
},
{
"Type": "eyeRight",
"X": 0.10543643683195114,
"Y": 0.29697132110595703
},
{
"Type": "nose",
"X": 0.09569807350635529,
"Y": 0.33701086044311523
},
{
"Type": "mouthLeft",
"X": 0.0732642263174057,
"Y": 0.3757539987564087
},
{
"Type": "mouthRight",
"X": 0.10589495301246643,
"Y": 0.3722417950630188
}
],
"Pose": {
"Pitch": -0.5589138865470886,
"Roll": -5.1093974113464355,
"Yaw": 18.69594955444336
},
"Quality": {
"Brightness": 43.052337646484375,
"Sharpness": 99.68138885498047
}
},
"Index": 0
},
"Timestamp": 0
},
{
"Person": {
"BoundingBox": {
"Height": 0.9074074029922485,
"Left": 0.24791666865348816,
"Top": 0.09259258955717087,
"Width": 0.375
},
"Face": {
"BoundingBox": {
"Height": 0.23000000417232513,
"Left": 0.42500001192092896,
"Top": 0.16333332657814026,
"Width": 0.12937499582767487
},
"Confidence": 99.97504425048828,
"Landmarks": [
{
"Type": "eyeLeft",
"X": 0.46415066719055176,
"Y": 0.2572723925113678
},
{
"Type": "eyeRight",
"X": 0.5068183541297913,
"Y": 0.23705792427062988
},
{
"Type": "nose",
"X": 0.49765899777412415,
"Y": 0.28383663296699524
},
{
"Type": "mouthLeft",
"X": 0.487221896648407,
"Y": 0.3452930748462677
},
{
"Type": "mouthRight",
"X": 0.5142884850502014,
"Y": 0.33167609572410583
}
],
"Pose": {
"Pitch": 15.966927528381348,
"Roll": -15.547388076782227,
"Yaw": 11.34195613861084
},
"Quality": {
"Brightness": 44.80223083496094,
"Sharpness": 99.95819854736328
}
},
"Index": 1
},
"Timestamp": 0
}.....
],
"VideoMetadata": {
"Codec": "h264",
"DurationMillis": 67301,
"FileExtension": "mp4",
"Format": "QuickTime / MOV",
"FrameHeight": 1080,
"FrameRate": 29.970029830932617,
"FrameWidth": 1920
}
}