Raspberry Pi-आधारित ओपन सोर्स सुरक्षा कैमरा
(github.com/TzuHuanTai)- Raspberry Pi WebRTC एक Raspberry Pi या NVIDIA Jetson को लगभग 200ms latency वाले WebRTC streaming platform में बदलने वाला C++20-आधारित प्रोजेक्ट है
- यह native WebRTC का उपयोग करता है और hardware/software encoding, snapshots, recording, broadcasting, तथा WebRTC DataChannel के जरिए remote control और IoT messaging को सपोर्ट करता है
- signaling methods के रूप में MQTT, WHEP, और WebSocket को सपोर्ट करता है, और MQTT का उपयोग Pi camera और client के बीच WebRTC connection information के आदान-प्रदान के लिए होता है
- समर्थित डिवाइस Raspberry Pi Zero/3/4/5 और NVIDIA Jetson Nano/NX/Orin हैं, और कैमरे CSI या USB का उपयोग कर सकते हैं, बशर्ते वे libcamera, libargus, या V4L2 को सपोर्ट करें
- Pi 5 या hardware encoder के बिना डिवाइसों में run options से
--hw-accelहटाना होगा, जबकि WHEP को broker की ज़रूरत नहीं होती लेकिन public hostname चाहिए
प्रोजेक्ट अवलोकन
- Raspberry Pi WebRTC एक ऐसा प्रोजेक्ट है जो Raspberry Pi या NVIDIA Jetson को low-latency WebRTC streaming platform में बदलता है
- लक्ष्य latency लगभग 200ms बताई गई है
- मुख्य तकनीकी विवरण इस प्रकार हैं
-
libwebrtc m146.7680
-
C++20
- Apache 2.0 लाइसेंस
-
समर्थित फीचर
- native WebRTC-आधारित streaming प्रदान करता है
- वीडियो encoding के लिए hardware encoding और software encoding दोनों को सपोर्ट करता है
- कैमरा फीचर्स में snapshots, recording, और broadcasting शामिल हैं
- WebRTC DataChannel के जरिए remote control और IoT messaging को सपोर्ट करता है
signaling methods और clients
- MQTT signaling method को सपोर्ट करता है
- WHEP signaling method को सपोर्ट करता है
- WebSocket signaling method को सपोर्ट करता है
- picamera.js: SFU signaling processing और broadcasting
आवश्यकताएँ
- समर्थित बोर्ड Raspberry Pi Zero/3/4/5 या NVIDIA Jetson Nano/NX/Orin हैं
- कैमरा CSI या USB camera का उपयोग कर सकता है
- camera input को libcamera, libargus, या V4L2 सपोर्ट करना चाहिए
Raspberry Pi क्विक स्टार्ट
- Raspberry Pi OS इंस्टॉल करें
- Raspberry Pi Imager से SD card पर Lite OS flash करें
- dependencies इंस्टॉल करें
libmosquitto1,pulseaudio,libavformat61,libswscale8,libyaml-cpp0.8इंस्टॉल करें
- binary डाउनलोड करें
- नवीनतम release binary डाउनलोड करके unzip करें
- MQTT signaling
चलाने का तरीका और ध्यान देने योग्य बातें
- picamera-web खोलें, MQTT settings जोड़ें, फिर
UIDबनाएं - Pi पर
./pi-webrtcचलाएँ और camera, FPS, resolution, MQTT host, port, username, password, UID आदि को options के रूप में निर्दिष्ट करें - उदाहरण options में
--camera=libcamera:0,--fps=30,--width=1280,--height=960,--use-mqtt,--no-audioआदि शामिल हैं --hw-accelPi Zero 2W, 3B, 4B पर hardware encoding इस्तेमाल करते समय जोड़ा जाने वाला option है- Pi 5 या hardware encoder के बिना डिवाइसों में
--hw-accelहटाना होगा
उन्नत उपयोग
- SFU के जरिए 1,000 से अधिक दर्शकों तक लाइव स्ट्रीम प्रसारित करना
- V4L2 driver का उपयोग: USB camera के लिए
- Linux service के रूप में चलाना
- recording
- two-way audio communication
- two-way DataChannel messaging
- AI या किसी custom feed को virtual camera पर stream करना
- Nginx proxy के साथ WHEP का उपयोग
- Home Assistant में WebRTC Camera का उपयोग
1 टिप्पणियां
Hacker News की राय
पहले रेनोवेशन चल रहे एक घर को दूर से मॉनिटर करना था, इसलिए जान-पहचान वालों के सुझाए हुए, खूब विज्ञापन करने वाले सुरक्षा सिस्टम को लगाने की कोशिश की। वह सस्ता नहीं था, और सेटअप के दौरान ही पता चला कि जिन ज़्यादातर फीचर्स की मुझे ज़रूरत थी, वे ब्रॉडबैंड इंटरनेट मांगते थे
मार्केटिंग मटेरियल में कहीं भी यह शर्त नहीं लिखी थी, उस घर में इंटरनेट नहीं था, और सुरक्षा सिस्टम के 40 डॉलर प्रति माह के ऊपर इंटरनेट के लिए कम-से-कम 60 डॉलर और देने का मेरा इरादा नहीं था
इसके बजाय Raspberry Pi कैमरा को अपने पास मौजूद RPi Zero 2W से जोड़ा, और एक LTE हॉटस्पॉट व T-Mobile का 5 डॉलर प्रति माह वाला प्रीपेड SIM खरीदा
सॉफ्टवेयर में imgcomp से हर सेकंड फोटो लेकर RAM डिस्क में सेव किया, और जब दो फोटो noise को छोड़कर अलग दिखते, तो Pi बदली हुई फोटो को VPS डायरेक्टरी में अपलोड करता था; उसी को trigger बनाकर Gotify से फोन पर फोटो लिंक का notification भेजने की व्यवस्था की
कुल मिलाकर यह Rube Goldberg जैसी व्यवस्था थी, लेकिन कई सालों तक लगभग परफेक्ट चली
पहले कुछ ऐसा ही बना रहा था https://youtube.com/watch?v=5E7_40PWqiQ
घर बनते समय अपार्टमेंट में रह रहा था, और कैमरे से timelapse video बनाते हुए साथ में इंटरनेट से access करके देखना चाहता था कि workers क्या कर रहे हैं
दुर्भाग्य से जो भी idea दिमाग में आता, कोई न कोई—इस मामले में चीन की तरफ—पहले ही बना चुका होता था। AliExpress पर ऐसे काफी अच्छे कैमरे हैं जो ये फीचर और उससे भी ज्यादा करते हैं, और 3D-printed कच्चे-पक्के case से उनकी finishing भी बेहतर है
सपना है कि ऐसा device बनाया जाए और Tor के जरिए remote access किया जा सके। तब यह पूरी तरह local रहते हुए भी दुनिया में कहीं से भी remotely access हो सकेगा
Raspberry Pi Zero WH पर आज़माने के लिए जिन alternative projects को देख रहा था, उनमें mediamtx है
https://github.com/bluenviron/mediamtx?tab=readme-ov-file#raspberry-pi-cameras
WebRTC का अच्छा इस्तेमाल है, और अजीब बात है कि WebRTC अभी भी उतना इस्तेमाल नहीं होता जितना होना चाहिए
self-hosting करते हुए mobile data से signaling server तक remote access करना हो, तो ISP अगर dynamic IP देता है तो DDNS और port forwarding सेट करनी पड़ सकती है
हालांकि इस तरीके में server इंटरनेट पर expose हो जाता है। इसके बजाय Pi और server के बीच private connection बनाने वाला open source solution इस्तेमाल किया जा सकता है। तब server पर network access खोलने की ज़रूरत नहीं रहती, और static IP या port forwarding भी नहीं चाहिए
उत्सुकता है कि आपके हिसाब से WebRTC को व्यापक रूप से जगह बनाने में दिक्कत क्यों आई। क्या यह software quality, educational resources जैसी समस्या है? मैं हमेशा नए projects ढूंढता रहता हूं
यह बात ठीक से समझ नहीं आती कि Raspberry Pi 5 v4l2 hardware encoding support नहीं करता। video decoding तो इतनी मेहनत से डाल दी, फिर encoder क्यों नहीं है?
encoding और decoding में overlap होता है, लेकिन Opus codec पर काम करते समय भी एक ही path पर लागू होने वाला काफी code था
यही चीज़ ढूंढ रहा था। person detection चलाना चाहता था
yolov3-tiny इस्तेमाल कर रहा हूं; यह latest तो नहीं है, लेकिन बहुत lightweight computer vision machine learning model है, और अभी घर के आसपास real-time person detection के लिए C++ में inference performance को maximize कर रहा हूं
चाहता हूं कि रात में कोई property में घुसे तो siren और lights अपने-आप चालू होकर intruder को भगा दें
https://github.com/jmaczan/yolov3-tiny-openvino
मैंने कल्पना की थी कि नज़दीक आने पर lights और siren को gradually चालू किया जाए। इससे बहुत पहले response मिलेगा और संभावित intruder को पीछे हटने का पर्याप्त संकेत दिया जा सकेगा
feedback loop के भीतर adrenaline को धीरे-धीरे बढ़ाना ज्यादा असरदार लग सकता है, क्योंकि अचानक effect पर सिर्फ एक बार फैसला लेना होता है
हाल ही में हमेशा चालू रहने वाला recording device बनाया। मुख्य उद्देश्य audio को लगातार रिकॉर्ड करते रहना है; surveillance के लिए नहीं, बल्कि उन musicians और creators के लिए जो किसी शानदार performance के बीच में record button दबाना याद नहीं रखना चाहते
Zero-W और
arecord/aplayको संभालने वाली थोड़ी जटिल shell script, turboLua frontend का इस्तेमाल किया, और यह काफी अच्छी तरह चलता हैलगातार record करता है, लेकिन user द्वारा तय retention period के बाद केवल “पुराना” audio delete करता है; options 1 मिनट, 5 मिनट, 15 मिनट, 30 मिनट, 1 घंटा, 3 घंटे, 5 घंटे, 24 घंटे तक रखे हैं
एक frontend भी बनाया जिससे user उस time segment को Keep कर सके जिसमें उसे लगे कि कुछ अच्छा capture हुआ है। यह heuristic कई surveillance products के deadman switch/security camera mechanism जैसी है
यह इतना अच्छा काम करता है कि हैरानी होती है कि यह अभी तक standard जैसा क्यों नहीं बन गया। लगता है storage भरना नहीं चाहने वाली आर्थिक preference अभी भी बची हुई है, लेकिन आजकल 128GB भी काफी लंबे समय तक चलता है
कभी न कभी यह तरीका आम हो जाएगा। इसे install करके भूल जाएं, फिर कुछ घंटों की jam के बाद लौटकर सिर्फ वही ढूंढें जिसे रखना है, बाकी cleanup अपने-आप हो चुकी हो—यह काफी inspiring है
पुराने RPi Cam Web Interface project को भी भूलना नहीं चाहिए। काफी पुराना है, लेकिन अभी भी मेरे Pi devices पर चल रहा है
SD card खराब न हो इसलिए लगातार चलने वाले environment में इसे run करता हूं, और storage server पर भेजता हूं। interface भी साफ-सुथरा है
https://elinux.org/RPi-Cam-Web-Interface
मिलते-जुलते उपयोग के लिए https://github.com/TinkerTurtle/Sentry-Picam बहुत अच्छे से इस्तेमाल कर रहा हूं
recorded image/video folders को syncthing से तीन दूसरी machines के साथ sync करके redundancy रखी है, और
sendxmpp-आधारित push notification script लगाई है ताकि कुछ भी हो तो सभी devices पर real-time alerts मिलेंकाफी शानदार। पहले https://securade.ai पर Nvidia Jetson को edge device की तरह इस्तेमाल करके कुछ ऐसा ही काम किया था
अब reCamera का इंतज़ार है: https://www.seeedstudio.com/blog/recamera/