2 poin oleh GN⁺ 26 hari lalu | 1 komentar | Bagikan ke WhatsApp
  • Mencari adegan dalam file video seperti dashcam dengan bahasa alami dan secara otomatis memotong klip yang sesuai menggunakan sistem pencarian berbasis makna
  • Menggunakan model Google Gemini Embedding 2 untuk meng-embed video itu sendiri menjadi vektor, lalu menyimpannya di ChromaDB agar bisa dibandingkan langsung dengan kueri teks
  • Video di-embed dengan membaginya menjadi chunk yang saling tumpang tindih lewat ffmpeg, dan saat pencarian sistem mengembalikan bagian yang paling mirip dengan kecepatan sub-detik
  • Fitur prapemrosesan dan skip frame diam menekan biaya panggilan API, dengan biaya sekitar $2.84 untuk mengindeks video berdurasi 1 jam
  • Memanfaatkan fitur embedding video langsung dari Gemini Embedding 2 agar pencarian semantik cepat pada video berdurasi berjam-jam dapat dilakukan tanpa membuat subtitle terlebih dahulu

Ikhtisar

  • SentrySearch adalah alat untuk melakukan pencarian semantik pada video dashcam, di mana pengguna memasukkan kueri dalam bahasa alami dan alat ini mengembalikan klip terpotong (trimmed clip) yang berisi adegan tersebut
  • Menggunakan model Google Gemini Embedding 2 untuk meng-embed video itu sendiri menjadi vektor, lalu menyimpannya ke basis data lokal ChromaDB
  • Kueri teks di-embed ke ruang vektor yang sama untuk menemukan potongan video yang paling mirip
  • Hasil pencarian otomatis dipotong dari file asli dan disimpan, dengan kecepatan pencarian sub-detik (sub-second)

Cara kerja

  • Video dibagi menjadi segmen yang saling tumpang tindih (overlapping chunks) dan tiap segmen langsung di-embed melalui model Gemini Embedding
  • Setiap vektor embedding disimpan di ChromaDB, dan saat pencarian kueri teks diubah ke ruang vektor yang sama untuk dicocokkan
  • Segmen dengan kemiripan tertinggi otomatis dipotong dari video asli dan disimpan sebagai klip
  • ffmpeg digunakan untuk membagi dan memangkas video, dan jika tidak terpasang di sistem maka imageio-ffmpeg akan dipakai secara otomatis

Instalasi dan pengaturan awal

  • Dapat dipasang pada lingkungan Python 3.10 atau lebih baru dengan perintah berikut
    • setelah git clone, jalankan pip install -e .
  • Gunakan perintah sentrysearch init untuk menetapkan Gemini API key dan menyimpannya ke file .env
    • Embedding uji akan dijalankan untuk memverifikasi validitas key
  • Untuk pengaturan manual, salin .env.example lalu tambahkan API key secara langsung

Perintah dan opsi utama

  • index

    • Melakukan pengindeksan dengan memindai file .mp4 secara rekursif di dalam folder yang ditentukan
    • Tiap file dibagi menjadi beberapa chunk lalu di-embed
    • Opsi
      • --chunk-duration : durasi chunk (dalam detik)
      • --overlap : panjang tumpang tindih antar-chunk
      • --no-preprocess : lewati downscaling dan pengurangan frame
      • --target-resolution : resolusi target saat prapemrosesan (default 480p)
      • --target-fps : frame rate target saat prapemrosesan (default 5fps)
      • --no-skip-still : embed juga semua bagian frame diam
  • search

    • Contoh: sentrysearch search "red truck running a stop sign"
    • Hasil ditampilkan bersama skor kemiripan, dan hasil teratas otomatis dipotong lalu disimpan
    • Jika skor kemiripan berada di bawah ambang default (0.35), prompt konfirmasi akan ditampilkan
    • Opsi
      • --results N : jumlah hasil yang ditampilkan
      • --output-dir DIR : lokasi penyimpanan klip
      • --no-trim : nonaktifkan pemotongan otomatis
      • --threshold : sesuaikan ambang kemiripan
  • stats

    • Menampilkan total jumlah chunk yang telah diindeks dan jumlah file asli
  • --verbose

    • Menampilkan informasi debug seperti dimensi embedding, waktu respons API, dan skor kemiripan

Latar belakang teknis

  • Gemini Embedding 2 dapat meng-embed video secara langsung dan membandingkannya dengan kueri teks dalam ruang vektor 768 dimensi yang sama
  • Tidak diperlukan proses pembuatan subtitle atau caption frame terpisah
  • Misalnya, kueri teks “red truck at a stop sign” dapat dibandingkan langsung dengan klip video berdurasi 30 detik
  • Fitur ini memungkinkan pencarian semantik sub-detik bahkan pada video berdurasi berjam-jam

Struktur biaya

  • Dengan pengaturan dasar (chunk 30 detik, overlap 5 detik), biaya pengindeksan video 1 jam sekitar $2.84
    • Gemini API memproses 1 frame per detik dari video yang diunggah
    • Proses prapemrosesan menurunkan skala ke 480p, 5fps untuk mengoptimalkan kecepatan transfer dan mencegah timeout
  • Optimasi penghematan biaya

    • Prapemrosesan (preprocessing) : mengurangi ukuran unggahan dan waktu transfer
    • Skip frame diam (still-frame skipping) : melewati embedding pada bagian tanpa perubahan visual
      • Efektif untuk video rekaman parkir berdurasi panjang
    • Kueri pencarian hanya melakukan embedding teks, sehingga biayanya nyaris nol
    • Opsi penyesuaian tambahan
    • --chunk-duration, --overlap : mengatur jumlah panggilan API
    • --no-skip-still : embed semua chunk
    • --target-resolution, --target-fps : menyesuaikan kualitas prapemrosesan
    • --no-preprocess : kirim chunk asli apa adanya

Keterbatasan dan pengembangan berikutnya

  • Deteksi frame diam menggunakan heuristik berbasis perbandingan ukuran file JPEG, sehingga bisa melewatkan gerakan halus atau keliru memasukkan bagian diam
  • Kualitas pencarian bergantung pada batas chunk, sehingga jika suatu peristiwa melintasi dua chunk, hasilnya mungkin tidak tertangkap sempurna
    • Ke depan, ini dapat ditingkatkan dengan pemecahan chunk berbasis scene detection
  • Gemini Embedding 2 saat ini masih dalam tahap preview, sehingga perilaku API dan harga dapat berubah

Kompatibilitas dan persyaratan

  • Bekerja dengan semua file video berformat .mp4, dan tidak terbatas pada video Tesla Sentry Mode
  • Menelusuri semua file .mp4 secara rekursif tanpa memedulikan struktur folder
  • Persyaratan
    • Python 3.10 atau lebih baru
    • ffmpeg perlu terpasang (atau imageio-ffmpeg akan dipakai otomatis)
    • Memerlukan Gemini API key (key gratis tersedia di: aistudio.google.com/apikey)

1 komentar

 
GN⁺ 26 hari lalu
Komentar Hacker News
  • Implementasi ini terasa sangat keren. Embeddings masih terasa seperti sihir dalam beberapa hal
    Namun, yang paling aku khawatirkan adalah kemungkinan teknologi seperti ini mengarah ke masyarakat pengawasan
    Saat ini memang ada sangat banyak kamera, tetapi pada praktiknya mustahil semua video ditonton manusia, jadi masih ada tingkat anonimitas dan privasi tertentu
    Namun jika AI bisa menganalisis semua video secara real-time dan mendeteksi orang atau tindakan tertentu dengan bahasa alami, panopticon bisa menjadi kenyataan
    Memang ada penggunaan positif seperti deteksi kejahatan atau deteksi orang terjatuh, tetapi tanpa regulasi hasilnya bisa sangat berbahaya

    • Ini sebenarnya sedang dibangun sekarang. Aku mendengar pembahasan kontrak kamera ALPR di rapat dewan kota, dan dari sana jadi tahu produk dashboard bernama Fusus
      Katanya sistem itu mengintegrasikan berbagai sistem kamera, ALPR, dan alarm, serta memungkinkan kueri video dengan bahasa alami
      Ke depannya kamera yang dipasang warga juga akan diintegrasikan. Pada akhirnya, jika ini terhubung dengan layanan seperti aplikasi Citizen, kita bisa masuk ke dunia di mana kamera tetangga langsung terhubung ke sistem kepolisian
      Arah ini benar-benar mengkhawatirkan
    • Saat ini, karena biaya ($2.50/jam) dan latency, pengindeksan real-time masih sulit, tetapi sebentar lagi kemungkinan akan memungkinkan
      Karena itu menurutku penting memproses hal seperti ini dengan model lokal agar videonya tidak keluar ke pihak luar
      Namun arah umum teknologinya tetap perlu dipikirkan dengan hati-hati
    • Sebagian besar kamera tidak bisa diakses sepenuhnya oleh satu organisasi, dan pemerintah memerlukan subpoena untuk melihatnya
      Masalah muncul ketika sistem seperti Flock atau Ring dideploy dalam skala besar, atau ketika satu perusahaan bisa mengakses semua video
    • Secara teknis, sistem pengawasan total sudah memungkinkan. Hanya saja saat ini masih mahal
    • Jika modul pengenalan visi seperti ini bisa berjalan bahkan di ASIC berdaya rendah, drone bisa menjadi senjata yang mengerikan
  • AI multimodal sepertinya akan memicu perlombaan senjata antara deteksi iklan dan penyisipan iklan
    Dulu aku pernah bereksperimen dengan model sebelum Gemini untuk menghapus iklan memakai AI, tetapi teknologi kali ini jauh lebih kuat sehingga tampaknya bisa langsung mengidentifikasi lalu membisukan atau menghapus iklan
    Eksperimen terkait dirangkum di sini

    • Tulisan yang menarik. Ada seseorang yang membayangkan masa depan pencarian web berbasis AI, dan kesimpulannya tidak cerah
      Pada akhirnya iklan tidak akan hilang. Penyedia AI bisa saja menerima whitelist iklan, atau lebih buruk lagi AI itu sendiri justru mempromosikan produk iklan
  • Beberapa bulan lalu aku membeli dashcam Rexing, tetapi akses ke videonya terlalu merepotkan jadi aku ingin membuat sistem sendiri
    Aku sedang mencoba agar video bisa dijelajahi dan diunduh tanpa harus mencabut kartu SD
    Saat menggulir rekaman, aku sempat berpikir, “akan bagus kalau adegan ini bisa dicari dengan bahasa alami,” dan setelah melihat proyek ini aku jadi ingin langsung menerapkannya
    Terima kasih sudah membagikannya

  • Aku penasaran apakah teknologi ini bisa diterapkan ke perangkat lunak penyuntingan video
    Misalnya dalam plugin Premiere, kita bilang, “hapus semua adegan yang menampilkan kucing,” lalu sistem otomatis membuat EDL (Edit Decision List)

    • Ide yang bagus. Aku juga sudah memikirkan ini sebagai langkah berikutnya
      SentrySearch sudah mengembalikan timestamp in/out yang akurat untuk kueri bahasa alami dan melakukan trimming otomatis dengan ffmpeg
      Memperluasnya ke EDL atau plugin Premiere adalah evolusi yang alami
      Aku bukan ahli Premiere, tetapi jika ada yang mencoba membuat eksportir EDL atau plugin, aku bersedia membantu meninjau dan menggabungkan PR
      Kalau mulai dikerjakan, akan bagus jika diberi tahu lewat issue GitHub
  • Aku penasaran apakah ini juga bisa berjalan di model lokal

  • Ini juga menarik untuk penggunaan pemantauan rumah, bukan hanya dashcam

    • Sebagian besar sistem pemantauan rumah hanya merekam saat ada deteksi gerakan, jadi ruang pencariannya sebenarnya sudah jauh berkurang
      Jika digeser cepat maju-mundur, biasanya cukup mudah menemukan sekitar 30 detik ketika seseorang mendekati pintu depan
    • Fitur seperti ini tampaknya akan menjadi fitur wajib semua sistem keamanan rumah ke depannya
      Dulu aku pernah memutar video berjam-jam untuk memastikan apakah kucingku keluar saat pintu terbuka, padahal ternyata dia bersembunyi di dalam rumah
  • Aku juga sedang mengerjakan proyek embeddings, meski masih tahap prototipe
    Dalam kasusku bukan Gemini, melainkan membuat teka-teki koneksi untuk game (reverse connections)
    Detailnya bisa dilihat di sini

  • Aku melihat bagian kode yang memeriksa apakah “potongan video sebagian besar adalah frame diam”, dan kupikir ini bisa diotomatisasi dengan menggabungkan parameter select dan scene di ffmpeg

  • Aku bekerja di bidang content/video intelligence
    Gemini adalah alat yang sangat cocok untuk use case seperti ini

  • Aku tertawa saat melihat demo yang mencari “ketika sebuah mobil dengan rak sepeda di belakang memotong jalanku pada malam hari”
    Mungkin menemukan mobil itu memang motivasi sebenarnya di balik pembuatan proyek ini

    • Sepertinya memang begitu