Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Lintasan orang
Amazon Rekognition Video dapat membuat jejak lintasan yang diambil orang dalam video dan memberikan informasi seperti:
Lokasi orang dalam bingkai video pada saat lintasan mereka dilacak.
Penanda wajah seperti posisi mata kiri, saat terdeteksi.
Lintasan orang Amazon Rekognition Video dalam video yang disimpan adalah operasi tidak sinkron. Untuk memulai lintasan orang dalam panggilan video StartPersonTracking. Amazon Rekognition Video menerbitkan status penyelesaian analisis video ke topik Amazon Simple Notification Service. Jika analisis video berhasil, hubungi GetPersonTrackinguntuk mendapatkan hasil analisis video. Untuk informasi selengkapnya tentang memanggil operasi API Amazon Rekognition Video, lihat Memanggil operasi Amazon Rekognition Video.
Prosedur berikut menunjukkan cara melacak lintasan orang melalui video yang disimpan dalam bucket Amazon S3. Contoh meluas pada kode di Menganalisis video yang disimpan dalam bucket Amazon S3 dengan Java atau Python () SDK yang menggunakan antrean Amazon Simple Queue Service untuk mendapatkan status penyelesaian permintaan analisis video.
Untuk mendeteksi orang 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.)
//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);
}
Dalam fungsi main
, ganti baris:
StartLabelDetection(bucket, video);
if (GetSQSMessageSuccess()==true)
GetLabelDetectionResults();
dengan:
StartPersonDetection(bucket, video);
if (GetSQSMessageSuccess()==true)
GetPersonDetectionResults();
- Java V2
-
Kode ini diambil dari GitHub repositori contoh SDK AWS Dokumentasi. Lihat contoh lengkapnya di sini.
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.StartPersonTrackingRequest;
import software.amazon.awssdk.services.rekognition.model.Video;
import software.amazon.awssdk.services.rekognition.model.StartPersonTrackingResponse;
import software.amazon.awssdk.services.rekognition.model.RekognitionException;
import software.amazon.awssdk.services.rekognition.model.GetPersonTrackingResponse;
import software.amazon.awssdk.services.rekognition.model.GetPersonTrackingRequest;
import software.amazon.awssdk.services.rekognition.model.VideoMetadata;
import software.amazon.awssdk.services.rekognition.model.PersonDetection;
import java.util.List;
/**
* Before running this Java V2 code example, set up your development
* environment, including your credentials.
*
* For more information, see the following documentation topic:
*
* https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
*/
public class VideoPersonDetection {
private static String startJobId = "";
public static void main(String[] args) {
final String usage = """
Usage: <bucket> <video> <topicArn> <roleArn>
Where:
bucket - The name of the bucket in which the video is located (for example, (for example, myBucket).\s
video - The name of video (for example, people.mp4).\s
topicArn - The ARN of the Amazon Simple Notification Service (Amazon SNS) topic.\s
roleArn - The ARN of the AWS Identity and Access Management (IAM) role to use.\s
""";
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)
.build();
NotificationChannel channel = NotificationChannel.builder()
.snsTopicArn(topicArn)
.roleArn(roleArn)
.build();
startPersonLabels(rekClient, channel, bucket, video);
getPersonDetectionResults(rekClient);
System.out.println("This example is done!");
rekClient.close();
}
public static void startPersonLabels(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();
StartPersonTrackingRequest personTrackingRequest = StartPersonTrackingRequest.builder()
.jobTag("DetectingLabels")
.video(vidOb)
.notificationChannel(channel)
.build();
StartPersonTrackingResponse labelDetectionResponse = rekClient.startPersonTracking(personTrackingRequest);
startJobId = labelDetectionResponse.jobId();
} catch (RekognitionException e) {
System.out.println(e.getMessage());
System.exit(1);
}
}
public static void getPersonDetectionResults(RekognitionClient rekClient) {
try {
String paginationToken = null;
GetPersonTrackingResponse personTrackingResult = null;
boolean finished = false;
String status;
int yy = 0;
do {
if (personTrackingResult != null)
paginationToken = personTrackingResult.nextToken();
GetPersonTrackingRequest recognitionRequest = GetPersonTrackingRequest.builder()
.jobId(startJobId)
.nextToken(paginationToken)
.maxResults(10)
.build();
// Wait until the job succeeds
while (!finished) {
personTrackingResult = rekClient.getPersonTracking(recognitionRequest);
status = personTrackingResult.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 = personTrackingResult.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<PersonDetection> detectedPersons = personTrackingResult.persons();
for (PersonDetection detectedPerson : detectedPersons) {
long seconds = detectedPerson.timestamp() / 1000;
System.out.print("Sec: " + seconds + " ");
System.out.println("Person Identifier: " + detectedPerson.person().index());
System.out.println();
}
} while (personTrackingResult != null && personTrackingResult.nextToken() != null);
} catch (RekognitionException | InterruptedException e) {
System.out.println(e.getMessage());
System.exit(1);
}
}
}
- 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.)
# ============== People pathing ===============
def StartPersonPathing(self):
response=self.rek.start_person_tracking(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 GetPersonPathingResults(self):
maxResults = 10
paginationToken = ''
finished = False
while finished == False:
response = self.rek.get_person_tracking(JobId=self.startJobId,
MaxResults=maxResults,
NextToken=paginationToken)
print('Codec: ' + response['VideoMetadata']['Codec'])
print('Duration: ' + str(response['VideoMetadata']['DurationMillis']))
print('Format: ' + response['VideoMetadata']['Format'])
print('Frame rate: ' + str(response['VideoMetadata']['FrameRate']))
print()
for personDetection in response['Persons']:
print('Index: ' + str(personDetection['Person']['Index']))
print('Timestamp: ' + str(personDetection['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.StartPersonPathing()
if analyzer.GetSQSMessageSuccess()==True:
analyzer.GetPersonPathingResults()
- CLI
-
Jalankan AWS CLI perintah berikut untuk memulai jalur orang dalam video.
aws rekognition start-person-tracking --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
di baris yang membuat sesi Rekognition 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-person-tracking --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 GetPersonTracking
perintah berikut di bawah ini untuk mendapatkan hasil Anda, ganti job-id-number
dengan yang jobID
Anda terima sebelumnya:
aws rekognition get-person-tracking --job-id job-id-number
Jalankan kode tersebut. Pengidentifikasi unik untuk orang-orang yang dilacak ditampilkan bersamaan dengan waktu, dalam hitungan detik, lintasan orang tersebut dilacak.
GetPersonTracking respon operasi
GetPersonTracking
mengembalikan sebuah array, Persons
, objek dari PersonDetection yang berisi detail tentang orang yang terdeteksi dalam video dan kapan lintasannya dilacak.
Anda dapat mengurutkan Persons
dengan menggunakan parameter input SortBy
. Tentukan TIMESTAMP
untuk mengurutkan elemen pada saat lintasan orang dilacak dalam video. Tentukan INDEX
untuk mengurutkan berdasarkan orang yang dilacak dalam video. Dalam setiap rangkaian hasil untuk seseorang, elemen diurutkan berdasarkan kepercayaan dalam keakuratan pelacakan lintasan. Secara default, Persons
dikembalikan dan diurutkan berdasarkan TIMESTAMP
. Berikut ini adalah contoh respons JSON dari GetPersonDetection
. Hasilnya diurutkan berdasarkan waktu, dalam milidetik sejak awal video, lintasan orang yang dilacak dalam video. Dalam respons, perhatikan hal berikut:
-
Informasi orang - Elemen array PersonDetection
berisi informasi tentang orang yang terdeteksi. Misalnya, waktu orang tersebut terdeteksi (Timestamp
), posisi orang tersebut dalam bingkai video pada saat mereka terdeteksi (BoundingBox
), dan seberapa yakin Amazon Rekognition Video bahwa orang tersebut telah terdeteksi dengan benar (Confidence
).
Fitur wajah tidak dikembalikan pada setiap timestamp untuk lintasan orang yang dilacak. Selain itu, di beberapa keadaan, tubuh seseorang yang dilacak mungkin tidak terlihat, dalam hal ini hanya lokasi wajah mereka yang dikembalikan.
-
Informasi halaman - Contoh tersebut menunjukkan satu halaman informasi pendeteksian orang. Anda dapat menentukan berapa banyak elemen orang yang akan dikembalikan di parameter input MaxResults
untuk GetPersonTracking
. Jika ada hasil yang lebih banyak dari MaxResults
, GetPersonTracking
mengembalikan sebuah token (NextToken
) yang digunakan untuk mendapatkan halaman hasil berikutnya. Untuk informasi selengkapnya, lihat Mendapatkan hasil analisis Amazon Rekognition Video.
-
Indeks - Pengidentifikasi unik untuk mengidentifikasi orang tersebut di seluruh video.
-
Informasi video - Tanggapan mencakup informasi tentang format video (VideoMetadata
) di setiap halaman informasi yang dikembalikan oleh 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
}
}