- डैशकैम जैसे video files में natural language से scenes खोजने और उस हिस्से को अपने-आप काटकर निकालने वाला semantic search system
- Google Gemini Embedding 2 मॉडल का उपयोग करके वीडियो को सीधे vector के रूप में embed करता है और उन्हें ChromaDB में स्टोर करके text queries से सीधे तुलना करता है
- ffmpeg से वीडियो को overlapping chunks में विभाजित करके embed किया जाता है, और search के समय सबसे मिलते-जुलते हिस्से को sub-second speed पर लौटाता है
- preprocessing और still-frame skip फीचर से API call लागत कम होती है, और 1 घंटे के वीडियो को index करने की लागत लगभग $2.84 आती है
- Gemini Embedding 2 की direct video embedding क्षमता का उपयोग करके subtitles बनाए बिना भी कई घंटों के वीडियो में तेज semantic search संभव बनाता है
परिचय
- SentrySearch एक ऐसा टूल है जो डैशकैम वीडियो में semantic search करता है; उपयोगकर्ता natural language में query दर्ज करता है और टूल उस scene वाला trimmed clip लौटाता है
- यह Google Gemini Embedding 2 मॉडल का उपयोग करके वीडियो को सीधे vector के रूप में embed करता है और उन्हें ChromaDB local database में स्टोर करता है
- text query को भी उसी vector space में embed किया जाता है ताकि सबसे मिलते-जुलते video fragments खोजे जा सकें
- search result को मूल फ़ाइल से अपने-आप काटकर सेव किया जाता है, और sub-second search speed मिलती है
यह कैसे काम करता है
- वीडियो को overlapping chunks में बाँटा जाता है और हर chunk को Gemini Embedding मॉडल के ज़रिए सीधे embed किया जाता है
- हर embedding vector को ChromaDB में स्टोर किया जाता है, और search के समय text query को उसी vector space में बदलकर match किया जाता है
- सबसे अधिक similarity वाला हिस्सा मूल वीडियो से अपने-आप काटकर clip के रूप में सेव किया जाता है
- वीडियो splitting और trimming के लिए ffmpeg का उपयोग होता है; अगर यह सिस्टम में installed न हो, तो
imageio-ffmpeg अपने-आप उपयोग किया जाता है
इंस्टॉलेशन और शुरुआती सेटअप
- Python 3.10 या उससे ऊपर के environment में नीचे दिए गए command से install किया जा सकता है
git clone के बाद pip install -e .
sentrysearch init command से Gemini API key सेट की जाती है और .env फ़ाइल में सेव की जाती है
- key validity जाँचने के लिए test embedding चलाया जाता है
- manual setup के लिए
.env.example को copy करके API key सीधे जोड़ी जा सकती है
मुख्य commands और options
-
index
- दिए गए folder के भीतर
.mp4 files को recursively scan करके indexing करता है
- हर file को कई chunks में बाँटकर embed किया जाता है
- options
--chunk-duration : chunk की लंबाई (seconds में)
--overlap : chunks के बीच overlap की लंबाई
--no-preprocess : downscaling और frame reduction को छोड़ें
--target-resolution : preprocessing के समय target resolution (default 480p)
--target-fps : preprocessing के समय target frame rate (default 5fps)
--no-skip-still : still-frame sections को भी पूरा embed करें
-
search
- उदाहरण:
sentrysearch search "red truck running a stop sign"
- result similarity score के साथ दिखते हैं, और सबसे अच्छा result अपने-आप trim होकर सेव हो जाता है
- अगर similarity score default threshold (0.35) से कम हो, तो confirmation prompt दिखता है
- options
--results N : दिखाए जाने वाले results की संख्या
--output-dir DIR : clip save path
--no-trim : automatic trimming बंद करें
--threshold : similarity threshold समायोजित करें
-
stats
- कुल indexed chunks और मूल files की संख्या दिखाता है
-
--verbose
- embedding dimensions, API response time, similarity score जैसी debug जानकारी दिखाता है
तकनीकी पृष्ठभूमि
- Gemini Embedding 2 वीडियो को सीधे embed कर सकता है, और text query के साथ उसी 768-dimensional vector space में तुलना कर सकता है
- अलग से subtitle generation या frame captioning की ज़रूरत नहीं होती
- उदाहरण के लिए, “red truck at a stop sign” जैसी text query की तुलना सीधे 30-second video clip से की जा सकती है
- इस क्षमता से कई घंटों के वीडियो में भी sub-second semantic search संभव होती है
लागत संरचना
- default settings (30-second chunks, 5-second overlap) पर 1 घंटे के वीडियो की indexing लागत लगभग $2.84 है
- Gemini API uploaded video से प्रति second 1 frame ही process करता है
- preprocessing के दौरान 480p, 5fps पर downscale किया जाता है ताकि transfer speed optimize हो और timeout से बचाव हो सके
-
लागत घटाने के optimization
- preprocessing : upload size और transfer time कम करता है
- still-frame skipping : जिन हिस्सों में visual change नहीं होता, उन्हें embed नहीं किया जाता
- लंबे समय तक parked vehicle की recording में यह खास तौर पर उपयोगी है
- search query में सिर्फ text embedding होती है, इसलिए लागत लगभग नगण्य है
- अतिरिक्त adjustment options
--chunk-duration, --overlap : API calls की संख्या नियंत्रित करें
--no-skip-still : सभी chunks को embed करें
--target-resolution, --target-fps : preprocessing quality समायोजित करें
--no-preprocess : original chunks को वैसे ही भेजें
सीमाएँ और आगे के सुधार
- still-frame detection JPEG file size comparison पर आधारित एक heuristic तरीका है, इसलिए यह हल्की movement मिस कर सकता है या स्थिर हिस्सों को गलत तरीके से शामिल कर सकता है
- search quality chunk boundaries पर निर्भर करती है; अगर कोई event दो chunks में फैला हो तो वह पूरी तरह capture न हो पाए
- आगे चलकर scene detection आधारित chunk splitting से इसे बेहतर बनाया जा सकता है
- Gemini Embedding 2 अभी preview stage में है, इसलिए API behavior और pricing बदल सकती है
संगतता और आवश्यकताएँ
- यह
.mp4 format की सभी video files पर काम करता है; यह सिर्फ Tesla Sentry Mode वीडियो तक सीमित नहीं है
- folder structure की परवाह किए बिना सभी
.mp4 files को recursively खोजता है
- आवश्यकताएँ
- Python 3.10 या उससे ऊपर
ffmpeg installed होना चाहिए (या imageio-ffmpeg अपने-आप उपयोग होगा)
- Gemini API key आवश्यक है (free key यहाँ से मिल सकती है: aistudio.google.com/apikey)
1 टिप्पणियां
Hacker News टिप्पणियाँ
मुझे यह implementation वाकई बहुत शानदार लगी। अब भी embeddings कुछ हद तक जादू जैसे लगते हैं
लेकिन सबसे बड़ी चिंता यह है कि ऐसी तकनीक वास्तविक दुनिया में निगरानी समाज की ओर ले जा सकती है
अभी बहुत सारे कैमरे हैं, लेकिन वास्तव में हर फुटेज को इंसान द्वारा देख पाना असंभव है, इसलिए कुछ हद तक गुमनामी और निजता बनी रहती है
लेकिन अगर AI सभी वीडियो का real-time में विश्लेषण कर सके और किसी खास व्यक्ति या व्यवहार को natural language से पहचान सके, तो पूर्ण निगरानी (panopticon) हकीकत बन सकती है
अपराध पहचान या गिरने की पहचान जैसे सकारात्मक उपयोग भी होंगे, लेकिन अगर regulation न हो तो इसका परिणाम बहुत खतरनाक हो सकता है
यह अलग-अलग camera systems, ALPR और alerts को integrate करता है, और natural language से video query भी संभव बताई जाती है
आगे चलकर नागरिकों द्वारा लगाए गए कैमरे भी इसमें integrate किए जाने वाले हैं। आखिरकार अगर यह Citizen ऐप जैसी services से जुड़ गया, तो ऐसा समय आ सकता है जब पड़ोसियों के कैमरे सीधे police system से जुड़े हों
यह सचमुच बहुत चिंताजनक दिशा है
इसलिए मुझे लगता है कि ऐसी चीज़ों को local model से process करना ज़रूरी है ताकि वीडियो बाहर न जाए
लेकिन कुल मिलाकर तकनीक की दिशा पर बहुत सावधानी से सोचना चाहिए
समस्या तब होती है जब Flock या Ring की तरह बड़े पैमाने पर deployment हो, या जब एक company के पास सारे वीडियो की access हो
लगता है multimodal AI ad detection और ad insertion के बीच arms race शुरू कर देगा
मैंने पहले Gemini के पुराने model से AI ad removal का experiment किया था, और यह तकनीक उससे कहीं अधिक शक्तिशाली लगती है, जिससे ads को तुरंत पहचानकर mute या remove किया जा सकेगा
संबंधित प्रयोग यहाँ संकलित हैं
आखिरकार ads गायब नहीं होंगे। AI providers को ad whitelist मिल सकती है, या उससे भी बुरा, AI खुद advertised products को promote कर सकता है
मैंने कुछ महीने पहले Rexing dashcam खरीदा था, लेकिन फुटेज access करना बहुत असुविधाजनक है, इसलिए मैं खुद system बनाने की कोशिश कर रहा हूँ
मैं SD card निकाले बिना वीडियो browse और download कर पाऊँ, ऐसा करना चाहता हूँ
recorded footage को scroll करते समय मैंने सोचा था, ‘काश इस scene को natural language में search कर पाता’, और यह project देखकर लगा कि इसे तुरंत लागू करना चाहिए
शेयर करने के लिए धन्यवाद
सोच रहा हूँ कि क्या यह तकनीक video editing software पर लागू की जा सकती है
उदाहरण के लिए, Premiere plugin में अगर कहा जाए “बिल्ली वाले सारे scenes हटा दो”, तो वह अपने-आप EDL (Edit Decision List) बना दे
SentrySearch पहले से natural language queries के लिए सटीक in/out timestamps लौटाता है और ffmpeg से automatic trimming करता है
इसे EDL या Premiere plugin तक बढ़ाना एक स्वाभाविक अगला विकास होगा
मैं Premiere का expert नहीं हूँ, लेकिन अगर कोई EDL exporter या plugin बनाने की कोशिश करे, तो मैं PR review और merge में मदद करने को तैयार हूँ
अगर आप शुरू करें तो GitHub issue से बताना अच्छा रहेगा
जानना चाहता हूँ कि क्या यह local model पर भी काम कर सकता है
dashcam के बजाय home monitoring के लिए भी यह दिलचस्प है
आगे-पीछे जल्दी scroll करें तो दरवाज़े तक कोई आने वाले लगभग 30 सेकंड आसानी से मिल सकते हैं
पहले मैं घंटों वीडियो खंगालता रहा था यह देखने के लिए कि बिल्ली दरवाज़ा खुलने पर बाहर गई थी या नहीं, जबकि वह वास्तव में घर के अंदर छिपी हुई थी
मैं भी एक embeddings project पर काम कर रहा हूँ, हालाँकि अभी वह prototype stage में है
मेरे मामले में Gemini नहीं, बल्कि मैं gaming connection puzzle (reverse connections) बना रहा हूँ
इसके बारे में यहाँ देख सकते हैं
मैंने वह code वाला हिस्सा देखा जिसमें “जाँचना है कि video chunk ज़्यादातर static frames से बना है या नहीं”, और लगता है ffmpeg के select और scene parameters को मिलाकर इसे अपने-आप संभाला जा सकता है
मैं content/video intelligence क्षेत्र में काम करता हूँ
Gemini ऐसे use case के लिए सचमुच बहुत उपयुक्त tool है
demo में “जब पीछे bicycle rack लगी कार ने रात में मुझे cut off किया था” वाला search देखकर हँसी आ गई
शायद उसी कार को ढूँढ़ना इस project को बनाने की असल प्रेरणा रहा होगा