

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

# Mendeteksi segmen video dalam video yang tersimpan
<a name="segments"></a>

Amazon Rekognition Video menyediakan API yang mengidentifikasi segmen video yang berguna, seperti bingkai hitam dan kredit akhir. 

Penampil menonton lebih banyak konten dari sebelumnya. Secara khusus, platform Over-The-Top (OTT) dan Video-On-Demand (VOD) menyediakan banyak pilihan konten kapan saja, di mana saja, dan di layar mana pun. Dengan volume konten yang terus bertambah, perusahaan media menghadapi tantangan dalam mempersiapkan dan mengelola konten mereka. Hal ini sangat penting untuk memberikan pengalaman menonton berkualitas tinggi dan konten monetisasi yang lebih baik. Saat ini, perusahaan menggunakan tim besar yang terdiri dari tenaga kerja manusia terlatih untuk melakukan tugas-tugas seperti berikut.
+ Menemukan di mana kredit pembukaan dan akhir berada dalam sepotong konten
+ Memilih tempat yang tepat untuk menyisipkan iklan, seperti dalam urutan bingkai hitam diam
+ Memecah video menjadi klip yang lebih kecil untuk pengindeksan yang lebih baik

Proses manual ini mahal, lambat, dan tidak dapat disesuaikan dengan volume konten yang diproduksi, dilisensikan, dan diambil dari arsip setiap hari.

Anda dapat menggunakan Amazon Rekognition Video untuk mengotomatiskan tugas analisis media operasional menggunakan deteksi APIs segmen video yang dikelola sepenuhnya dan dibuat khusus yang didukung oleh pembelajaran mesin (ML). Dengan menggunakan segmen Amazon Rekognition Video APIs, Anda dapat dengan mudah menganalisis volume besar video dan mendeteksi spidol seperti bingkai hitam atau perubahan bidikan. Anda mendapatkan kode waktu, stempel waktu, dan nomor bingkai SMPTE (Society of Motion Picture and Television Engineers) dari setiap deteksi. Tidak diperlukan pengalaman ML. 

Amazon Rekognition Video menganalisis video yang disimpan dalam bucket Amazon Simple Storage Service (Amazon S3). Kode waktu SMPTE yang dikembalikan akurat dalam bingkai - Amazon Rekognition Video menyediakan nomor bingkai yang tepat dari segmen video yang terdeteksi, dan menangani berbagai format frame rate video secara otomatis. Anda dapat menggunakan metadata akurat bingkai dari Amazon Rekognition Video untuk mengotomatiskan tugas tertentu sepenuhnya, atau untuk secara signifikan mengurangi beban kerja peninjauan operator manusia terlatih, sehingga mereka dapat fokus pada pekerjaan yang lebih kreatif. Anda dapat melakukan tugas-tugas seperti menyiapkan konten, menyisipkan iklan, dan menambahkan “binge-marker” ke konten dalam skala besar di cloud. 

Untuk informasi lengkap tentang harga, lihat [harga Amazon Rekognition](https://aws.amazon.com/rekognition/pricing/).

Deteksi segmen Video Rekognition Amazon mendukung dua jenis tugas segmentasi — deteksi dan. [Isyarat teknis](#segment-technical-cue) [Deteksi sorotan](#segment-shot-detection) 

**Topics**
+ [Isyarat teknis](#segment-technical-cue)
+ [Deteksi sorotan](#segment-shot-detection)
+ [Tentang API deteksi Segmen Video Rekognition Amazon](#segment-api-intro)
+ [Menggunakan API Segmen Amazon Rekognition](segment-api.md)
+ [Contoh: Mendeteksi segmen dalam video yang tersimpan](segment-example.md)

## Isyarat teknis
<a name="segment-technical-cue"></a>

*Isyarat teknis* mengidentifikasi bingkai hitam, bilah warna, kredit pembuka, kredit akhir, logo studio, dan konten program utama dalam video. 

### Frame hitam
<a name="segment-black-frame"></a>

Video sering berisi bingkai hitam kosong tanpa audio yang digunakan sebagai isyarat untuk menyisipkan iklan, atau untuk menandai akhir segmen program, seperti adegan atau kredit pembuka. Dengan Amazon Rekognition Video, Anda dapat mendeteksi urutan bingkai hitam untuk mengotomatiskan penyisipan iklan, konten paket untuk VOD, dan membatasi berbagai segmen atau adegan program. Bingkai hitam dengan audio (seperti memudar atau pengisi suara) dianggap sebagai konten dan tidak dikembalikan. 

### Kredit
<a name="segment-credits"></a>

Amazon Rekognition Video dapat secara otomatis mengidentifikasi frame yang tepat di mana kredit pembukaan dan penutupan dimulai dan berakhir untuk film atau acara TV. Dengan informasi ini, Anda dapat menghasilkan “penanda pesta” atau petunjuk penampil interaktif, seperti “Episode Berikutnya""Atau “Lewati Intro,” dalam aplikasi video on demand (VOD). Anda juga dapat mendeteksi bingkai pertama dan terakhir dari konten program dalam video. Amazon Rekognition Video dilatih untuk menangani berbagai macam gaya kredit pembukaan dan akhir mulai dari kredit bergulir sederhana hingga kredit yang lebih menantang di samping konten. 

### Diagram warna
<a name="segment-color-bar"></a>

Amazon Rekognition Video memungkinkan Anda untuk mendeteksi bagian video yang menampilkan diagram warna SMPTE, yang merupakan seperangkat warna yang ditampilkan dalam pola tertentu untuk memastikan warna dikalibrasi dengan benar pada monitor siaran, program, dan kamera. Untuk informasi selengkapnya tentang diagram warna SMPTE, lihat [Bilah warna SMPTE](https://en.wikipedia.org/wiki/SMPTE_color_bars). Metadata ini berguna untuk mempersiapkan konten untuk aplikasi VOD dengan menghapus segmen diagram warna dari konten, atau untuk mendeteksi masalah seperti hilangnya sinyal siaran dalam rekaman, ketika diagram warna ditampilkan terus menerus sebagai sinyal default bukan konten.

### Papan tulis
<a name="segment-slates"></a>

Slate adalah bagian dari video, biasanya di dekat awal, yang berisi metadata teks tentang episode, studio, format video, saluran audio, dan banyak lagi. Amazon Rekognition Video dapat mengidentifikasi awal dan akhir papan tulis, sehingga mudah untuk menggunakan metadata teks atau menghapus batu tulis saat menyiapkan konten untuk tampilan akhir.

### Logo studio
<a name="segment-logos"></a>

Logo studio adalah urutan yang menunjukkan logo atau lambang studio produksi yang terlibat dalam pembuatan pertunjukan. Amazon Rekognition Video dapat mendeteksi urutan ini sehingga pengguna dapat memeriksanya untuk mengidentifikasi studio.

### Daftar isi
<a name="segment-content"></a>

Konten adalah bagian dari acara TV atau film yang berisi program atau elemen terkait. Bingkai hitam, kredit, bilah warna, papan tulis, dan logo studio tidak dianggap konten. Amazon Rekognition Video dapat mendeteksi awal dan akhir setiap segmen konten dalam video, sehingga Anda dapat menemukan waktu berjalan program atau segmen tertentu.

Segmen konten mencakup, tetapi tidak terbatas pada, hal-hal berikut:
+ Adegan program antara dua jeda iklan
+ Rekap singkat dari episode sebelumnya di awal video
+ Konten bonus pasca-kredit 
+ Konten “tanpa teks”, seperti sekumpulan semua adegan program yang awalnya berisi teks overlay, tetapi teks telah dihapus untuk mendukung terjemahan ke bahasa lain.

Setelah Amazon Rekognition Video selesai mendeteksi semua segmen konten, Anda dapat menerapkan pengetahuan domain atau mengirimkannya untuk ditinjau manusia untuk mengkategorikan lebih lanjut setiap segmen. Misalnya, jika Anda menggunakan video yang selalu dimulai dengan rekap, Anda dapat mengkategorikan segmen konten pertama sebagai rekap.

Diagram berikut menunjukkan segmen isyarat teknis pada garis waktu acara atau film. Perhatikan bilah warna dan kredit pembuka, segmen konten seperti rekap dan program utama, bingkai hitam di seluruh video, dan kredit akhir. 

![\[Bilah warna, segmen rekap, dua segmen konten program, dan bingkai hitam yang mewakili garis waktu pertunjukan atau film.\]](http://docs.aws.amazon.com/id_id/rekognition/latest/dg/images/technical-cue.png)


## Deteksi sorotan
<a name="segment-shot-detection"></a>

Sorotan adalah serangkaian citra berturut-turut yang saling terkait, yang diambil secara bersebelahan oleh satu kamera dan mewakili tindakan berkesinambungan dalam ruang dan waktu. Dengan Amazon Rekognition Video, Anda dapat mendeteksi awal, akhir, dan durasi setiap sorotan, serta hitungan untuk semua sorotan dalam sepotong konten. Anda dapat menggunakan metadata sorotan untuk tugas-tugas seperti berikut. 
+ Membuat video promosi menggunakan citra yang dipilih.
+ Memasukkan iklan di lokasi yang tidak mengganggu pengalaman penampil, seperti tengah sorotan saat seseorang berbicara. 
+ Menghasilkan set citra mini pratinjau yang menghindari konten transisi di antara sorotan.

Deteksi sorotan ditandai pada bingkai yang tepat, tempat terdapat potongan kasar pada kamera yang berbeda. Jika ada transisi halus dari satu kamera ke kamera lain, Amazon Rekognition Video menghilangkan transisi. Hal ini memastikan bahwa waktu mulai dan akhir sorotan tidak memasukan bagian tanpa konten yang sebenarnya.

Diagram berikut menggambarkan segmen deteksi sorotan pada strip film. Perhatikan bahwa setiap sorotan diidentifikasi dengan potongan dari satu sudut kamera atau lokasi ke lokasi berikutnya. 

![\[Tujuh foto bernomor yang menunjukkan jalan-jalan kota, dasbor mobil, jalur hutan, seorang anak, bayi perempuan, danau matahari terbenam dengan siluet fotografer.\]](http://docs.aws.amazon.com/id_id/rekognition/latest/dg/images/shot-detection.png)


## Tentang API deteksi Segmen Video Rekognition Amazon
<a name="segment-api-intro"></a>

Untuk mengelompokkan video tersimpan, Anda menggunakan operasi asinkron [StartSegmentDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartSegmentDetection.html)dan [GetSegmentDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetSegmentDetection.html)API untuk memulai pekerjaan segmentasi dan mengambil hasilnya. Deteksi segmen menerima video yang disimpan dalam bucket Amazon S3 dan mengembalikan output JSON. Anda dapat memilih untuk mendeteksi hanya isyarat teknis, hanya memotret perubahan, atau keduanya bersama-sama dengan mengonfigurasi permintaan `StartSegmentdetection` API. Anda juga dapat memfilter segmen yang terdeteksi dengan mengatur ambang batas untuk kepercayaan prediksi minimum. Untuk informasi selengkapnya, lihat [Menggunakan API Segmen Amazon Rekognition](segment-api.md). Untuk kode sampel, lihat [Contoh: Mendeteksi segmen dalam video yang tersimpan](segment-example.md). 

# Menggunakan API Segmen Amazon Rekognition
<a name="segment-api"></a>

Deteksi segmen Amazon Rekognition Video dalam video yang disimpan adalah operasi Amazon Rekognition Video yang tidak sinkron. API Segmen Amazon Rekognition adalah API komposit tempat Anda memilih tipe analisis (isyarat teknis atau deteksi sorotan) dari satu panggilan API. Untuk informasi tentang memanggil operasi yang tidak sinkron, lihat [Memanggil operasi Amazon Rekognition Video](api-video.md).

**Topics**
+ [Memulai analisis segmen](#segment-api-start)
+ [Mendapatkan hasil analisis segmen](#segment-api-get)

## Memulai analisis segmen
<a name="segment-api-start"></a>

Untuk memulai deteksi segmen dalam video yang tersimpan panggil [StartSegmentDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartSegmentDetection.html). Parameter input yang sama seperti operasi Amazon Rekognition Video lainnya dengan penambahan seleksi tipe segmen dan pemfilteran hasil. Untuk informasi selengkapnya, lihat [Memulai analisis video](api-video.md#api-video-start).

Berikut ini adalah contoh JSON diteruskan oleh `StartSegmentDetection`. Permintaan menyatakan bahwa kedua isyarat teknis dan segmen deteksi sorotan terdeteksi. Filter yang berbeda untuk kepercayaan pendeteksian minimum diminta untuk segmen isyarat teknis (90%) dan segmen deteksi bidikan (80%).

```
{
  "Video": {
    "S3Object": {
      "Bucket": "test_files",
      "Name": "test_file.mp4"
    }
    "SegmentTypes":["TECHNICAL_CUES", "SHOT"]
    "Filters": {
      "TechnicalCueFilter": {
         "MinSegmentConfidence": 90,
         "BlackFrame" : {
            "MaxPixelThreshold": 0.1,
            "MinCoveragePercentage": 95     
         }
      },
      "ShotFilter" : {
          "MinSegmentConfidence": 60
      }
  }
}
```

### Memilih tipe segmen
<a name="segment-feature-type"></a>

Gunakan parameter input `SegmentTypes` array untuk mendeteksi segmen deteksi cue and/or shot teknis dalam video input. 
+ TECHNICAL\$1CUE — mengidentifikasi stempel waktu akurat bingkai untuk awal, akhir, dan durasi isyarat teknis (bingkai hitam, bilah warna, kredit pembuka, kredit akhir, logo studio, dan konten program utama) yang terdeteksi dalam video. Misalnya, Anda dapat menggunakan isyarat teknis untuk menemukan awal kredit akhir. Untuk informasi selengkapnya, lihat [Isyarat teknis](segments.md#segment-technical-cue).
+ SHOT — Mengidentifikasi awal, akhir, dan durasi sorotan. Misalnya, Anda dapat menggunakan deteksi pengambilan citra untuk mengidentifikasi calon sorotan untuk pengeditan akhir video. Untuk informasi selengkapnya, lihat [Deteksi sorotan](segments.md#segment-shot-detection).

### Memfilter hasil analisis
<a name="w2aac43c29b7c11"></a>

Anda dapat menggunakan parameter input `Filters` ([StartSegmentDetectionFilters](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartSegmentDetectionFilters.html)) untuk menentukan kepercayaan deteksi minimum yang dikembalikan dalam respons. Dalam `Filters`, gunakan `ShotFilter` ([StartShotDetectionFilter](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartShotDetectionFilter.html)) untuk memfilter bidikan yang terdeteksi. Gunakan `TechnicalCueFilter` ([StartTechnicalCueDetectionFilter](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartTechnicalCueDetectionFilter.html)) untuk memfilter isyarat teknis. 

Untuk kode sampel, lihat [Contoh: Mendeteksi segmen dalam video yang tersimpan](segment-example.md).

## Mendapatkan hasil analisis segmen
<a name="segment-api-get"></a>

Amazon Rekognition Video menerbitkan status penyelesaian analisis video ke topik Amazon Simple Notification Service. Jika analisis video berhasil, hubungi [GetSegmentDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetSegmentDetection.html)untuk mendapatkan hasil analisis video. 

Berikut ini adalah contoh permintaan `GetSegmentDetection`. `JobId` adalah pengenal tugas yang dikembalikan dari panggilan ke `StartSegmentDetection`. Untuk informasi tentang mengatur parameter, lihat [Mendapatkan hasil analisis Amazon Rekognition Video](api-video.md#api-video-get). 

```
{
    "JobId": "270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1784ca90fc180e3",
    "MaxResults": 10,
    "NextToken": "XfXnZKiyMOGDhzBzYUhS5puM+g1IgezqFeYpv/H/+5noP/LmM57FitUAwSQ5D6G4AB/PNwolrw=="
}
```

`GetSegmentDetection` memberikan hasil untuk analisis yang diminta dan informasi umum tentang video yang disimpan. 

### Informasi umum
<a name="segment-api-general"></a>

`GetSegmentDection` mengembalikan informasi umum berikut.
+ **Informasi audio** — Respons meliputi metadata audio dalam array, `AudioMetadata`, dari objek [AudioMetadata](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_AudioMetadata.html). Ada beberapa aliran audio. Setiap objek `AudioMetadata` berisi metadata untuk aliran audio tunggal. Informasi audio di objek `AudioMetadata` termasuk codec audio, jumlah saluran audio, durasi pengaliran audio, dan laju sampel. Metadata audio dikembalikan di setiap halaman informasi yang dikembalikan oleh `GetSegmentDetection`.
+ **Informasi video** — Saat ini, Amazon Rekognition Video mengembalikan satu objek [VideoMetadata](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_VideoMetadata.html) di array `VideoMetadata`. Objek berisi informasi tentang pengaliran video dalam file input yang Amazon Rekognition Video pilih untuk dianalisis. Objek `VideoMetadata` mancakup codec video, format video dan informasi lainnya. Metadata video dikembalikan di setiap halaman informasi yang dikembalikan oleh `GetSegmentDetection`.
+ **Informasi halaman** — Contoh tersebut menunjukkan satu halaman informasi segmen. Anda dapat menentukan berapa banyak elemen yang bisa dikembalikan dalam parameter input `MaxResults` untuk `GetSegmentDetection`. Jika hasilnya lebih dari `MaxResults`, `GetSegmentDetection` mengembalikan sebuah token (`NextToken`) yang digunakan untuk mendapatkan halaman hasil berikutnya. Untuk informasi selengkapnya, lihat [Mendapatkan hasil analisis Amazon Rekognition Video](api-video.md#api-video-get).
+ **Meminta informasi** — tipe analisis yang diminta dalam panggilan ke `StartSegmentDetection` dikembalikan dalam bidang `SelectedSegmentTypes`.

### Segmen
<a name="segment-api-technical-segments"></a>

Petunjuk teknis dan informasi sorotan terdeteksi dalam video dikembalikan dalam array, `Segments`, dari objek [SegmentDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_SegmentDetection.html). Array diurutkan berdasarkan tipe segmen (TECHNICAL\$1CUE atau SHOT) yang ditentukan dalam parameter input `SegmentTypes` dari `StartSegmentDetection`. Dalam setiap tipe segmen, array diurutkan berdasarkan nilai-nilai timestamp. Setiap objek `SegmentDetection` meliputi informasi tentang tipe segmen yang terdeteksi (isyarat Teknis atau deteksi sorotan) dan informasi umum, seperti waktu mulai, waktu akhir, dan durasi segmen. 

Informasi waktu dikembalikan dalam tiga format.
+ 

**Milidetik**  
Jumlah milidetik sejak awal video. Format bidang `DurationMillis`, `StartTimestampMillis`, dan `EndTimestampMillis` adalah milidetik.
+ 

**Timecode**  
Format Amazon Rekognition Video timecodes adalah [SMPTE](https://en.wikipedia.org/wiki/SMPTE_timecode) yang memungkinkan setiap frame video memiliki nilai kode waktu yang unik. Formatnya adalah *jj:mm:dd:bingkai*. Misalnya, nilai kode waktu 01:05:40:07, akan dibaca sebagai satu jam, lima menit, empat puluh detik dan tujuh frame. Kasus penggunaan kecepatan [frame yang menurun](https://en.wikipedia.org/wiki/SMPTE_timecode#Drop-frame_timecode) didukung oleh Amazon Rekognition Video. Format timecode tingkat pengurangan adalah *jj:mm:dd;bingkai*. Format bidang `DurationSMPTE`, `StartTimecodeSMPTE`, dan `EndTimecodeSMPTE` adalah timecode.
+ 

**Penghitung Bingkai**  
Durasi setiap segmen video juga dinyatakan dengan jumlah frame. Bidang `StartFrameNumber` memberikan nomor bingkai di awal segmen video, dan `EndFrameNumber` memberikan nomor bingkai di akhir segmen video. `DurationFrames`memberikan jumlah total frame dalam segmen video. Nilai-nilai ini dihitung menggunakan indeks bingkai yang dimulai dengan 0.

Anda dapat menggunakan bidang `SegmentType` untuk menentukan tipe segmen yang dikembalikan oleh Amazon Rekognition Video.
+ **Isyarat Teknis** — bidang `TechnicalCueSegment` adalah objek [TechnicalCueSegment](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_TechnicalCueSegment.html) yang berisi kepercayaan deteksi dan tipe isyarat teknis. Jenis-jenis isyarat teknis adalah`ColorBars`,,`EndCredits`,`BlackFrames`,`OpeningCredits`, `StudioLogo``Slate`, dan`Content`.
+ **Sorotan** — bidang `ShotSegment` adalah objek [ShotSegment](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_ShotSegment.html) yang berisi kepercayaan deteksi dan pengenal untuk segmen sorotan dalam video.

 Berikut ini adalah contoh respons JSON dari `GetSegmentDetection`. 

```
{
    "SelectedSegmentTypes": [
        {
            "ModelVersion": "2.0",
            "Type": "SHOT"
        },
        {
            "ModelVersion": "2.0",
            "Type": "TECHNICAL_CUE"
        }
    ],
    "Segments": [
        {
            "DurationFrames": 299,
            "DurationSMPTE": "00:00:09;29",
            "StartFrameNumber": 0,
            "EndFrameNumber": 299,
            "EndTimecodeSMPTE": "00:00:09;29",
            "EndTimestampMillis": 9976,
            "StartTimestampMillis": 0,
            "DurationMillis": 9976,
            "StartTimecodeSMPTE": "00:00:00;00",
            "Type": "TECHNICAL_CUE",
            "TechnicalCueSegment": {
                "Confidence": 90.45006561279297,
                "Type": "BlackFrames"
            }
        },
        {
            "DurationFrames": 150,
            "DurationSMPTE": "00:00:05;00",
            "StartFrameNumber": 299,
            "EndFrameNumber": 449,
            "EndTimecodeSMPTE": "00:00:14;29",
            "EndTimestampMillis": 14981,
            "StartTimestampMillis": 9976,
            "DurationMillis": 5005,
            "StartTimecodeSMPTE": "00:00:09;29",
            "Type": "TECHNICAL_CUE",
            "TechnicalCueSegment": {
                "Confidence": 100.0,
                "Type": "Content"
            }
        },
        {
            "DurationFrames": 299,
            "ShotSegment": {
                "Index": 0,
                "Confidence": 99.9982681274414
            },
            "DurationSMPTE": "00:00:09;29",
            "StartFrameNumber": 0,
            "EndFrameNumber": 299,
            "EndTimecodeSMPTE": "00:00:09;29",
            "EndTimestampMillis": 9976,
            "StartTimestampMillis": 0,
            "DurationMillis": 9976,
            "StartTimecodeSMPTE": "00:00:00;00",
            "Type": "SHOT"
        },
        {
            "DurationFrames": 149,
            "ShotSegment": {
                "Index": 1,
                "Confidence": 99.9982681274414
            },
            "DurationSMPTE": "00:00:04;29",
            "StartFrameNumber": 300,
            "EndFrameNumber": 449,
            "EndTimecodeSMPTE": "00:00:14;29",
            "EndTimestampMillis": 14981,
            "StartTimestampMillis": 10010,
            "DurationMillis": 4971,
            "StartTimecodeSMPTE": "00:00:10;00",
            "Type": "SHOT"
        }
    ],
    "JobStatus": "SUCCEEDED",
    "VideoMetadata": [
        {
            "Format": "QuickTime / MOV",
            "FrameRate": 29.970029830932617,
            "Codec": "h264",
            "DurationMillis": 15015,
            "FrameHeight": 1080,
            "FrameWidth": 1920,
            "ColorRange": "LIMITED"

        }
    ],
    "AudioMetadata": [
        {
            "NumberOfChannels": 1,
            "SampleRate": 48000,
            "Codec": "aac",
            "DurationMillis": 15007
        }
    ]
}
```

Untuk kode sampel, lihat [Contoh: Mendeteksi segmen dalam video yang tersimpan](segment-example.md).

# Contoh: Mendeteksi segmen dalam video yang tersimpan
<a name="segment-example"></a>

Prosedur berikut menunjukkan cara mendeteksi segmen isyarat teknis dan segmen deteksi sorotan dalam video yang disimpan dalam bucket Amazon S3. Prosedur ini juga menunjukkan cara memfilter segmen yang terdeteksi berdasarkan kepercayaan yang dimiliki Amazon Rekognition Video tentang keakuratan deteksi.

Contoh meluas pada kode di [Menganalisis video yang disimpan di bucket Amazon S3 dengan Java atau Python (SDK)](video-analyzing-with-sqs.md) yang menggunakan antrean Amazon Simple Queue Service untuk mendapatkan status penyelesaian permintaan analisis video. 

**Untuk mendeteksi segmen dalam video yang disimpan dalam bucket Amazon S3 (SDK)**

1. Lakukan [Menganalisis video yang disimpan di bucket Amazon S3 dengan Java atau Python (SDK)](video-analyzing-with-sqs.md).

1. Tambahkan berikut ke kode yang Anda gunakan pada langkah 1.

------
#### [ Java ]

   1. Tambahkan impor berikut.

      ```
      import com.amazonaws.services.rekognition.model.GetSegmentDetectionRequest;
      import com.amazonaws.services.rekognition.model.GetSegmentDetectionResult;
      import com.amazonaws.services.rekognition.model.SegmentDetection;
      import com.amazonaws.services.rekognition.model.SegmentType;
      import com.amazonaws.services.rekognition.model.SegmentTypeInfo;
      import com.amazonaws.services.rekognition.model.ShotSegment;
      import com.amazonaws.services.rekognition.model.StartSegmentDetectionFilters;
      import com.amazonaws.services.rekognition.model.StartSegmentDetectionRequest;
      import com.amazonaws.services.rekognition.model.StartSegmentDetectionResult;
      import com.amazonaws.services.rekognition.model.StartShotDetectionFilter;
      import com.amazonaws.services.rekognition.model.StartTechnicalCueDetectionFilter;
      import com.amazonaws.services.rekognition.model.TechnicalCueSegment;
      import com.amazonaws.services.rekognition.model.AudioMetadata;
      ```

   1. Tambahkan kode berikut ke kelas `VideoDetect`.

      ```
          //Copyright 2020 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.)
      
      
          private static void StartSegmentDetection(String bucket, String video) throws Exception{
                  
              NotificationChannel channel= new NotificationChannel()
                      .withSNSTopicArn(snsTopicArn)
                      .withRoleArn(roleArn);
      
              float minTechnicalCueConfidence = 80F; 
              float minShotConfidence = 80F; 
                      
              StartSegmentDetectionRequest req = new StartSegmentDetectionRequest()
                      .withVideo(new Video()
                              .withS3Object(new S3Object()
                                      .withBucket(bucket)
                                      .withName(video)))
                      .withSegmentTypes("TECHNICAL_CUE" , "SHOT")
                      .withFilters(new StartSegmentDetectionFilters()
                              .withTechnicalCueFilter(new StartTechnicalCueDetectionFilter()
                                      .withMinSegmentConfidence(minTechnicalCueConfidence))
                              .withShotFilter(new StartShotDetectionFilter()
                                      .withMinSegmentConfidence(minShotConfidence)))
                      .withJobTag("DetectingVideoSegments")
                      .withNotificationChannel(channel);
      
              StartSegmentDetectionResult startLabelDetectionResult = rek.startSegmentDetection(req);
              startJobId=startLabelDetectionResult.getJobId();
              
          }
      
          private static void GetSegmentDetectionResults() throws Exception{
      
              int maxResults=10;
              String paginationToken=null;
              GetSegmentDetectionResult segmentDetectionResult=null;
              Boolean firstTime=true;
              
      
              do {
                  if (segmentDetectionResult !=null){
                      paginationToken = segmentDetectionResult.getNextToken();
                  }
      
                  GetSegmentDetectionRequest segmentDetectionRequest= new GetSegmentDetectionRequest()
                          .withJobId(startJobId)
                          .withMaxResults(maxResults)
                          .withNextToken(paginationToken);
      
                  segmentDetectionResult = rek.getSegmentDetection(segmentDetectionRequest);
                  
                  if(firstTime) {
                      System.out.println("\nStatus\n------");
                      System.out.println(segmentDetectionResult.getJobStatus());
                      System.out.println("\nRequested features\n------------------");
                       for (SegmentTypeInfo requestedFeatures : segmentDetectionResult.getSelectedSegmentTypes()) {
                          System.out.println(requestedFeatures.getType());
                      }
                       int count=1;
                       List<VideoMetadata> videoMetaDataList = segmentDetectionResult.getVideoMetadata();
                       System.out.println("\nVideo Streams\n-------------");
                       for (VideoMetadata videoMetaData: videoMetaDataList) {
                           System.out.println("Stream: " + count++);
                           System.out.println("\tFormat: " + videoMetaData.getFormat());
                           System.out.println("\tCodec: " + videoMetaData.getCodec());
                           System.out.println("\tDuration: " + videoMetaData.getDurationMillis());
                           System.out.println("\tFrameRate: " + videoMetaData.getFrameRate());
                       } 
      
                       
                       List<AudioMetadata> audioMetaDataList = segmentDetectionResult.getAudioMetadata();
                       System.out.println("\nAudio streams\n-------------");
      
                       count=1;
                       for (AudioMetadata audioMetaData: audioMetaDataList) {
                           System.out.println("Stream: " + count++);
                           System.out.println("\tSample Rate: " + audioMetaData.getSampleRate());
                           System.out.println("\tCodec: " + audioMetaData.getCodec());
                           System.out.println("\tDuration: " + audioMetaData.getDurationMillis());
                           System.out.println("\tNumber of Channels: " + audioMetaData.getNumberOfChannels());
                       }
                       System.out.println("\nSegments\n--------");
      
                      firstTime=false;
                  }
      
      
                  //Show segment information
      
                  List<SegmentDetection> detectedSegments= segmentDetectionResult.getSegments();
                  
                  for (SegmentDetection detectedSegment: detectedSegments) { 
                      
                     if (detectedSegment.getType().contains(SegmentType.TECHNICAL_CUE.toString())) {
                          System.out.println("Technical Cue");
                          TechnicalCueSegment segmentCue=detectedSegment.getTechnicalCueSegment();
                          System.out.println("\tType: " + segmentCue.getType()); 
                          System.out.println("\tConfidence: " + segmentCue.getConfidence().toString());
                      }
                     if (detectedSegment.getType().contains(SegmentType.SHOT.toString())) { 
                          System.out.println("Shot");
                          ShotSegment segmentShot=detectedSegment.getShotSegment();
                          System.out.println("\tIndex " + segmentShot.getIndex()); 
                          System.out.println("\tConfidence: " + segmentShot.getConfidence().toString());
                      }
                      long seconds=detectedSegment.getDurationMillis();
                      System.out.println("\tDuration : " + Long.toString(seconds) + " milliseconds");
                      System.out.println("\tStart time code: " + detectedSegment.getStartTimecodeSMPTE());
                      System.out.println("\tEnd time code: " + detectedSegment.getEndTimecodeSMPTE());
                      System.out.println("\tDuration time code: " + detectedSegment.getDurationSMPTE());
                      System.out.println();
                                      
                   } 
                         
              } while (segmentDetectionResult !=null && segmentDetectionResult.getNextToken() != null);
      
          }
      ```

   1. Dalam fungsi `main`, ganti baris: 

      ```
              StartLabelDetection(amzn-s3-demo-bucket, video);
      
              if (GetSQSMessageSuccess()==true)
              	GetLabelDetectionResults();
      ```

      dengan:

      ```
              StartSegmentDetection(amzn-s3-demo-bucket, video);
      
              if (GetSQSMessageSuccess()==true)
              	GetSegmentDetectionResults();
      ```

------
#### [ Java V2 ]

   ```
   //snippet-start:[rekognition.java2.recognize_video_text.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.StartTextDetectionRequest;
   import software.amazon.awssdk.services.rekognition.model.StartTextDetectionResponse;
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   import software.amazon.awssdk.services.rekognition.model.GetTextDetectionResponse;
   import software.amazon.awssdk.services.rekognition.model.GetTextDetectionRequest;
   import software.amazon.awssdk.services.rekognition.model.VideoMetadata;
   import software.amazon.awssdk.services.rekognition.model.TextDetectionResult;
   import java.util.List;
   //snippet-end:[rekognition.java2.recognize_video_text.import]
   
   /**
   * 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 DetectVideoSegments {
   
    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, amzn-s3-demo-bucket). \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_WEST_2;
        RekognitionClient rekClient = RekognitionClient.builder()
            .region(region)
            .credentialsProvider(ProfileCredentialsProvider.create("profile-name"))
            .build();
   
        NotificationChannel channel = NotificationChannel.builder()
            .snsTopicArn(topicArn)
            .roleArn(roleArn)
            .build();
   
        startTextLabels(rekClient, channel, bucket, video);
        GetTextResults(rekClient);
        System.out.println("This example is done!");
        rekClient.close();
    }
   
    // snippet-start:[rekognition.java2.recognize_video_text.main]
    public static void startTextLabels(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();
   
            StartTextDetectionRequest labelDetectionRequest = StartTextDetectionRequest.builder()
                .jobTag("DetectingLabels")
                .notificationChannel(channel)
                .video(vidOb)
                .build();
   
            StartTextDetectionResponse labelDetectionResponse = rekClient.startTextDetection(labelDetectionRequest);
            startJobId = labelDetectionResponse.jobId();
   
        } catch (RekognitionException e) {
            System.out.println(e.getMessage());
            System.exit(1);
        }
    }
   
    public static void GetTextResults(RekognitionClient rekClient) {
   
        try {
            String paginationToken=null;
            GetTextDetectionResponse textDetectionResponse=null;
            boolean finished = false;
            String status;
            int yy=0 ;
   
            do{
                if (textDetectionResponse !=null)
                    paginationToken = textDetectionResponse.nextToken();
   
                GetTextDetectionRequest recognitionRequest = GetTextDetectionRequest.builder()
                    .jobId(startJobId)
                    .nextToken(paginationToken)
                    .maxResults(10)
                    .build();
   
                // Wait until the job succeeds.
                while (!finished) {
                    textDetectionResponse = rekClient.getTextDetection(recognitionRequest);
                    status = textDetectionResponse.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=textDetectionResponse.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<TextDetectionResult> labels= textDetectionResponse.textDetections();
                for (TextDetectionResult detectedText: labels) {
                    System.out.println("Confidence: " + detectedText.textDetection().confidence().toString());
                    System.out.println("Id : " + detectedText.textDetection().id());
                    System.out.println("Parent Id: " + detectedText.textDetection().parentId());
                    System.out.println("Type: " + detectedText.textDetection().type());
                    System.out.println("Text: " + detectedText.textDetection().detectedText());
                    System.out.println();
                }
   
            } while (textDetectionResponse !=null && textDetectionResponse.nextToken() != null);
   
        } catch(RekognitionException | InterruptedException e) {
            System.out.println(e.getMessage());
            System.exit(1);
        }
    }
    // snippet-end:[rekognition.java2.recognize_video_text.main]
   }
   ```

------
#### [ Python ]

   1. Tambahkan kode berikut ke kelas `VideoDetect` yang Anda buat di langkah 1.

      ```
      # Copyright 2020 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.)
      
          def StartSegmentDetection(self):
      
              min_Technical_Cue_Confidence = 80.0
              min_Shot_Confidence = 80.0
              max_pixel_threshold = 0.1
              min_coverage_percentage = 60
      
              response = self.rek.start_segment_detection(
                  Video={"S3Object": {"Bucket": self.bucket, "Name": self.video}},
                  NotificationChannel={
                      "RoleArn": self.roleArn,
                      "SNSTopicArn": self.snsTopicArn,
                  },
                  SegmentTypes=["TECHNICAL_CUE", "SHOT"],
                  Filters={
                      "TechnicalCueFilter": {
                          "BlackFrame": {
                              "MaxPixelThreshold": max_pixel_threshold,
                              "MinCoveragePercentage": min_coverage_percentage,
                          },
                          "MinSegmentConfidence": min_Technical_Cue_Confidence,
                      },
                      "ShotFilter": {"MinSegmentConfidence": min_Shot_Confidence},
                  }
              )
      
              self.startJobId = response["JobId"]
              print(f"Start Job Id: {self.startJobId}")
      
          def GetSegmentDetectionResults(self):
              maxResults = 10
              paginationToken = ""
              finished = False
              firstTime = True
      
              while finished == False:
                  response = self.rek.get_segment_detection(
                      JobId=self.startJobId, MaxResults=maxResults, NextToken=paginationToken
                  )
      
                  if firstTime == True:
                      print(f"Status\n------\n{response['JobStatus']}")
                      print("\nRequested Types\n---------------")
                      for selectedSegmentType in response['SelectedSegmentTypes']:
                          print(f"\tType: {selectedSegmentType['Type']}")
                          print(f"\t\tModel Version: {selectedSegmentType['ModelVersion']}")
      
                      print()
                      print("\nAudio metadata\n--------------")
                      for audioMetadata in response['AudioMetadata']:
                          print(f"\tCodec: {audioMetadata['Codec']}")
                          print(f"\tDuration: {audioMetadata['DurationMillis']}")
                          print(f"\tNumber of Channels: {audioMetadata['NumberOfChannels']}")
                          print(f"\tSample rate: {audioMetadata['SampleRate']}")
                      print()
                      print("\nVideo metadata\n--------------")
                      for videoMetadata in response["VideoMetadata"]:
                          print(f"\tCodec: {videoMetadata['Codec']}")
                          print(f"\tColor Range: {videoMetadata['ColorRange']}")
                          print(f"\tDuration: {videoMetadata['DurationMillis']}")
                          print(f"\tFormat: {videoMetadata['Format']}")
                          print(f"\tFrame rate: {videoMetadata['FrameRate']}")
                          print("\nSegments\n--------")
      
                      firstTime = False
      
                  for segment in response['Segments']:
      
                      if segment["Type"] == "TECHNICAL_CUE":
                          print("Technical Cue")
                          print(f"\tConfidence: {segment['TechnicalCueSegment']['Confidence']}")
                          print(f"\tType: {segment['TechnicalCueSegment']['Type']}")
      
                      if segment["Type"] == "SHOT":
                          print("Shot")
                          print(f"\tConfidence: {segment['ShotSegment']['Confidence']}")
                          print(f"\tIndex: " + str(segment["ShotSegment"]["Index"]))
      
                      print(f"\tDuration (milliseconds): {segment['DurationMillis']}")
                      print(f"\tStart Timestamp (milliseconds): {segment['StartTimestampMillis']}")
                      print(f"\tEnd Timestamp (milliseconds): {segment['EndTimestampMillis']}")
                      
                      print(f"\tStart timecode: {segment['StartTimecodeSMPTE']}")
                      print(f"\tEnd timecode: {segment['EndTimecodeSMPTE']}")
                      print(f"\tDuration timecode: {segment['DurationSMPTE']}")
      
                      print(f"\tStart frame number {segment['StartFrameNumber']}")
                      print(f"\tEnd frame number: {segment['EndFrameNumber']}")
                      print(f"\tDuration frames: {segment['DurationFrames']}")
      
                      print()
      
                  if "NextToken" in response:
                      paginationToken = response["NextToken"]
                  else:
                      finished = True
      ```

   1. Dalam fungsi `main`, ganti baris:

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

      dengan:

      ```
          analyzer.StartSegmentDetection()
          if analyzer.GetSQSMessageSuccess()==True:
              analyzer.GetSegmentDetectionResults()
      ```

------
**catatan**  
Jika Anda sudah menjalankan contoh video selain [Menganalisis video yang disimpan di bucket Amazon S3 dengan Java atau Python (SDK)](video-analyzing-with-sqs.md), kode yang akan diganti mungkin berbeda.

1. Jalankan kode tersebut. Informasi tentang segmen yang terdeteksi dalam video input akan ditampilkan.