Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Riconoscimento di celebrità in un video archiviato
Il riconoscimento delle celebrità di Video Amazon Rekognition nei video archiviati è un'operazione asincrona. Per riconoscere le celebrità in un video archiviato, utilizzalo per avviare l'analisi video. StartCelebrityRecognition Video Amazon Rekognition pubblica lo stato di completamento dell'analisi video in un argomento Amazon Simple Notification Service. Se l'analisi video ha esito positivo, effettua la chiamata a GetCelebrityRecognition per ottenere i risultati dell'analisi. Per ulteriori informazioni su come avviare analisi video e ottenere i risultati, consultare Chiamata delle operazioni Video Amazon Rekognition.
La procedura si espande nel codice in Analisi di un video archiviato in un bucket Amazon S3 con Java o Python () SDK, che utilizza una coda di Amazon SQS per ottenere lo stato di completamento di una richiesta di analisi video. Per eseguire questa procedura, è necessario disporre di un file video contenente uno o più volti celebri.
Per individuare le celebrità in un video archiviato in un bucket Amazon S3 (SDK)
Eseguire Analisi di un video archiviato in un bucket Amazon S3 con Java o Python () SDK.
Aggiungere il seguente codice alla classe VideoDetect
creata nella fase 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);
}
Nella funzione main
, sostituisci la riga:
StartLabelDetection(bucket, video);
if (GetSQSMessageSuccess()==true)
GetLabelDetectionResults();
con:
StartCelebrityDetection(bucket, video);
if (GetSQSMessageSuccess()==true)
GetCelebrityDetectionResults();
- Java V2
-
Questo codice è tratto dal repository degli esempi GitHub di AWS Documentation SDK. Guarda l'esempio completo qui.
//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
Nella funzione main
, sostituisci le righe:
analyzer.StartLabelDetection()
if analyzer.GetSQSMessageSuccess()==True:
analyzer.GetLabelDetectionResults()
con:
analyzer.StartCelebrityDetection()
if analyzer.GetSQSMessageSuccess()==True:
analyzer.GetCelebrityDetectionResults()
- Node.JS
-
Nel seguente esempio di codice Node.Js, sostituisci il valore di bucket
con il nome del bucket S3 contenente il tuo video e il valore di videoName
con il nome del file video. Dovrai inoltre sostituire il valore di roleArn
con l'ARN associato al tuo ruolo di servizio IAM. Infine, sostituisci il valore di region
con il nome della regione operativa associata al tuo account. Sostituisci il valore di profile_name
nella riga che crea la sessione di Rekognition con il nome del tuo profilo di sviluppatore.
//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
-
Esegui il comando AWS CLI riportato di seguito per iniziare a rilevare le celebrità in un 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
Aggiorna i seguenti valori:
-
Modifica bucket-name
e video-name
con il nome del bucket Amazon S3 e il nome del file specificati nella fase 2.
-
Cambia region-name
con la regione AWS che stai utilizzando.
-
Sostituisci il valore di profile-name
con il nome del tuo profilo di sviluppatore.
-
Cambia topic-ARN
con l'ARN dell'argomento Amazon SNS creato nella fase 3 di Configurazione di Video Amazon Rekognition.
-
Modifica role-ARN
con l'ARN del ruolo di servizio IAM creato nella fase 7 di Configurazione di Video Amazon Rekognition.
Se accedi alla CLI da un dispositivo Windows, usa le virgolette doppie anziché le virgolette singole ed evita le virgolette doppie interne tramite barra rovesciata (ovvero, \) per risolvere eventuali errori del parser che potresti riscontrare. Un esempio è fornito di seguito:
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
Dopo aver eseguito l'esempio di codice precedente, copia il jobID
restituito e inseriscilo nel comando GetCelebrityRecognition
di seguito per ottenere i risultati, sostituendo job-id-number
con il jobID
ricevuto in precedenza:
aws rekognition get-celebrity-recognition --job-id job-id-number --profile profile-name
Eseguire il codice. Vengono visualizzate le informazioni sui volti celebri riconosciuti nel video.
GetCelebrityRecognition risposta all'operazione
Di seguito è riportata una risposta JSON di esempio. La risposta include quanto segue:
-
Celebrità riconosciute: Celebrities
è una matrice di celebrità e degli orari in cui vengono riconosciute in un video. Esiste un oggetto CelebrityRecognition per ogni ora in cui viene riconosciuto un volto celebre nel video. Ogni CelebrityRecognition
contiene informazioni su un volto celebre riconosciuto (CelebrityDetail) e l'ora (Timestamp
) in cui la celebrità è stata riconosciuta nel video. Timestamp
si misura in millisecondi dall'inizio del video.
-
CelebrityDetail— Contiene informazioni su una celebrità riconosciuta. Include il nome della celebrità (Name
), l'identificatore (ID
), il genere noto della celebrità (KnownGender
) e un elenco di URL che indirizzano a contenuti correlati (Urls
). Include anche il livello di fiducia di Amazon Rekognition Video nell'accuratezza del riconoscimento e i dettagli sul volto della celebrità. FaceDetail Per ottenere il contenuto correlato in un secondo momento, puoi utilizzare ID
con getCelebrityInfo.
-
VideoMetadata— Informazioni sul video che è stato analizzato.
{
"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
}
}