Filter Gerakan Vertex AI Vision

1. Tujuan

Ringkasan

Codelab ini berfokus pada pembuatan aplikasi Vertex AI Vision end-to-end 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 memproses 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 baru alih-alih memilih project yang 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. Aktifkan Compute Engine API dan Vision AI API. Aktifkan API

Buat 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 akan mengisi kolom ID akun layanan berdasarkan nama ini. Di kolom Deskripsi akun layanan, masukkan deskripsi. Misalnya, Akun layanan untuk panduan memulai cepat.
  4. Klik Buat dan lanjutkan.
  5. Untuk memberikan akses ke project Anda, berikan peran berikut kepada akun layanan Anda: Vision AI > Vision AI Editor, Compute Engine > Compute Instance Admin (beta), Storage > Storage Object Viewer † . Di daftar Select a role, 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.

Buat 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 merekam gerakan dan segmen video produk yang berisi peristiwa gerakan. Dengan menyesuaikan sensitivitas gerakan, durasi peristiwa minimum, periode lihat kembali, periode pendinginan, dan zona deteksi gerakan, pengguna dapat mengonfigurasi filter berdasarkan kebutuhannya 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 akan direkam.
  3. Periode lihat balik: durasi 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 pendinginan, peristiwa gerakan tidak akan dipicu.
  5. Zona deteksi gerakan: zona yang dikonfigurasi pengguna untuk menentukan tempat deteksi gerakan harus berjalan. (Akan dijelaskan lebih lanjut di bagian berikutnya)

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 deteksi gerakan terhadap kebisingan dan gerakan kecil. Setelan ini direkomendasikan untuk setelan dengan 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 saat ada lebih banyak gangguan pencahayaan seperti di lingkungan luar ruangan dan untuk kualitas video yang lebih rendah di mana mungkin ada lebih banyak noise. Karena setelan ini adalah pemfilteran paling agresif dari semuanya, setelan ini dapat mengabaikan gerakan dari objek kecil.

Durasi peristiwa minimum

Gunakan flag min_event_length_in_seconds dalam perintah vaictl.
Bilangan bulat. Default 10 detik. Rentang dari 0 detik hingga 3600 detik.

Durasi minimum video peristiwa gerakan yang akan diuraikan 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 dari 0 detik hingga 3600 detik.

Periode lihat balik adalah durasi yang di-cache sebelum peristiwa gerakan terdeteksi. Fitur 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 pendinginan adalah berapa lama deteksi gerakan akan dijeda setelah peristiwa gerakan terekam. Selama periode tunggu, tidak ada komputasi yang akan dijalankan untuk mendeteksi gerakan.

4. Contoh filter gerakan dasar

Manual SDK Vaictl

Untuk memeriksa manual vaictl untuk aliran input dengan filter gerakan, gunakan perintah di bawah.

vaictl send video-file applying motion-filter -h

Menyiapkan contoh video

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

Siapkan variabel lingkungan

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

Variabel vaictl

  • PROJECT_ID: Project ID Google Cloud Anda.
  • LOCATION_ID: ID lokasi Anda. Misalnya, us-central1. Untuk mengetahui informasi selengkapnya, lihat Lokasi cloud.
  • LOCAL_FILE: Nama 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: Durasi minimum peristiwa gerakan.
  • LOOK_BACK_WINDOW: Durasi yang akan direkam sebelum gerakan pertama dalam peristiwa gerakan.
  • PERIODE_PENDINGINAN: Periode saat deteksi gerakan akan dijeda setelah peristiwa gerakan terekam.
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>

Siapkan perintah filter gerakan

Ada dua opsi untuk menggunakan filter gerakan dengan aliran input. Opsi pertama adalah mengirim peristiwa gerakan ke stream di konsol cloud. Opsi kedua adalah mengirimkan 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 Konsol Cloud.

Mendaftarkan aliran baru

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

Mengirim hasil ke streaming

Perintah ini akan melakukan streaming file video ke stream. Jika Anda menggunakan tanda –loop, video akan diulang ke 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 diperlukan waktu ~100 detik antara memulai operasi penyerapan vaictl dan video muncul di dasbor.

Setelah penyerapan streaming tersedia, Anda dapat melihat feed video di tab Streams di dasbor Vertex AI Vision dengan memilih streaming traffic-stream.

Buka tab Streams

Mengirim hasil ke penyimpanan lokal

Perintah ini akan melakukan streaming file video ke stream.

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 mempelajari 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 diberi anotasi; (2) zona negatif tempat deteksi gerakan mengabaikan gerakan apa pun di area yang diberi anotasi.

Anotasi zona

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

Anotasi zona akan berupa input string dari pengguna, yang menunjukkan zona dalam frame yang ingin disembunyikan atau difokuskan oleh pengguna. Untuk memberi anotasi pada zona, pengguna harus menentukan koordinat gambar sumbu x dan y untuk setiap node di zona. Zona harus memiliki tiga node atau lebih untuk membentuk poligon. Dapat ada beberapa zona dalam frame. Jika zona saling tumpang-tindih, area yang dicakup oleh kedua zona akan tetap dicakup.

Anotasi zona memiliki sintaksis input tertentu yang harus diikuti.

  • Untuk menunjukkan satu node, 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 yang berdekatan, urutannya bisa 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), (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

Mengecualikan zona yang diberi anotasi

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

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

  • Jika disetel ke true, zona yang diberi anotasi akan bertindak sebagai zona negatif. Gerakan di zona yang diberi anotasi tidak akan terdeteksi.

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

  • Jika disetel ke false, zona akan bertindak sebagai zona positif, tempat deteksi gerakan akan difokuskan.

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 sepanjang video". Namun, dengan bantuan zona deteksi gerakan, kita dapat menutupi 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, dalam Proc. IEEE Workshop on Change Detection (CDW-2012) di CVPR-2012, Providence, RI, 16-21 Jun., 2012

Persiapan variabel lingkungan

Variabel project cloud Google.

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 salah satu dari bawah 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 diberi anotasi dalam contoh video *Hanya jalankan deteksi gerakan di luar zona input.

Fokuskan 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 diberi anotasi dalam contoh video *Hanya jalankan deteksi gerakan di luar zona input.

Mengirimkan streaming video dengan filter gerakan

Mengirim peristiwa gerakan ke konsol cloud

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

Mendaftarkan aliran baru

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

Mengirim hasil ke streaming

Perintah ini akan melakukan streaming file video ke stream. Jika Anda menggunakan tanda –loop, video akan diulang ke 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 diperlukan waktu ~100 detik antara memulai operasi penyerapan vaictl dan video muncul di dasbor.

Setelah penyerapan streaming tersedia, Anda dapat melihat feed video di tab Streams di dasbor Vertex AI Vision dengan memilih streaming traffic-stream.

Buka tab Streams

Mengirim hasil ke penyimpanan lokal

Perintah ini akan melakukan streaming file video ke stream. Jika Anda menggunakan tanda –loop, video akan diulang ke 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.

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 ini.

Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, akhiri operasi SDK vaictl 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 bermanfaatkah codelab ini?

Sangat berguna Cukup berguna