Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mengenali selebriti dalam video yang tersimpan
Pengenalan selebriti Amazon Rekognition Video dalam video yang disimpan merupakan operasi yang tidak sinkron. Untuk mengenali selebriti dalam video yang tersimpan, gunakan StartCelebrityRecognition untuk memulai analisis pada video. Amazon Rekognition Video menerbitkan status penyelesaian analisis video ke topik Amazon Simple Notification Service. Jika analisis video berhasil, panggil GetCelebrityRecognition. untuk mendapatkan hasil analisis. Untuk informasi selengkapnya tentang memulai analisis video dan mendapatkan hasilnya, lihat Memanggil operasi Amazon Rekognition Video.
Prosedur ini melebar pada kode di Menganalisis video yang disimpan dalam bucket Amazon S3 dengan Java atau Python () SDK, yang menggunakan antrean Amazon SQS untuk mendapatkan status selesai dari permintaan analisis video. Untuk menjalankan prosedur ini, Anda memerlukan file video yang berisi satu wajah selebriti atau lebih.
Untuk mendeteksi selebriti dalam video yang disimpan dalam bucket Amazon S3 (SDK)
Lakukan Menganalisis video yang disimpan dalam bucket Amazon S3 dengan Java atau Python () SDK.
Tambahkan kode berikut ke kelas VideoDetect
yang Anda buat di langkah 1.
- Java
//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.)
// Celebrities=====================================================================
private static void StartCelebrityDetection(String bucket, String video) throws Exception{
NotificationChannel channel= new NotificationChannel()
.withSNSTopicArn(snsTopicArn)
.withRoleArn(roleArn);
StartCelebrityRecognitionRequest req = new StartCelebrityRecognitionRequest()
.withVideo(new Video()
.withS3Object(new S3Object()
.withBucket(bucket)
.withName(video)))
.withNotificationChannel(channel);
StartCelebrityRecognitionResult startCelebrityRecognitionResult = rek.startCelebrityRecognition(req);
startJobId=startCelebrityRecognitionResult.getJobId();
}
private static void GetCelebrityDetectionResults() throws Exception{
int maxResults=10;
String paginationToken=null;
GetCelebrityRecognitionResult celebrityRecognitionResult=null;
do{
if (celebrityRecognitionResult !=null){
paginationToken = celebrityRecognitionResult.getNextToken();
}
celebrityRecognitionResult = rek.getCelebrityRecognition(new GetCelebrityRecognitionRequest()
.withJobId(startJobId)
.withNextToken(paginationToken)
.withSortBy(CelebrityRecognitionSortBy.TIMESTAMP)
.withMaxResults(maxResults));
System.out.println("File info for page");
VideoMetadata videoMetaData=celebrityRecognitionResult.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());
System.out.println("Job");
System.out.println("Job status: " + celebrityRecognitionResult.getJobStatus());
//Show celebrities
List<CelebrityRecognition> celebs= celebrityRecognitionResult.getCelebrities();
for (CelebrityRecognition celeb: celebs) {
long seconds=celeb.getTimestamp()/1000;
System.out.print("Sec: " + Long.toString(seconds) + " ");
CelebrityDetail details=celeb.getCelebrity();
System.out.println("Name: " + details.getName());
System.out.println("Id: " + details.getId());
System.out.println();
}
} while (celebrityRecognitionResult !=null && celebrityRecognitionResult.getNextToken() != null);
}
Dalam fungsi main
, ganti baris:
StartLabelDetection(bucket, video);
if (GetSQSMessageSuccess()==true)
GetLabelDetectionResults();
dengan:
StartCelebrityDetection(bucket, video);
if (GetSQSMessageSuccess()==true)
GetCelebrityDetectionResults();
- Java V2
-
Kode ini diambil dari GitHub repositori contoh SDK AWS Dokumentasi. Lihat contoh lengkapnya di sini.
//snippet-start:[rekognition.java2.recognize_video_celebrity.import]
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.rekognition.RekognitionClient;
import software.amazon.awssdk.services.rekognition.model.S3Object;
import software.amazon.awssdk.services.rekognition.model.NotificationChannel;
import software.amazon.awssdk.services.rekognition.model.Video;
import software.amazon.awssdk.services.rekognition.model.StartCelebrityRecognitionResponse;
import software.amazon.awssdk.services.rekognition.model.RekognitionException;
import software.amazon.awssdk.services.rekognition.model.CelebrityRecognitionSortBy;
import software.amazon.awssdk.services.rekognition.model.VideoMetadata;
import software.amazon.awssdk.services.rekognition.model.CelebrityRecognition;
import software.amazon.awssdk.services.rekognition.model.CelebrityDetail;
import software.amazon.awssdk.services.rekognition.model.StartCelebrityRecognitionRequest;
import software.amazon.awssdk.services.rekognition.model.GetCelebrityRecognitionRequest;
import software.amazon.awssdk.services.rekognition.model.GetCelebrityRecognitionResponse;
import java.util.List;
//snippet-end:[rekognition.java2.recognize_video_celebrity.import]
/**
* To run this code example, ensure that you perform the Prerequisites as stated in the Amazon Rekognition Guide:
* https://docs.aws.amazon.com/rekognition/latest/dg/video-analyzing-with-sqs.html
*
* Also, ensure that set up your development environment, including your credentials.
*
* For information, see this documentation topic:
*
* https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
*/
public class RecognizeCelebritiesVideo {
private static String startJobId ="";
public static void main(String[] args) {
final String usage = "\n" +
"Usage: " +
" <bucket> <video> <topicArn> <roleArn>\n\n" +
"Where:\n" +
" bucket - The name of the bucket in which the video is located (for example, (for example, myBucket). \n\n"+
" video - The name of video (for example, people.mp4). \n\n" +
" topicArn - The ARN of the Amazon Simple Notification Service (Amazon SNS) topic. \n\n" +
" roleArn - The ARN of the AWS Identity and Access Management (IAM) role to use. \n\n" ;
if (args.length != 4) {
System.out.println(usage);
System.exit(1);
}
String bucket = args[0];
String video = args[1];
String topicArn = args[2];
String roleArn = args[3];
Region region = Region.US_EAST_1;
RekognitionClient rekClient = RekognitionClient.builder()
.region(region)
.credentialsProvider(ProfileCredentialsProvider.create("profile-name"))
.build();
NotificationChannel channel = NotificationChannel.builder()
.snsTopicArn(topicArn)
.roleArn(roleArn)
.build();
StartCelebrityDetection(rekClient, channel, bucket, video);
GetCelebrityDetectionResults(rekClient);
System.out.println("This example is done!");
rekClient.close();
}
// snippet-start:[rekognition.java2.recognize_video_celebrity.main]
public static void StartCelebrityDetection(RekognitionClient rekClient,
NotificationChannel channel,
String bucket,
String video){
try {
S3Object s3Obj = S3Object.builder()
.bucket(bucket)
.name(video)
.build();
Video vidOb = Video.builder()
.s3Object(s3Obj)
.build();
StartCelebrityRecognitionRequest recognitionRequest = StartCelebrityRecognitionRequest.builder()
.jobTag("Celebrities")
.notificationChannel(channel)
.video(vidOb)
.build();
StartCelebrityRecognitionResponse startCelebrityRecognitionResult = rekClient.startCelebrityRecognition(recognitionRequest);
startJobId = startCelebrityRecognitionResult.jobId();
} catch(RekognitionException e) {
System.out.println(e.getMessage());
System.exit(1);
}
}
public static void GetCelebrityDetectionResults(RekognitionClient rekClient) {
try {
String paginationToken=null;
GetCelebrityRecognitionResponse recognitionResponse = null;
boolean finished = false;
String status;
int yy=0 ;
do{
if (recognitionResponse !=null)
paginationToken = recognitionResponse.nextToken();
GetCelebrityRecognitionRequest recognitionRequest = GetCelebrityRecognitionRequest.builder()
.jobId(startJobId)
.nextToken(paginationToken)
.sortBy(CelebrityRecognitionSortBy.TIMESTAMP)
.maxResults(10)
.build();
// Wait until the job succeeds
while (!finished) {
recognitionResponse = rekClient.getCelebrityRecognition(recognitionRequest);
status = recognitionResponse.jobStatusAsString();
if (status.compareTo("SUCCEEDED") == 0)
finished = true;
else {
System.out.println(yy + " status is: " + status);
Thread.sleep(1000);
}
yy++;
}
finished = false;
// Proceed when the job is done - otherwise VideoMetadata is null.
VideoMetadata videoMetaData=recognitionResponse.videoMetadata();
System.out.println("Format: " + videoMetaData.format());
System.out.println("Codec: " + videoMetaData.codec());
System.out.println("Duration: " + videoMetaData.durationMillis());
System.out.println("FrameRate: " + videoMetaData.frameRate());
System.out.println("Job");
List<CelebrityRecognition> celebs= recognitionResponse.celebrities();
for (CelebrityRecognition celeb: celebs) {
long seconds=celeb.timestamp()/1000;
System.out.print("Sec: " + seconds + " ");
CelebrityDetail details=celeb.celebrity();
System.out.println("Name: " + details.name());
System.out.println("Id: " + details.id());
System.out.println();
}
} while (recognitionResponse.nextToken() != null);
} catch(RekognitionException | InterruptedException e) {
System.out.println(e.getMessage());
System.exit(1);
}
}
// snippet-end:[rekognition.java2.recognize_video_celebrity.main]
}
- Python
#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.)
# ============== Celebrities ===============
def StartCelebrityDetection(self):
response=self.rek.start_celebrity_recognition(Video={'S3Object': {'Bucket': self.bucket, 'Name': self.video}},
NotificationChannel={'RoleArn': self.roleArn, 'SNSTopicArn': self.snsTopicArn})
self.startJobId=response['JobId']
print('Start Job Id: ' + self.startJobId)
def GetCelebrityDetectionResults(self):
maxResults = 10
paginationToken = ''
finished = False
while finished == False:
response = self.rek.get_celebrity_recognition(JobId=self.startJobId,
MaxResults=maxResults,
NextToken=paginationToken)
print(response['VideoMetadata']['Codec'])
print(str(response['VideoMetadata']['DurationMillis']))
print(response['VideoMetadata']['Format'])
print(response['VideoMetadata']['FrameRate'])
for celebrityRecognition in response['Celebrities']:
print('Celebrity: ' +
str(celebrityRecognition['Celebrity']['Name']))
print('Timestamp: ' + str(celebrityRecognition['Timestamp']))
print()
if 'NextToken' in response:
paginationToken = response['NextToken']
else:
finished = True
Dalam fungsi main
, ganti baris:
analyzer.StartLabelDetection()
if analyzer.GetSQSMessageSuccess()==True:
analyzer.GetLabelDetectionResults()
dengan:
analyzer.StartCelebrityDetection()
if analyzer.GetSQSMessageSuccess()==True:
analyzer.GetCelebrityDetectionResults()
- Node.JS
-
Dalam contoh kode Node.Js berikut, ganti nilai bucket
dengan nama bucket S3 yang berisi video Anda dan nilai videoName
dengan nama file video. Anda juga harus mengganti nilai dengan Arn yang terkait roleArn
dengan peran layanan IAM Anda. Akhirnya, ganti nilai region
dengan nama wilayah operasi yang terkait dengan akun Anda. Ganti nilai profile_name
di baris yang membuat sesi Rekognition dengan nama profil pengembang Anda.
//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.)
// Import required AWS SDK clients and commands for Node.js
import { CreateQueueCommand, GetQueueAttributesCommand, GetQueueUrlCommand,
SetQueueAttributesCommand, DeleteQueueCommand, ReceiveMessageCommand, DeleteMessageCommand } from "@aws-sdk/client-sqs";
import {CreateTopicCommand, SubscribeCommand, DeleteTopicCommand } from "@aws-sdk/client-sns";
import { SQSClient } from "@aws-sdk/client-sqs";
import { SNSClient } from "@aws-sdk/client-sns";
import { RekognitionClient, StartLabelDetectionCommand, GetLabelDetectionCommand,
StartCelebrityRecognitionCommand, GetCelebrityRecognitionCommand} from "@aws-sdk/client-rekognition";
import { stdout } from "process";
import {fromIni} from '@aws-sdk/credential-providers';
// Set the AWS Region.
const REGION = "region-name"; //e.g. "us-east-1"
// Set the profile name
const profileName = "profile-name"
// Name the collection
// Create SNS service object.
const sqsClient = new SQSClient({ region: REGION,
credentials: fromIni({profile: profileName,}), });
const snsClient = new SNSClient({ region: REGION,
credentials: fromIni({profile: profileName,}), });
const rekClient = new RekognitionClient({region: REGION,
credentials: fromIni({profile: profileName,}),
});
// Set bucket and video variables
const bucket = "bucket-name";
const videoName = "video-name";
const roleArn = "role-arn"
var startJobId = ""
var ts = Date.now();
const snsTopicName = "AmazonRekognitionExample" + ts;
const snsTopicParams = {Name: snsTopicName}
const sqsQueueName = "AmazonRekognitionQueue-" + ts;
// Set the parameters
const sqsParams = {
QueueName: sqsQueueName, //SQS_QUEUE_URL
Attributes: {
DelaySeconds: "60", // Number of seconds delay.
MessageRetentionPeriod: "86400", // Number of seconds delay.
},
};
const createTopicandQueue = async () => {
try {
// Create SNS topic
const topicResponse = await snsClient.send(new CreateTopicCommand(snsTopicParams));
const topicArn = topicResponse.TopicArn
console.log("Success", topicResponse);
// Create SQS Queue
const sqsResponse = await sqsClient.send(new CreateQueueCommand(sqsParams));
console.log("Success", sqsResponse);
const sqsQueueCommand = await sqsClient.send(new GetQueueUrlCommand({QueueName: sqsQueueName}))
const sqsQueueUrl = sqsQueueCommand.QueueUrl
const attribsResponse = await sqsClient.send(new GetQueueAttributesCommand({QueueUrl: sqsQueueUrl, AttributeNames: ['QueueArn']}))
const attribs = attribsResponse.Attributes
console.log(attribs)
const queueArn = attribs.QueueArn
// subscribe SQS queue to SNS topic
const subscribed = await snsClient.send(new SubscribeCommand({TopicArn: topicArn, Protocol:'sqs', Endpoint: queueArn}))
const policy = {
Version: "2012-10-17",
Statement: [
{
Sid: "MyPolicy",
Effect: "Allow",
Principal: {AWS: "*"},
Action: "SQS:SendMessage",
Resource: queueArn,
Condition: {
ArnEquals: {
'aws:SourceArn': topicArn
}
}
}
]
};
const response = sqsClient.send(new SetQueueAttributesCommand({QueueUrl: sqsQueueUrl, Attributes: {Policy: JSON.stringify(policy)}}))
console.log(response)
console.log(sqsQueueUrl, topicArn)
return [sqsQueueUrl, topicArn]
} catch (err) {
console.log("Error", err);
}
};
const startCelebrityDetection = async(roleArn, snsTopicArn) =>{
try {
//Initiate label detection and update value of startJobId with returned Job ID
const response = await rekClient.send(new StartCelebrityRecognitionCommand({Video:{S3Object:{Bucket:bucket, Name:videoName}},
NotificationChannel:{RoleArn: roleArn, SNSTopicArn: snsTopicArn}}))
startJobId = response.JobId
console.log(`Start Job ID: ${startJobId}`)
return startJobId
} catch (err) {
console.log("Error", err);
}
};
const getCelebrityRecognitionResults = async(startJobId) =>{
try {
//Initiate label detection and update value of startJobId with returned Job ID
var maxResults = 10
var paginationToken = ''
var finished = false
while (finished == false){
var response = await rekClient.send(new GetCelebrityRecognitionCommand({JobId: startJobId, MaxResults: maxResults,
NextToken: paginationToken}))
console.log(response.VideoMetadata.Codec)
console.log(response.VideoMetadata.DurationMillis)
console.log(response.VideoMetadata.Format)
console.log(response.VideoMetadata.FrameRate)
response.Celebrities.forEach(celebrityRecognition => {
console.log(`Celebrity: ${celebrityRecognition.Celebrity.Name}`)
console.log(`Timestamp: ${celebrityRecognition.Timestamp}`)
console.log()
})
// Searh for pagination token, if found, set variable to next token
if (String(response).includes("NextToken")){
paginationToken = response.NextToken
}else{
finished = true
}
}
} catch (err) {
console.log("Error", err);
}
};
// Checks for status of job completion
const getSQSMessageSuccess = async(sqsQueueUrl, startJobId) => {
try {
// Set job found and success status to false initially
var jobFound = false
var succeeded = false
var dotLine = 0
// while not found, continue to poll for response
while (jobFound == false){
var sqsReceivedResponse = await sqsClient.send(new ReceiveMessageCommand({QueueUrl:sqsQueueUrl,
MaxNumberOfMessages:'ALL', MaxNumberOfMessages:10}));
if (sqsReceivedResponse){
var responseString = JSON.stringify(sqsReceivedResponse)
if (!responseString.includes('Body')){
if (dotLine < 40) {
console.log('.')
dotLine = dotLine + 1
}else {
console.log('')
dotLine = 0
};
stdout.write('', () => {
console.log('');
});
await new Promise(resolve => setTimeout(resolve, 5000));
continue
}
}
// Once job found, log Job ID and return true if status is succeeded
for (var message of sqsReceivedResponse.Messages){
console.log("Retrieved messages:")
var notification = JSON.parse(message.Body)
var rekMessage = JSON.parse(notification.Message)
var messageJobId = rekMessage.JobId
if (String(rekMessage.JobId).includes(String(startJobId))){
console.log('Matching job found:')
console.log(rekMessage.JobId)
jobFound = true
console.log(rekMessage.Status)
if (String(rekMessage.Status).includes(String("SUCCEEDED"))){
succeeded = true
console.log("Job processing succeeded.")
var sqsDeleteMessage = await sqsClient.send(new DeleteMessageCommand({QueueUrl:sqsQueueUrl, ReceiptHandle:message.ReceiptHandle}));
}
}else{
console.log("Provided Job ID did not match returned ID.")
var sqsDeleteMessage = await sqsClient.send(new DeleteMessageCommand({QueueUrl:sqsQueueUrl, ReceiptHandle:message.ReceiptHandle}));
}
}
}
return succeeded
} catch(err) {
console.log("Error", err);
}
};
// Start label detection job, sent status notification, check for success status
// Retrieve results if status is "SUCEEDED", delete notification queue and topic
const runCelebRecognitionAndGetResults = async () => {
try {
const sqsAndTopic = await createTopicandQueue();
//const startLabelDetectionRes = await startLabelDetection(roleArn, sqsAndTopic[1]);
//const getSQSMessageStatus = await getSQSMessageSuccess(sqsAndTopic[0], startLabelDetectionRes)
const startCelebrityDetectionRes = await startCelebrityDetection(roleArn, sqsAndTopic[1]);
const getSQSMessageStatus = await getSQSMessageSuccess(sqsAndTopic[0], startCelebrityDetectionRes)
console.log(getSQSMessageSuccess)
if (getSQSMessageSuccess){
console.log("Retrieving results:")
const results = await getCelebrityRecognitionResults(startCelebrityDetectionRes)
}
const deleteQueue = await sqsClient.send(new DeleteQueueCommand({QueueUrl: sqsAndTopic[0]}));
const deleteTopic = await snsClient.send(new DeleteTopicCommand({TopicArn: sqsAndTopic[1]}));
console.log("Successfully deleted.")
} catch (err) {
console.log("Error", err);
}
};
runCelebRecognitionAndGetResults()
- CLI
-
Jalankan AWS CLI perintah berikut untuk mulai mendeteksi selebriti dalam video.
aws rekognition start-celebrity-recognition --video "{"S3Object":{"Bucket":"bucket-name","Name":"video-name"}}" \
--notification-channel "{"SNSTopicArn":"topic-arn","RoleArn":"role-arn"}" \
--region region-name --profile profile-name
Perbarui nilai berikut:
-
Ubah bucket-name
dan video-name
ke nama bucket Amazon S3 dan nama file yang Anda tentukan pada langkah 2.
-
Ubah region-name
ke wilayah AWS yang Anda gunakan.
-
Ganti nilai profile-name
dengan nama profil pengembang Anda.
-
Ubah topic-ARN
ke ARN dari topik Amazon SNS yang Anda buat pada langkah 3 Mengonfigurasi Amazon Rekognition Video.
-
Perubahan role-ARN
ke ARN dari peran layanan IAM yang Anda buat di langkah 7 Mengonfigurasi Amazon Rekognition Video.
Jika Anda mengakses CLI pada perangkat Windows, gunakan tanda kutip ganda alih-alih tanda kutip tunggal dan hindari tanda kutip ganda bagian dalam dengan garis miring terbalik (yaitu\) untuk mengatasi kesalahan parser yang mungkin Anda temui. Sebagai contoh, lihat di bawah:
aws rekognition start-celebrity-recognition --video "{\"S3Object\":{\"Bucket\":\"bucket-name\",\"Name\":\"video-name\"}}" \
--notification-channel "{\"SNSTopicArn\":\"topic-arn\",\"RoleArn\":\"role-arn\"}" \
--region region-name --profile profile-name
Setelah menjalankan contoh kode proses, salin yang dikembalikan jobID
dan berikan ke GetCelebrityRecognition
perintah berikut di bawah ini untuk mendapatkan hasil Anda, ganti job-id-number
dengan yang jobID
Anda terima sebelumnya:
aws rekognition get-celebrity-recognition --job-id job-id-number --profile profile-name
Jalankan kode tersebut. Informasi tentang selebriti yang dikenal dalam video sedang ditampilkan.
GetCelebrityRecognition respon operasi
Berikut ini adalah contoh respons JSON. Respons mencakup hal berikut ini:
-
Selebriti yang dikenal — Celebrities
adalah array selebriti dan waktu ketika selebriti tersebut dikenali dalam video. Objek CelebrityRecognition muncul setiap kali selebriti dikenal dalam video. Setiap CelebrityRecognition
berisi informasi tentang selebriti yang dikenal (CelebrityDetail) dan waktu (Timestamp
) selebriti itu dikenal dalam video. Timestamp
diukur dalam satuan milidetik dari permulaan video.
-
CelebrityDetail— Berisi informasi tentang selebriti yang diakui. Ini termasuk nama selebriti (Name
), identifier (ID
), jenis kelamin selebriti yang diketahui (KnownGender
), dan daftar URL yang menunjuk ke konten terkait (). Urls
Ini juga mencakup tingkat kepercayaan yang dimiliki Amazon Rekognition Video dalam keakuratan pengakuan, dan detail tentang wajah selebriti,. FaceDetail Jika Anda perlu mendapatkan konten terkait nanti, Anda dapat menggunakan ID
dengan getCelebrityInfo.
-
VideoMetadata— Informasi tentang video yang dianalisis.
{
"Celebrities": [
{
"Celebrity": {
"Confidence": 0.699999988079071,
"Face": {
"BoundingBox": {
"Height": 0.20555555820465088,
"Left": 0.029374999925494194,
"Top": 0.22333332896232605,
"Width": 0.11562500149011612
},
"Confidence": 99.89837646484375,
"Landmarks": [
{
"Type": "eyeLeft",
"X": 0.06857934594154358,
"Y": 0.30842265486717224
},
{
"Type": "eyeRight",
"X": 0.10396526008844376,
"Y": 0.300625205039978
},
{
"Type": "nose",
"X": 0.0966852456331253,
"Y": 0.34081998467445374
},
{
"Type": "mouthLeft",
"X": 0.075217105448246,
"Y": 0.3811396062374115
},
{
"Type": "mouthRight",
"X": 0.10744428634643555,
"Y": 0.37407416105270386
}
],
"Pose": {
"Pitch": -0.9784082174301147,
"Roll": -8.808176040649414,
"Yaw": 20.28228759765625
},
"Quality": {
"Brightness": 43.312068939208984,
"Sharpness": 99.9305191040039
}
},
"Id": "XXXXXX",
"KnownGender": {
"Type": "Female"
},
"Name": "Celeb A",
"Urls": []
},
"Timestamp": 367
},......
],
"JobStatus": "SUCCEEDED",
"NextToken": "XfXnZKiyMOGDhzBzYUhS5puM+g1IgezqFeYpv/H/+5noP/LmM57FitUAwSQ5D6G4AB/PNwolrw==",
"VideoMetadata": {
"Codec": "h264",
"DurationMillis": 67301,
"FileExtension": "mp4",
"Format": "QuickTime / MOV",
"FrameHeight": 1080,
"FrameRate": 29.970029830932617,
"FrameWidth": 1920
}
}