Filter Gerakan Vertex AI Vision

1. Tujuan

Ringkasan

Codelab ini berfokus pada pembuatan aplikasi Vertex AI Vision menyeluruh untuk mendemonstrasikan pengiriman video dengan fitur pemfilteran gerakan. Dalam tutorial ini, kita akan membahas berbagai parameter dalam konfigurasi filter gerakan:

  • Sensitivitas deteksi gerakan
  • Durasi peristiwa minimum
  • Periode lihat-balik
  • Waktu pendinginan
  • Zona deteksi gerakan

Yang akan Anda pelajari

  • Cara menyerap video untuk streaming
  • Berbagai fitur yang tersedia di Motion Filter dan cara menggunakannya
  • Tempat memeriksa statistik Motion Filter
  • Cara menyesuaikan setelan berdasarkan video Anda

2. Sebelum Memulai

  1. Di Konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud. Catatan: Jika Anda tidak berencana untuk menyimpan resource yang dibuat dalam prosedur ini, buat project alih-alih memilih project yang sudah ada. Setelah menyelesaikan langkah-langkah ini, Anda dapat menghapus project, sehingga semua resource yang terkait dengan project tersebut akan dihapus. Buka pemilih project
  2. Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project.
  3. Mengaktifkan Compute Engine API dan Vision AI API. Aktifkan API

Membuat akun layanan:

  1. Di konsol Google Cloud, buka halaman Buat akun layanan. Buka Buat akun layanan
  2. Pilih project Anda.
  3. Di kolom Nama akun layanan, masukkan nama. Konsol Google Cloud mengisi kolom Service account ID berdasarkan nama ini. Di kolom Deskripsi akun layanan, masukkan deskripsi. Misalnya, Akun layanan untuk panduan memulai.
  4. Klik Buat dan lanjutkan.
  5. Untuk memberikan akses ke project Anda, berikan peran berikut ke akun layanan Anda: Vision AI > Vision AI Editor, Compute Engine > Admin Instance Compute (beta), Penyimpanan > Penampil Objek Penyimpanan † . Di daftar Pilih peran, pilih peran. Untuk peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan. Catatan: Kolom Role memengaruhi resource mana yang dapat diakses akun layanan Anda di project Anda. Anda dapat mencabut peran ini atau memberikan peran tambahan di lain waktu. Dalam lingkungan produksi, jangan memberikan peran Pemilik, Editor, atau Viewer. Sebagai gantinya, berikan peran standar atau peran khusus yang memenuhi kebutuhan Anda.
  6. Klik Lanjutkan.
  7. Klik Selesai untuk menyelesaikan pembuatan akun layanan. Jangan tutup jendela browser Anda. Anda akan menggunakannya pada langkah berikutnya.

Membuat kunci akun layanan:

  1. Di Konsol Google Cloud, klik alamat email untuk akun layanan yang telah Anda buat.
  2. Klik Kunci.
  3. Klik Tambahkan kunci, lalu klik Buat kunci baru.
  4. Klik Create. File kunci JSON akan didownload ke komputer Anda.
  5. Klik Tutup.
  6. Instal dan lakukan inisialisasi Google Cloud CLI.

† Peran hanya diperlukan jika Anda menyalin file video sampel dari bucket Cloud Storage.

3. Filter Gerakan

Filter gerakan merekam segmen gerakan dan video produk yang berisi peristiwa gerakan. Dengan menyesuaikan sensitivitas gerakan, durasi peristiwa minimum, periode lihat balik, periode tunggu, dan zona deteksi gerakan, pengguna dapat mengonfigurasi dasar filter sesuai kebutuhan mereka sendiri.

Konfigurasi Filter Gerakan

Ada 5 konfigurasi yang tersedia di filter gerakan untuk penyesuaian.

  1. Sensitivitas gerakan: seberapa sensitif gerakan harus dipicu.
  2. Panjang peristiwa minimum: durasi minimum peristiwa gerakan yang akan direkam.
  3. Periode lihat balik: berapa lama video harus mulai merekam sebelum peristiwa gerakan terdeteksi.
  4. Periode tunggu: setelah peristiwa gerakan berakhir, periode tunggu dengan durasi yang ditentukan akan terjadi. Selama periode tunggu, peristiwa gerakan tidak akan dipicu.
  5. Zona deteksi gerakan: zona yang dikonfigurasi pengguna untuk menentukan tempat deteksi gerakan harus dijalankan. (Akan dijabarkan di bagian selanjutnya)

Sensitivitas gerakan

Gunakan flag motion_detection_sensitivity dalam perintah vaictl.String
. Media default. Dapat memilih dari rendah, sedang, atau tinggi.

Semakin tinggi sensitivitas deteksi gerakan, semakin sensitif terhadap kebisingan dan gerakan yang lebih kecil. Setelan ini direkomendasikan untuk setelan dengan objek bergerak yang lebih kecil (seperti orang dari jarak jauh) dan pencahayaan yang stabil.

Di sisi lain, sensitivitas rendah kurang sensitif terhadap gangguan pencahayaan. Setelan ini cocok digunakan saat ada lebih banyak interferensi pencahayaan, seperti lingkungan luar ruangan, dan untuk kualitas video yang lebih rendah yang mungkin menghasilkan lebih banyak suara bising. Karena setelan ini merupakan pemfilteran yang paling agresif, setelan ini dapat mengabaikan pergerakan dari objek kecil.

Durasi peristiwa minimum

Gunakan flag min_event_length_in_seconds dalam perintah vaictl.
Bilangan bulat. Defaultnya adalah 10 detik. Rentang waktu mulai dari 0 detik hingga 3600 detik.

Durasi minimum video peristiwa gerakan yang akan diurai setelah segmen peristiwa gerakan terdeteksi dalam frame.

Periode lihat balik

Gunakan flag look_back_window_in_seconds dalam perintah vaictl.
Bilangan bulat. Default 3 detik. Rentang waktu mulai dari 0 detik hingga 3600 detik.

Periode lihat balik adalah durasi yang di-cache sebelum peristiwa gerakan terdeteksi. Hal ini berguna jika kita tertarik untuk melihat apa yang terjadi dalam frame beberapa detik sebelum peristiwa gerakan terdeteksi.

Periode tunggu

Gunakan flag cool_down_period_in_seconds dalam perintah vaictl.
Bilangan bulat. Default 300 detik. Rentang waktu mulai dari 0 detik hingga 3600 detik.

Periode tunggu adalah durasi deteksi gerakan akan dijeda setelah peristiwa gerakan direkam. Selama periode tunggu, tidak ada komputasi yang akan dijalankan untuk mendeteksi gerakan.

4. Contoh filter gerakan dasar

Panduan Vaictl SDK

Untuk memeriksa manual vaictl guna mendapatkan aliran input dengan filter gerakan, gunakan perintah di bawah ini.

vaictl send video-file applying motion-filter -h

Menyiapkan video sampel

  1. Anda dapat menyalin video contoh dengan perintah gsutil cp berikut. Ganti variabel berikut:
  • SUMBER: Lokasi file video yang akan digunakan. Anda dapat menggunakan sumber file video sendiri (misalnya, gs://BUCKET_NAME/FILENAME.mp4), atau menggunakan video sampel (gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4 )(video dengan orang dan kendaraan, sumber)
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4
gsutil cp $SOURCE .

Menyiapkan variabel lingkungan

Tetapkan variabel lingkungan di bawah untuk menggunakan template perintah yang disediakan.

variabel vaictl

  • PROJECT_ID: ID project Google Cloud Anda.
  • LOCATION_ID: ID lokasi Anda. Misalnya, us-central1. Untuk mengetahui informasi selengkapnya, lihat Lokasi Cloud.
  • LOCAL_FILE: Nama file dari file video lokal. Misalnya, street_vehicles_people.mp4.
  • –loop flag: Opsional. Mengulang data file untuk menyimulasikan streaming.
export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1

Variabel filter gerakan

  • MOTION_SENSITIVITY: Seberapa sensitif deteksi gerakan.
  • MIN_EVENT_LENGTH: Panjang minimum peristiwa gerakan.
  • LOOK_BACK_WINDOW: Durasi yang akan diambil sebelum gerakan pertama dalam suatu peristiwa gerakan.
  • COOL_DOWN_PERIOD: Periode saat deteksi gerakan akan dijeda setelah peristiwa gerakan direkam.
export MOTION_SENSITIVITY=<low or medium or high>
export MIN_EVENT_LENGTH=<0-3600>
export LOOK_BACK_WINDOW=<0-3600>
export COOL_DOWN_PERIOD=<0-3600>

Menyiapkan perintah filter gerakan

Ada dua opsi untuk menggunakan filter gerakan dengan aliran input. Opsi pertama adalah mengirimkan peristiwa gerakan ke aliran data di konsol cloud. Opsi kedua adalah mengirimkan kejadian gerakan ke penyimpanan lokal.

Mengirim hasil ke konsol cloud

Anda dapat menggunakan vaictl untuk melakukan streaming data video output ke konsol cloud. Mulailah dengan mengaktifkan Vision AI API di Konsol Cloud.

Daftarkan streaming baru

  1. Klik tab stream di panel kiri Vertex AI Vision.
  2. Klik Daftar
  3. Di nama Feed, masukkan motion-detection-stream
  4. Di region, masukkan us-central1
  5. Klik daftar

Mengirim hasil ke feed

Perintah ini melakukan streaming file video ke streaming. Jika Anda menggunakan flag –loop, video akan diulang ke streaming sampai Anda menghentikan perintah. Kita akan menjalankan perintah ini sebagai tugas latar belakang agar tugas dapat terus streaming.

Tambahkan nohup di awal dan & di akhir untuk menjadikannya tugas latar belakang.

INPUT_VIDEO=street_vehicles_people.mp4

vaictl -p $PROJECT \
       -l $LOCATION_ID \
       -c application-cluster-0 \
       --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
  to streams motion-detection-stream --loop

Mungkin diperlukan waktu ~100 detik antara memulai operasi penyerapan konversi dan video yang muncul di dasbor.

Setelah proses transfer streaming tersedia, Anda dapat melihat feed video di tab Streaming pada dasbor Vertex AI Vision dengan memilih streaming traffic-stream.

Buka tab Streaming

Mengirim hasil ke penyimpanan lokal

Perintah ini melakukan streaming file video ke streaming.

Tambahkan nohup di awal dan & di akhir untuk menjadikannya tugas latar belakang.

INPUT_VIDEO=street_vehicles_people.mp4
OUTPUT_PATH=<path_to_store_motion_events_on_local_disk>

nohup vaictl -p $PROJECT \
             -l $LOCATION_ID \
             -c application-cluster-0 \
             --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
  to mp4file --mp4-file-path=$OUTPUT_PATH --loop

5. Zona deteksi gerakan

Di bagian ini, kita akan membahas penggunaan zona deteksi gerakan dan cara mengonfigurasinya. Zona ini dimaksudkan untuk meningkatkan deteksi gerakan dengan menyamarkan gerakan yang berasal dari area yang tidak Anda minati.

Zona deteksi gerakan memiliki dua jenis, (1) zona positif di mana deteksi gerakan hanya berjalan di area yang dianotasi; (2) zona negatif dengan deteksi gerakan mengabaikan gerakan apa pun di area yang dianotasi.

Anotasi zona

Gunakan flag zone_annotation dalam perintah vaictl untuk memasukkan koordinat untuk poligon zona.String
. Default kosong untuk anotasi zona.

Anotasi zona akan menjadi input string dari pengguna, yang menunjukkan zona dalam bingkai yang ingin disembunyikan atau difokuskan oleh pengguna. Untuk memberi anotasi zona, pengguna perlu menentukan koordinat gambar sumbu x dan y untuk setiap node di zona. Zona harus memiliki tiga node atau lebih agar dapat membentuk poligon. Satu frame dapat berisi beberapa zona. Jika zona tersebut saling tumpang-tindih, area yang dicakup oleh kedua zona tersebut akan tetap tercakup.

Anotasi zona memiliki sintaksis input khusus yang harus diikuti.

  • Untuk menunjukkan node tunggal, gunakan : untuk menghubungkan sumbu x dan y dari koordinasi gambar. Misalnya, node (0,0) di sudut kiri atas akan dilambangkan sebagai 0:0.
  • Untuk menunjukkan semua node dalam satu zona, gunakan ; untuk menghubungkan node. Misalnya, untuk zona dengan node (0,0), (100,0), (100,100), dan (0, 100), zona tersebut akan dilambangkan sebagai 0:0;100:0;100:100;0:100. Selalu masukkan node sebagai menghubungkan node yang bersebelahan, urutannya dapat searah jarum jam atau berlawanan arah jarum jam.

Zona deteksi gerakan - persegi*Zona persegi dengan empat node.

Zona deteksi gerakan - segitiga*Zona segitiga dengan tiga node.

  • Untuk menunjukkan beberapa zona dalam satu frame, gunakan - untuk menghubungkan zona yang berbeda. Misalnya, jika kita ingin memasukkan (0,0), (100,0), (100,100), (0,100), serta (120,120), (110,150), (200,160), anotasi zona input akan menjadi 0:0;100:0;100:100;0:100-120:120;110:150;200:160.

Zona deteksi gerakan - frame dengan dua zona*Dua zona dalam frame.

Untuk mendapatkan koordinat dari gambar, ada beberapa alat yang tersedia secara {i>online<i} untuk membantu mendapatkan koordinat. Misalnya, lihat Wolfram - Mendapatkan Koordinat dari Gambar

Kecualikan zona yang dianotasi

Gunakan flag exclude_annotated_zone dalam perintah vaictl untuk mengonfigurasi deteksi gerakan di zona atau di luar zona.Boolean
. Nilai defaultnya adalah salah (false).

Kecualikan zona yang dianotasi adalah input boolean dari pengguna, yang menunjukkan apakah pengguna ingin mengecualikan zona yang dianotasi dalam deteksi gerakan atau tidak.

  • Jika ditetapkan ke true, zona yang dianotasi akan berfungsi sebagai zona negatif. Gerakan di zona yang dianotasi tidak akan terdeteksi.

Zona deteksi gerakan - opsi kecualikan *Hanya jalankan deteksi gerakan di luar zona input.

  • Jika disetel ke salah (false), zona tersebut akan bertindak sebagai zona positif, yang akan difokuskan oleh deteksi gerakan.

Zona deteksi gerakan - sertakan opsi *Hanya jalankan deteksi gerakan di zona input.

6. Contoh filter gerakan dengan zona deteksi gerakan

Dalam contoh ini, kami akan menggunakan video yang memiliki pohon yang terus bergerak di latar depan. Dalam setelan filter gerakan reguler, video hanya akan menghasilkan satu peristiwa gerakan yang memiliki durasi video asli karena filter gerakan mendaftarkan pohon yang bergerak sebagai "terus bergerak di sepanjang video". Namun, dengan bantuan zona deteksi gerakan, kita dapat menyamarkan gerakan dari pohon dengan benar dan berfokus pada gerakan dari mobil dan pejalan kaki.

Persiapan video

Video sampel (gs://cloud-samples-data/vertex-ai-vision/dynamic-background-fall.mp4 ) berisi pohon, mobil, dan pejalan kaki dari www.changedetection.net.

Kredit video: N. Goyette, P.-M. Jodoin, F. Porikli, J. Konrad, dan P. Ishwar, changedetection.net: Set data tolok ukur deteksi perubahan yang baru, di Proc. Workshop IEEE tentang Deteksi Perubahan (CDW-2012) di CVPR-2012, Providence, RI, 16-21 Jun., 2012

Persiapan variabel lingkungan

Variabel project Google Cloud.

export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1
export LOCAL_FILE=street_vehicles_people.mp4

Konfigurasi filter gerakan dasar.

export MOTION_SENSITIVITY=<low or medium or high>
export MIN_EVENT_LENGTH=<0-3600>
export LOOK_BACK_WINDOW=<0-3600>
export COOL_DOWN_PERIOD=<0-3600>

Konfigurasi zona deteksi gerakan.

Pilih dari bawah ini untuk melihat berbagai jenis penggunaan zona deteksi gerakan.

Mengecualikan pohon untuk deteksi gerakan.

export ZONE_ANNOTATION="0:0;680:0;660:70;380:320;100:150"
export EXCLUDE_ANNOTATED_ZONE=true

Zona deteksi gerakan - kecualikan deteksi gerakan dari zona yang dianotasi dalam contoh video *Hanya jalankan deteksi gerakan di luar zona input.

Memfokuskan deteksi gerakan di jalan.

export ZONE_ANNOTATION="0:300;780:300;780:480;0:480"
export EXCLUDE_ANNOTATED_ZONE=false

Zona deteksi gerakan - jalankan deteksi gerakan dari zona yang dianotasi dalam contoh video *Hanya jalankan deteksi gerakan di luar zona input.

Kirim streaming video dengan filter gerakan

Mengirim peristiwa gerakan ke konsol cloud

Anda dapat menggunakan vaictl untuk melakukan streaming data video output ke konsol cloud. Mulailah dengan mengaktifkan Vision AI API di Konsol Cloud.

Daftarkan streaming baru

  1. Klik tab stream di panel kiri Vertex AI Vision.
  2. Klik Daftar
  3. Di nama Feed, masukkan motion-detection-stream
  4. Di region, masukkan us-central1
  5. Klik daftar

Mengirim hasil ke feed

Perintah ini melakukan streaming file video ke streaming. Jika Anda menggunakan flag –loop, video akan diulang ke streaming sampai Anda menghentikan perintah. Kita akan menjalankan perintah ini sebagai tugas latar belakang agar tugas dapat terus streaming.

Tambahkan nohup di awal dan & di akhir untuk menjadikannya tugas latar belakang.

vaictl -p $PROJECT \
       -l $LOCATION_ID \
       -c application-cluster-0 \
       --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
         --zone_annotation=ZONE_ANNOTATION \
         --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \
  to streams motion-detection-stream --loop

Mungkin diperlukan waktu ~100 detik antara memulai operasi penyerapan konversi dan video yang muncul di dasbor.

Setelah proses transfer streaming tersedia, Anda dapat melihat feed video di tab Streaming pada dasbor Vertex AI Vision dengan memilih streaming traffic-stream.

Buka tab Streaming

Mengirim hasil ke penyimpanan lokal

Perintah ini melakukan streaming file video ke streaming. Jika Anda menggunakan flag –loop, video akan diulang ke streaming sampai Anda menghentikan perintah. Kita akan menjalankan perintah ini sebagai tugas latar belakang agar tugas dapat terus streaming.

Tambahkan nohup di awal dan & di akhir untuk menjadikannya tugas latar belakang.

OUTPUT_PATH=<path_to_store_motion_events>

vaictl -p $PROJECT \
       -l $LOCATION_ID \
       -c application-cluster-0 \
       --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
         --zone_annotation=$ZONE_ANNOTATION \
         --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \
  to mp4file --mp4-file-path=$OUTPUT_PATH --loop

7. Selamat

Selamat, kamu telah menyelesaikan lab!

Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, akhiri operasi vaictl SDK melalui command line dengan ctrl + z.

Referensi

https://cloud.google.com/vision-ai/docs/overview

https://cloud.google.com/vision-ai/docs/motion-filtering-model

https://cloud.google.com/vision-ai/docs/create-manage-streams

Masukan

Klik di sini untuk Memberikan Masukan

Survei

Bagaimana Anda akan menggunakan tutorial ini?

Hanya membacanya Membacanya dan menyelesaikan latihan

Seberapa berguna codelab ini?

Sangat berguna Berguna sedang