- 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
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
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
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
Masalah muncul ketika sistem seperti Flock atau Ring dideploy dalam skala besar, atau ketika satu perusahaan bisa mengakses semua video
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
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)
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
Jika digeser cepat maju-mundur, biasanya cukup mudah menemukan sekitar 30 detik ketika seseorang mendekati pintu depan
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