Mendeteksi label dalam video - Amazon Rekognition

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mendeteksi label dalam video

Amazon Rekognition Video dapat mendeteksi label (objek dan konsep), dan waktu label terdeteksi, dalam video. Untuk contoh kode SDK, lihat Menganalisis video yang disimpan di bucket Amazon S3 dengan Java atau Python (SDK). AWS CLI Sebagai contoh, lihatMenganalisis video dengan AWS Command Line Interface.

Deteksi label dengan Amazon Rekognition Video adalah operasi tidak sinkron. Untuk memulai deteksi label dalam video, hubungi StartLabelDeteksi.

Amazon Rekognition Video menerbitkan status penyelesaian analisis video ke topik Amazon Simple Notification Service. Jika analisis video berhasil, hubungi GetLabelDeteksi untuk mendapatkan label yang terdeteksi. Untuk informasi tentang memanggil operasi API analisis video, lihat Memanggil operasi Amazon Rekognition Video.

StartLabelPermintaan Deteksi

Contoh berikut adalah permintaan untuk StartLabelDetection operasi. Anda menyediakan StartLabelDetection operasi dengan video yang disimpan dalam ember Amazon S3. Dalam permintaan contoh JSON, bucket Amazon S3 dan nama video ditentukan, bersama MinConfidence dengan, FeaturesSettings, dan. NotificationChannel

MinConfidenceadalah keyakinan minimum yang harus dimiliki Video Rekognition Amazon dalam keakuratan label yang terdeteksi, atau kotak pembatas instance (jika terdeteksi), agar dapat dikembalikan dalam respons.

DenganFeatures, Anda dapat menentukan bahwa Anda ingin GENERAL_LABELS dikembalikan sebagai bagian dari respons.

DenganSettings, Anda dapat memfilter item yang dikembalikan untuk GENERAL_LABELS. Untuk label, Anda dapat menggunakan filter inklusif dan eksklusif. Anda juga dapat memfilter berdasarkan label khusus, label individual atau berdasarkan kategori label:

  • LabelInclusionFilters- Digunakan untuk menentukan label mana yang ingin Anda sertakan dalam respons

  • LabelExclusionFilters- Digunakan untuk menentukan label mana yang ingin Anda kecualikan dari respons.

  • LabelCategoryInclusionFilters- Digunakan untuk menentukan kategori label mana yang ingin Anda sertakan dalam respons.

  • LabelCategoryExclusionFilters- Digunakan untuk menentukan kategori label mana yang ingin Anda kecualikan dari respons.

Anda juga dapat menggabungkan filter inklusif dan eksklusif sesuai dengan kebutuhan Anda, tidak termasuk beberapa label atau kategori dan termasuk yang lain.

NotificationChanneladalah ARN dari topik Amazon SNS yang Anda inginkan agar Video Rekognition Amazon mempublikasikan status penyelesaian operasi deteksi label. Jika Anda menggunakan kebijakan AmazonRekognitionServiceRole izin, maka topik Amazon SNS harus memiliki nama topik yang dimulai dengan Rekognition.

Berikut ini adalah contoh StartLabelDetection permintaan dalam bentuk JSON, termasuk filter:

{ "ClientRequestToken": "5a6e690e-c750-460a-9d59-c992e0ec8638", "JobTag": "5a6e690e-c750-460a-9d59-c992e0ec8638", "Video": { "S3Object": { "Bucket": "bucket", "Name": "video.mp4" } }, "Features": ["GENERAL_LABELS"], "MinConfidence": 75, "Settings": { "GeneralLabels": { "LabelInclusionFilters": ["Cat", "Dog"], "LabelExclusionFilters": ["Tiger"], "LabelCategoryInclusionFilters": ["Animals and Pets"], "LabelCategoryExclusionFilters": ["Popular Landmark"] } }, "NotificationChannel": { "RoleArn": "arn:aws:iam::012345678910:role/SNSAccessRole", "SNSTopicArn": "arn:aws:sns:us-east-1:012345678910:notification-topic", } }

GetLabelDetection Respon Operasi

GetLabelDetection mengembalikan array (Labels) yang berisi informasi tentang label yang terdeteksi dalam video. Array dapat diurutkan berdasarkan waktu atau oleh label yang terdeteksi saat menentukan SortBy parameter.Anda juga dapat memilih bagaimana item respons digabungkan dengan menggunakan parameter. AggregateBy

Contoh berikut adalah respons JSON dari GetLabelDetection. Dalam respons, perhatikan hal berikut:

  • Urutkan sesuai urutan - array label yang dikembalikan diurutkan berdasarkan waktu. Untuk mengurutkan berdasarkan label, tentukan NAME dalam parameter input SortBy untuk GetLabelDetection. Jika label muncul beberapa kali dalam video, akan ada beberapa contoh elemen () LabelDetection. Urutan oder default adalahTIMESTAMP, sedangkan urutan urutan sekunder adalahNAME.

  • Informasi label - Elemen LabelDetection array berisi objek (Label), yang pada gilirannya berisi nama label dan kepercayaan Amazon Rekognition dalam keakuratan label yang terdeteksi. Sebuah Label objek juga mencakup taksonomi hierarkis label dan informasi kotak pembatas untuk label umum. Timestampadalah waktu label terdeteksi, didefinisikan sebagai jumlah milidetik yang berlalu sejak awal video.

    Informasi tentang Kategori atau Alias apa pun yang terkait dengan label juga dikembalikan. Untuk hasil yang dikumpulkan berdasarkan video SEGMENTSStartTimestampMillis, DurationMillis strukturEndTimestampMillis, dan dikembalikan, yang menentukan waktu mulai, waktu akhir, dan durasi segmen masing-masing.

  • Agregasi - Menentukan bagaimana hasil dikumpulkan ketika dikembalikan. Defaultnya adalah agregat denganTIMESTAMPS. Anda juga dapat memilih untuk agregat menurutSEGMENTS, yang mengumpulkan hasil melalui jendela waktu. Jika digabungkan denganSEGMENTS, informasi tentang instance yang terdeteksi dengan kotak pembatas tidak dikembalikan. Hanya label yang terdeteksi selama segmen yang dikembalikan.

  • Informasi halaman - Contoh menunjukkan satu halaman informasi deteksi label. Anda dapat menentukan berapa banyak objek LabelDetection yang akan dikembalikan dalam parameter input MaxResults untuk GetLabelDetection. Jika ada lebih banyak hasil daripada MaxResults, GetLabelDetection mengembalikan token (NextToken) yang digunakan untuk mendapatkan halaman hasil berikutnya. Untuk informasi selengkapnya, lihat Mendapatkan hasil analisis Amazon Rekognition Video.

  • Informasi video - Respons mencakup informasi tentang format video (VideoMetadata) di setiap halaman informasi yang dikembalikan oleh GetLabelDetection.

Berikut ini adalah contoh GetLabelDetection respons dalam bentuk JSON dengan agregasi oleh TIMESTAMPS:

{ "JobStatus": "SUCCEEDED", "LabelModelVersion": "3.0", "Labels": [ { "Timestamp": 1000, "Label": { "Name": "Car", "Categories": [ { "Name": "Vehicles and Automotive" } ], "Aliases": [ { "Name": "Automobile" } ], "Parents": [ { "Name": "Vehicle" } ], "Confidence": 99.9364013671875, // Classification confidence "Instances": [ { "BoundingBox": { "Width": 0.26779675483703613, "Height": 0.8562285900115967, "Left": 0.3604024350643158, "Top": 0.09245597571134567 }, "Confidence": 99.9364013671875 // Detection confidence } ] } }, { "Timestamp": 1000, "Label": { "Name": "Cup", "Categories": [ { "Name": "Kitchen and Dining" } ], "Aliases": [ { "Name": "Mug" } ], "Parents": [], "Confidence": 99.9364013671875, // Classification confidence "Instances": [ { "BoundingBox": { "Width": 0.26779675483703613, "Height": 0.8562285900115967, "Left": 0.3604024350643158, "Top": 0.09245597571134567 }, "Confidence": 99.9364013671875 // Detection confidence } ] } }, { "Timestamp": 2000, "Label": { "Name": "Kangaroo", "Categories": [ { "Name": "Animals and Pets" } ], "Aliases": [ { "Name": "Wallaby" } ], "Parents": [ { "Name": "Mammal" } ], "Confidence": 99.9364013671875, "Instances": [ { "BoundingBox": { "Width": 0.26779675483703613, "Height": 0.8562285900115967, "Left": 0.3604024350643158, "Top": 0.09245597571134567, }, "Confidence": 99.9364013671875 } ] } }, { "Timestamp": 4000, "Label": { "Name": "Bicycle", "Categories": [ { "Name": "Hobbies and Interests" } ], "Aliases": [ { "Name": "Bike" } ], "Parents": [ { "Name": "Vehicle" } ], "Confidence": 99.9364013671875, "Instances": [ { "BoundingBox": { "Width": 0.26779675483703613, "Height": 0.8562285900115967, "Left": 0.3604024350643158, "Top": 0.09245597571134567 }, "Confidence": 99.9364013671875 } ] } } ], "VideoMetadata": { "ColorRange": "FULL", "DurationMillis": 5000, "Format": "MP4", "FrameWidth": 1280, "FrameHeight": 720, "FrameRate": 24 } }

Berikut ini adalah contoh GetLabelDetection respon dalam bentuk JSON dengan agregasi oleh SEGMENTS:

{ "JobStatus": "SUCCEEDED", "LabelModelVersion": "3.0", "Labels": [ { "StartTimestampMillis": 225, "EndTimestampMillis": 3578, "DurationMillis": 3353, "Label": { "Name": "Car", "Categories": [ { "Name": "Vehicles and Automotive" } ], "Aliases": [ { "Name": "Automobile" } ], "Parents": [ { "Name": "Vehicle" } ], "Confidence": 99.9364013671875 // Maximum confidence score for Segment mode } }, { "StartTimestampMillis": 7578, "EndTimestampMillis": 12371, "DurationMillis": 4793, "Label": { "Name": "Kangaroo", "Categories": [ { "Name": "Animals and Pets" } ], "Aliases": [ { "Name": "Wallaby" } ], "Parents": [ { "Name": "Mammal" } ], "Confidence": 99.9364013671875 } }, { "StartTimestampMillis": 22225, "EndTimestampMillis": 22578, "DurationMillis": 2353, "Label": { "Name": "Bicycle", "Categories": [ { "Name": "Hobbies and Interests" } ], "Aliases": [ { "Name": "Bike" } ], "Parents": [ { "Name": "Vehicle" } ], "Confidence": 99.9364013671875 } } ], "VideoMetadata": { "ColorRange": "FULL", "DurationMillis": 5000, "Format": "MP4", "FrameWidth": 1280, "FrameHeight": 720, "FrameRate": 24 } }

Mengubah Respon GetLabelDetection

Saat mengambil hasil dengan operasi GetLabelDetection API, Anda mungkin memerlukan struktur respons untuk meniru struktur respons API yang lebih lama, di mana label utama dan alias terkandung dalam daftar yang sama.

Contoh respons JSON yang ditemukan di bagian sebelumnya menampilkan bentuk respons API saat ini dari. GetLabelDetection

Contoh berikut menunjukkan respons sebelumnya dari GetLabelDetection API:

{ "Labels": [ { "Timestamp": 0, "Label": { "Instances": [], "Confidence": 60.51791763305664, "Parents": [], "Name": "Leaf" } }, { "Timestamp": 0, "Label": { "Instances": [], "Confidence": 99.53411102294922, "Parents": [], "Name": "Human" } }, { "Timestamp": 0, "Label": { "Instances": [ { "BoundingBox": { "Width": 0.11109819263219833, "Top": 0.08098889887332916, "Left": 0.8881205320358276, "Height": 0.9073750972747803 }, "Confidence": 99.5831298828125 }, { "BoundingBox": { "Width": 0.1268676072359085, "Top": 0.14018426835536957, "Left": 0.0003282368124928324, "Height": 0.7993982434272766 }, "Confidence": 99.46029663085938 } ], "Confidence": 99.63411102294922, "Parents": [], "Name": "Person" } }, . . . { "Timestamp": 166, "Label": { "Instances": [], "Confidence": 73.6471176147461, "Parents": [ { "Name": "Clothing" } ], "Name": "Sleeve" } } ], "LabelModelVersion": "2.0", "JobStatus": "SUCCEEDED", "VideoMetadata": { "Format": "QuickTime / MOV", "FrameRate": 23.976024627685547, "Codec": "h264", "DurationMillis": 5005, "FrameHeight": 674, "FrameWidth": 1280 } }

Jika diperlukan, Anda dapat mengubah respons saat ini untuk mengikuti format respons yang lebih lama. Anda dapat menggunakan kode contoh berikut untuk mengubah respons API terbaru ke struktur respons API sebelumnya:

from copy import deepcopy VIDEO_LABEL_KEY = "Labels" LABEL_KEY = "Label" ALIASES_KEY = "Aliases" INSTANCE_KEY = "Instances" NAME_KEY = "Name" #Latest API response sample for AggregatedBy SEGMENTS EXAMPLE_SEGMENT_OUTPUT = { "Labels": [ { "Timestamp": 0, "Label":{ "Name": "Person", "Confidence": 97.530106, "Parents": [], "Aliases": [ { "Name": "Human" }, ], "Categories": [ { "Name": "Person Description" } ], }, "StartTimestampMillis": 0, "EndTimestampMillis": 500666, "DurationMillis": 500666 }, { "Timestamp": 6400, "Label": { "Name": "Leaf", "Confidence": 89.77790069580078, "Parents": [ { "Name": "Plant" } ], "Aliases": [], "Categories": [ { "Name": "Plants and Flowers" } ], }, "StartTimestampMillis": 6400, "EndTimestampMillis": 8200, "DurationMillis": 1800 }, ] } #Output example after the transformation for AggregatedBy SEGMENTS EXPECTED_EXPANDED_SEGMENT_OUTPUT = { "Labels": [ { "Timestamp": 0, "Label":{ "Name": "Person", "Confidence": 97.530106, "Parents": [], "Aliases": [ { "Name": "Human" }, ], "Categories": [ { "Name": "Person Description" } ], }, "StartTimestampMillis": 0, "EndTimestampMillis": 500666, "DurationMillis": 500666 }, { "Timestamp": 6400, "Label": { "Name": "Leaf", "Confidence": 89.77790069580078, "Parents": [ { "Name": "Plant" } ], "Aliases": [], "Categories": [ { "Name": "Plants and Flowers" } ], }, "StartTimestampMillis": 6400, "EndTimestampMillis": 8200, "DurationMillis": 1800 }, { "Timestamp": 0, "Label":{ "Name": "Human", "Confidence": 97.530106, "Parents": [], "Categories": [ { "Name": "Person Description" } ], }, "StartTimestampMillis": 0, "EndTimestampMillis": 500666, "DurationMillis": 500666 }, ] } #Latest API response sample for AggregatedBy TIMESTAMPS EXAMPLE_TIMESTAMP_OUTPUT = { "Labels": [ { "Timestamp": 0, "Label": { "Name": "Person", "Confidence": 97.530106, "Instances": [ { "BoundingBox": { "Height": 0.1549897, "Width": 0.07747964, "Top": 0.50858885, "Left": 0.00018205095 }, "Confidence": 97.530106 }, ], "Parents": [], "Aliases": [ { "Name": "Human" }, ], "Categories": [ { "Name": "Person Description" } ], }, }, { "Timestamp": 6400, "Label": { "Name": "Leaf", "Confidence": 89.77790069580078, "Instances": [], "Parents": [ { "Name": "Plant" } ], "Aliases": [], "Categories": [ { "Name": "Plants and Flowers" } ], }, }, ] } #Output example after the transformation for AggregatedBy TIMESTAMPS EXPECTED_EXPANDED_TIMESTAMP_OUTPUT = { "Labels": [ { "Timestamp": 0, "Label": { "Name": "Person", "Confidence": 97.530106, "Instances": [ { "BoundingBox": { "Height": 0.1549897, "Width": 0.07747964, "Top": 0.50858885, "Left": 0.00018205095 }, "Confidence": 97.530106 }, ], "Parents": [], "Aliases": [ { "Name": "Human" }, ], "Categories": [ { "Name": "Person Description" } ], }, }, { "Timestamp": 6400, "Label": { "Name": "Leaf", "Confidence": 89.77790069580078, "Instances": [], "Parents": [ { "Name": "Plant" } ], "Aliases": [], "Categories": [ { "Name": "Plants and Flowers" } ], }, }, { "Timestamp": 0, "Label": { "Name": "Human", "Confidence": 97.530106, "Parents": [], "Categories": [ { "Name": "Person Description" } ], }, }, ] } def expand_aliases(inferenceOutputsWithAliases): if VIDEO_LABEL_KEY in inferenceOutputsWithAliases: expandInferenceOutputs = [] for segmentLabelDict in inferenceOutputsWithAliases[VIDEO_LABEL_KEY]: primaryLabelDict = segmentLabelDict[LABEL_KEY] if ALIASES_KEY in primaryLabelDict: for alias in primaryLabelDict[ALIASES_KEY]: aliasLabelDict = deepcopy(segmentLabelDict) aliasLabelDict[LABEL_KEY][NAME_KEY] = alias[NAME_KEY] del aliasLabelDict[LABEL_KEY][ALIASES_KEY] if INSTANCE_KEY in aliasLabelDict[LABEL_KEY]: del aliasLabelDict[LABEL_KEY][INSTANCE_KEY] expandInferenceOutputs.append(aliasLabelDict) inferenceOutputsWithAliases[VIDEO_LABEL_KEY].extend(expandInferenceOutputs) return inferenceOutputsWithAliases if __name__ == "__main__": segmentOutputWithExpandAliases = expand_aliases(EXAMPLE_SEGMENT_OUTPUT) assert segmentOutputWithExpandAliases == EXPECTED_EXPANDED_SEGMENT_OUTPUT timestampOutputWithExpandAliases = expand_aliases(EXAMPLE_TIMESTAMP_OUTPUT) assert timestampOutputWithExpandAliases == EXPECTED_EXPANDED_TIMESTAMP_OUTPUT