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 tunggu
  • Zona deteksi gerakan

Yang akan Anda pelajari

  • Cara menyerap video untuk streaming
  • Berbagai fitur yang tersedia di Filter Gerakan dan cara menggunakannya
  • Tempat untuk memeriksa statistik Filter Gerakan
  • 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 Anda buat dalam prosedur ini, buat project, bukan memilih project yang ada. Setelah menyelesaikan langkah-langkah ini, Anda dapat menghapus project, yang menghapus semua resource yang terkait dengan project ini. Buka pemilih project
  2. Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project.
  3. Aktifkan Compute Engine dan Vision AI API. Aktifkan API

Buat akun layanan:

  1. Di konsol Google Cloud, buka halaman Buat akun layanan. Buka Create service account
  2. Pilih project Anda.
  3. Di kolom Nama akun layanan, masukkan nama. Konsol Google Cloud akan mengisi kolom ID akun layanan berdasarkan nama ini. Di kolom Deskripsi akun layanan, masukkan deskripsi. Misalnya, Akun layanan untuk 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 > Compute Instance Admin (beta), Storage > Storage Object Viewer † . Di daftar Pilih peran, pilih peran. Untuk peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan. Catatan: Kolom Peran memengaruhi resource mana yang dapat diakses oleh akun layanan Anda di project Anda. Anda dapat mencabut peran ini atau memberikan peran tambahan di lain waktu. Dalam lingkungan produksi, jangan berikan peran Pemilik, Editor, atau Pelihat. 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 contoh dari bucket Cloud Storage.

3. Filter Gerakan

Filter gerakan menangkap segmen video produk dan gerakan 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. Durasi 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 dijelaskan 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 yang memiliki objek bergerak yang lebih kecil (seperti orang dari kejauhan) dan pencahayaan yang stabil.

Di sisi lain, sensitivitas rendah kurang sensitif terhadap gangguan pencahayaan. Setelan ini sangat cocok jika ada lebih banyak gangguan pencahayaan seperti lingkungan luar ruangan dan untuk kualitas video yang lebih rendah yang mungkin memiliki lebih banyak derau. Karena setelan ini adalah pemfilteran yang paling agresif, setelan ini dapat mengabaikan gerakan 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 saat kita ingin 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 dari 0 detik hingga 3600 detik.

Periode tunggu adalah durasi jeda deteksi gerakan 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 vaictl secara manual untuk aliran input dengan filter gerakan, gunakan perintah di bawah.

vaictl send video-file applying motion-filter -h

Menyiapkan video sampel

  1. Anda dapat menyalin contoh video dengan perintah gsutil cp berikut. Ganti variabel berikut:
  • SUMBER: Lokasi file video yang akan digunakan. Anda dapat menggunakan sumber file video Anda sendiri (misalnya, gs://BUCKET_NAME/FILENAME.mp4), atau menggunakan video contoh (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 file video lokal. Misalnya, street_vehicles_people.mp4.
  • –loop flag: Opsional. Mengulangi 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: Durasi minimum peristiwa gerakan.
  • LOOK_BACK_WINDOW: Durasi yang akan direkam sebelum gerakan pertama dalam 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 mengirim peristiwa gerakan ke penyimpanan lokal.

Mengirim hasil ke konsol cloud

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

Daftarkan streaming baru

  1. Klik tab aliran data di panel kiri Vertex AI Vision.
  2. Klik Daftar
  3. Di Nama aliran data, masukkan motion-detection-stream
  4. Di wilayah, masukkan us-central1
  5. Klik daftar

Mengirim hasil ke streaming

Perintah ini melakukan streaming file video ke streaming. Jika Anda menggunakan flag –loop, video akan diputar berulang kali dalam streaming hingga Anda menghentikan perintah. Kita akan menjalankan perintah ini sebagai tugas latar belakang agar terus melakukan 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 perlu waktu ~100 detik antara memulai operasi transfer vaictl dan video muncul di dasbor.

Setelah penyerapan streaming tersedia, Anda dapat melihat feed video di tab Streams 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 tempat deteksi gerakan hanya berjalan di area yang dianotasi; (2) zona negatif tempat 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-nya kosong untuk anotasi zona.

Anotasi zona akan berupa input string dari pengguna, yang menunjukkan zona dalam bingkai yang ingin disembunyikan atau difokuskan oleh pengguna. Untuk menganotasi zona, pengguna harus menentukan koordinat gambar sumbu x dan y untuk setiap node di zona. Zona harus memiliki tiga node atau lebih agar dapat membentuk poligon. Dalam satu bingkai, dapat ada beberapa zona. Jika zona 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 node penghubung di samping satu sama lain, 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), dan (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 - bingkai dengan dua zona*Dua zona dalam satu bingkai.

Untuk mendapatkan koordinat dari gambar, ada beberapa alat yang tersedia secara online untuk membantu mendapatkan koordinat. Misalnya, lihat Wolfram - Get Coordinates from Image

Kecualikan zona yang dianotasi

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

Exclude annotated zone 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 pengecualian *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 - opsi sertakan *Hanya jalankan deteksi gerakan di zona input.

6. Contoh filter gerakan dengan zona deteksi gerakan

Dalam contoh ini, kita akan menggunakan video yang memiliki pohon yang terus bergerak di latar depan sebagai contoh. 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 seluruh 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 contoh (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: A new change detection benchmark dataset, in Proc. IEEE Workshop on Change Detection (CDW-2012) at 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.

Kecualikan 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 - mengecualikan 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.

Mengirim 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 aliran data di panel kiri Vertex AI Vision.
  2. Klik Daftar
  3. Di Nama aliran data, masukkan motion-detection-stream
  4. Di wilayah, masukkan us-central1
  5. Klik daftar

Mengirim hasil ke streaming

Perintah ini melakukan streaming file video ke streaming. Jika Anda menggunakan flag –loop, video akan diputar berulang kali dalam streaming hingga Anda menghentikan perintah. Kita akan menjalankan perintah ini sebagai tugas latar belakang agar terus melakukan 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 perlu waktu ~100 detik antara memulai operasi transfer vaictl dan video 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 terus melakukan 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, Anda telah menyelesaikan lab!

Pembersihan

Agar tidak menimbulkan tagihan ke 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 Sedang berguna