Pfade von Personen - Amazon Rekognition

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Pfade von Personen

Amazon Rekognition Video kann den Pfad von Personen in Videos nachverfolgen und Informationen bereitstellen wie:

  • Die Position von Personen im Videobild zu dem Zeitpunkt, an dem ihr Pfad nachverfolgt wird.

  • Gesichtsmarken wie z. B. die Position des linken Auges, wenn sie entdeckt werden.

Der Amazon-Rekognition-Video-Personen-Pfad in gespeicherten Videos ist eine asynchrone Operation. Um die Pfadierung von Personen in Videos zu starten, rufen Sie aufStartPersonTracking. Das Amazon-Simple-Notification-Service-Thema, zu dem Amazon Rekognition Video die Ergebnisse der Objekterkennung und den Abschlussstatus einer Videoanalyse-Operation veröffentlicht. Wenn die Videoanalyse erfolgreich ist, rufen Sie auf, GetPersonTracking um Ergebnisse der Videoanalyse zu erhalten. Weitere Informationen zum Aufrufen von Amazon-Rekognition-Video-API-Operationen finden Sie unter Amazon-Rekognition-Video-Operationen aufrufen.

Die folgende Prozedur zeigt, wie man den Pfad von Personen durch ein Video, das in einem Amazon-S3-Bucket gespeichert ist, verfolgen kann. Das Beispiel erweitert den Code in Analysieren eines in einem Amazon S3-Bucket gespeicherten Videos mit Java oder Python (SDK), der eine Amazon-Simple-Queue-Service-Warteschlange verwendet, um den Abschlussstatus einer Videoanalyseanforderung zu erhalten.

So erkennen Sie Personen in einem Video, das in einem Amazon-S3-Bucket gespeichert ist (SDK)
  1. Führen Sie Analysieren eines in einem Amazon S3-Bucket gespeicherten Videos mit Java oder Python (SDK) aus.

  2. Fügen Sie den folgenden Code in der Klasse VideoDetect ein, die Sie in Schritt 1 erstellt haben.

    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); }

    Ersetzen Sie in der Funktion main die folgenden Zeilen:

    StartLabelDetection(bucket, video); if (GetSQSMessageSuccess()==true) GetLabelDetectionResults();

    mit:

    StartPersonDetection(bucket, video); if (GetSQSMessageSuccess()==true) GetPersonDetectionResults();
    Java V2

    Dieser Code stammt aus dem AWS Documentation SDK-Beispiel GitHub -Repository. Das vollständige Beispiel finden Sie hier.

    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

    Ersetzen Sie in der Funktion main die folgenden Zeilen:

    analyzer.StartLabelDetection() if analyzer.GetSQSMessageSuccess()==True: analyzer.GetLabelDetectionResults()

    mit:

    analyzer.StartPersonPathing() if analyzer.GetSQSMessageSuccess()==True: analyzer.GetPersonPathingResults()
    CLI

    Führen Sie den folgenden AWS CLI-Befehl aus, um Personen-Pfade in einem Video zu sehen.

    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

    Aktualisieren Sie die folgenden Werte:

    • Ändern Sie bucket-name und video-name in den Amazon-S3-Bucket-Namen und den Dateinamen, die Sie in Schritt 2 angegeben haben.

    • Ändern Sie region-name in die von Ihnen verwendete AWS-Region.

    • Ersetzen Sie den Wert von profile-name in der Zeile, die die Rekognition-Sitzung erstellt, durch den Namen Ihres Entwicklerprofils.

    • Ändern Sie topic-ARN in den ARN des Amazon-S3-Themas, das Sie in Schritt 3 von Amazon Rekognition Video konfigurieren erstellt haben.

    • Ändern Sie role-ARN in den ARN der IAM-Servicerolle, die Sie in Schritt 7 von Amazon Rekognition Video konfigurieren erstellt haben.

    Wenn Sie auf einem Windows-Gerät auf die CLI zugreifen, verwenden Sie doppelte Anführungszeichen anstelle von einfachen Anführungszeichen und maskieren Sie die inneren doppelten Anführungszeichen durch einen Backslash (d. h. \), um eventuell auftretende Parserfehler zu beheben. Ein Beispiel finden Sie unten:

    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

    Nachdem Sie das vorangegangene Codebeispiel ausgeführt haben, kopieren Sie die zurückgegebene jobID und geben Sie sie an den folgenden GetPersonTracking-Befehl weiter, um Ihre Ergebnisse zu erhalten, und ersetzen Sie job-id-number durch jobID, die Sie zuvor erhalten haben:

    aws rekognition get-person-tracking --job-id job-id-number
    Anmerkung

    Wenn Sie zusätzlich zu Analysieren eines in einem Amazon S3-Bucket gespeicherten Videos mit Java oder Python (SDK) bereits ein anderes Videobeispiel ausgeführt haben, ist der zu ersetzende Code möglicherweise anders.

  3. Führen Sie den Code aus. Die eindeutigen Kennungen für getrackte Personen werden zusammen mit der Zeit angezeigt, in Sekunden, in denen der Pfad der Personen getrackt wurde.

GetPersonTracking -Operationsantwort

GetPersonTracking gibt ein Array, Persons, von PersonDetection-Objekten zurück, die Details über die im Video erkannten Personen und den Zeitpunkt der Verfolgung der Pfade enthalten.

Sie können Persons mithilfe der SortBy-Eingabeparameter sortieren. Legen Sie TIMESTAMP fest, um die Elemente nach dem Zeitpunkt zu sortieren, zu dem die Pfade der Personen im Video nachverfolgt werden. Geben Sie INDEX an, um nach den Personen zu sortieren, die im Video getrackt werden. Innerhalb jeder Gruppe von Ergebnissen für eine Person werden die Elemente nach absteigender Zuverlässigkeit der Pfaderkennung sortiert. Standardmäßig wird das zurückgegebene Array Persons nach TIMESTAMP sortiert. Nachfolgend finden Sie ein Beispiel einer JSON-Antwort von GetPersonDetection. Nach der Zeit sortierte Ergebnisse erfolgen in Millisekunden ab dem Beginn des Videos, in dem die Pfade der Personen aufgespürt werden. In der Antwort ist Folgendes zu beachten:

  • Personeninformationen – Das PersonDetection-Arrayelement enthält Informationen über die entdeckte Person. Zum Beispiel die Zeit, zu der die Person erkannt wurde (Timestamp), die Position der Person im Videobild zum Zeitpunkt der Erkennung (BoundingBox) und wie zuversichtlich Amazon Rekognition Video ist, dass die Person korrekt erkannt wurde (Confidence).

    Gesichtsmerkmale werden nicht bei jedem Zeitstempel zurückgegeben, wenn der Pfad der Person getrackt wird. Außerdem kann es unter Umständen vorkommen, dass der Körper einer getrackten Person nicht sichtbar ist, so dass nur ihre Gesichtsposition zurückgegeben wird.

  • Seiteninformationen – Das Beispiel zeigt eine Seite mit Informationen der Personenerkennung. Sie können festlegen, wie viele Personenelemente zurückgegeben werden sollen, durch den Eingabeparameter MaxResults von GetPersonTracking. Wenn mehr Ergebnisse als MaxResults vorhanden sind, gibt GetPersonTracking einen Token zurück (NextToken), der dazu verwendet wird, die nächste Seite mit Ergebnissen zu erhalten. Weitere Informationen finden Sie unter Analyseergebnisse von Amazon Rekognition Video abrufen.

  • Index – Eine eindeutige Kennung für die Erkennung der Person im gesamten Video.

  • Video-Informationen – Die Antwort enthält Informationen über das Videoformat (VideoMetadata) in jeder Seite mit Informationen, die von GetPersonDetection zurückgegeben werden.

{ "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 } }