Raspberry Pi Tabanlı Açık Kaynak Güvenlik Kamerası
(github.com/TzuHuanTai)- Raspberry Pi WebRTC, Raspberry Pi veya NVIDIA Jetson'ı yaklaşık 200 ms gecikmeli bir WebRTC akış platformuna dönüştüren C++20 tabanlı bir projedir
- Yerel WebRTC kullanır ve donanım/yazılım kodlama, anlık görüntü, kayıt, yayın, WebRTC DataChannel üzerinden uzaktan kontrol ve IoT mesajlaşmasını destekler
- Sinyalleşme yöntemleri olarak MQTT, WHEP, WebSocket desteklenir; MQTT, Pi kamera ile istemcinin WebRTC bağlantı bilgilerini değiş tokuş etmesinde kullanılır
- Desteklenen cihazlar Raspberry Pi Zero/3/4/5 ile NVIDIA Jetson Nano/NX/Orin'dir; kamera olarak CSI veya USB kullanılabilir ve libcamera, libargus, V4L2 desteklenmelidir
- Pi 5 veya donanım kodlayıcısı olmayan cihazlarda çalıştırma seçeneklerinden
--hw-accelkaldırılmalıdır; WHEP bir broker gerektirmez ancak genel erişilebilir bir host adı gerektirir
Proje genel bakışı
- Raspberry Pi WebRTC, Raspberry Pi veya NVIDIA Jetson'ı düşük gecikmeli bir WebRTC akış platformuna dönüştüren bir projedir
- Hedef gecikme süresi yaklaşık 200 ms olarak belirtilir
- Başlıca teknik bilgiler şunlardır
-
libwebrtc m146.7680
-
C++20
- Apache 2.0 lisansı
-
Desteklenen özellikler
- Yerel WebRTC tabanlı akış sunar
- Video kodlama tarafında donanım kodlama ve yazılım kodlamayı destekler
- Kamera özellikleri arasında anlık görüntü, kayıt ve yayın bulunur
- WebRTC DataChannel üzerinden uzaktan kontrol ve IoT mesajlaşmasını destekler
Sinyalleşme yöntemleri ve istemciler
- MQTT sinyalleşme yöntemini destekler
- WHEP sinyalleşme yöntemini destekler
- WebSocket sinyalleşme yöntemini destekler
- picamera.js: SFU sinyalleşmesi ve yayın
Gereksinimler
- Desteklenen kartlar Raspberry Pi Zero/3/4/5 veya NVIDIA Jetson Nano/NX/Orin'dir
- Kamera olarak CSI veya USB kamera kullanılabilir
- Kamera girdisi libcamera, libargus veya V4L2 desteklemelidir
Raspberry Pi hızlı başlangıç
- Raspberry Pi OS kurulumu
- SD karta Lite OS yazdırmak için Raspberry Pi Imager kullanılır
- Bağımlılıkların kurulumu
libmosquitto1,pulseaudio,libavformat61,libswscale8,libyaml-cpp0.8kurulmalıdır
- İkili dosyanın indirilmesi
- En güncel release binary indirilip arşivden çıkarılır
- MQTT sinyalleşmesi
Çalıştırma yöntemi ve dikkat edilmesi gerekenler
- picamera-web açılır, MQTT ayarları eklenir ve ardından
UIDoluşturulur - Pi üzerinde
./pi-webrtcçalıştırılır; kamera, FPS, çözünürlük, MQTT host'u, port, kullanıcı adı, parola, UID gibi seçenekler belirtilir - Örnek seçenekler arasında
--camera=libcamera:0,--fps=30,--width=1280,--height=960,--use-mqtt,--no-audioyer alır --hw-accel, Pi Zero 2W, 3B, 4B üzerinde donanım kodlama kullanılırken eklenen bir seçenektir- Pi 5 veya donanım kodlayıcısı olmayan cihazlarda
--hw-accelkaldırılmalıdır
Gelişmiş kullanım
- SFU üzerinden 1.000'den fazla izleyiciye canlı yayın
- V4L2 sürücüsünü kullanma: USB kameralar için
- Linux servisi olarak çalıştırma
- Kayıt
- Çift yönlü sesli iletişim
- Çift yönlü DataChannel mesajlaşması
- Yapay zeka veya özel bir akışı sanal kameraya aktarma
- Nginx proxy ile WHEP kullanımı
- Home Assistant içinde WebRTC Camera kullanımı
1 yorum
Hacker News yorumları
Bir zamanlar tadilat halindeki bir evi uzaktan izlemem gerekiyordu; tanıdıklarımın önerdiği, bol reklam yapan bir güvenlik sistemini kurmayı denedim ama ucuz değildi ve kurulum sırasında istediğim özelliklerin çoğunun geniş bant internet gerektirdiğini fark ettim
Bu şart pazarlama materyallerinin hiçbir yerinde yazmıyordu, o evde internet yoktu ve güvenlik sistemine aylık 40 doların üstüne internet için en az 60 dolar daha ödemeyi düşünmüyordum
Onun yerine elimdeki Raspberry Pi kamerayı bir RPi Zero 2W'ye bağladım, bir LTE hotspot ve T-Mobile'ın aylık 5 dolarlık ön ödemeli SIM'ini aldım
Yazılım tarafında imgcomp ile her saniye fotoğraf çekip RAM diske kaydediyordum; iki fotoğraf gürültü dışında farklıysa Pi değişen fotoğrafı VPS üzerindeki bir dizine yüklüyor, bunu tetikleyen Gotify da fotoğraf bağlantısını telefona bildirim olarak gönderiyordu
Genel olarak Rube Goldberg usulü bir kurulumdu ama birkaç yıl boyunca neredeyse kusursuz çalıştı
Bir zamanlar ben de benzer bir şey yapıyordum https://youtube.com/watch?v=5E7_40PWqiQ
Evi inşa ederken bir dairede yaşıyordum; kamerayla bir timelapse video oluştururken ek olarak internetten bağlanıp işçilerin nasıl çalıştığını görebilmeyi istiyordum
Ne yazık ki aklıma gelen her fikri benden önce birileri, bu durumda Çin tarafında, zaten yapmıştı. AliExpress'te bunları ve daha fazlasını yapan oldukça iyi kameralar var; ayrıca 3D yazıcıyla basılmış derme çatma bir kasadan da daha iyi görünüyorlar
Hayalim böyle bir cihaz yapıp Tor üzerinden uzaktan erişilebilir kılmak. Böylece tamamen yerel kalırken dünyanın her yerinden uzaktan erişim mümkün olur
Raspberry Pi Zero WH üzerinde kullanmak için baktığım alternatif projelerden biri de mediamtx
https://github.com/bluenviron/mediamtx?tab=readme-ov-file#raspberry-pi-cameras
WebRTC'nin iyi kullanıldığı bir örnek ve tuhaf biçimde WebRTC hâlâ yeterince kullanılmıyor
Kendi barındırdığınız bir sistemde mobil veri üzerinden sinyalleşme sunucusuna uzaktan erişmek istiyorsanız, ISP'niz dinamik IP veriyorsa DDNS ve port yönlendirme ayarlamanız gerekebilir
Ancak bu yöntem sunucuyu internete açık hale getirir. Bunun yerine Pi ile sunucu arasında özel bağlantı kuran bir açık kaynak çözüm kullanılabilir. Böylece sunucuya ağ erişimi açmanız gerekmez; statik IP ya da port yönlendirme de istemez
Sence WebRTC neden yaygınlaşmakta zorlandı? Yazılım kalitesi, eğitim materyalleri gibi sorunlar mı var; hep yeni projeler arıyorum
Raspberry Pi 5'in v4l2 donanımsal kodlamayı desteklememesi kısmını pek anlamadım. Video çözme işine bu kadar emek verilmişken neden kodlayıcı yok?
Kodlama ve çözmede ortak kısımlar var ama Opus codec üzerinde çalışırken de yalnızca bir tarafa ait epeyce kod olduğunu görmüştüm
Tam da aradığım şey. İnsan algılama çalıştırmak istiyordum
yolov3-tiny kullanıyorum; en yeni model değil ama çok hafif bir bilgisayarlı görü makine öğrenimi modeli ve şu anda evin çevresinde gerçek zamanlı insan algılama için C++ ile çıkarım performansını en üst düzeye çıkarmaya çalışıyorum
Gece biri araziye girerse siren ve ışıkların otomatik olarak devreye girip davetsiz kişiyi uzaklaştırmasını istiyorum
https://github.com/jmaczan/yolov3-tiny-openvino
Yaklaştıkça ışık ve sireni kademeli olarak açan bir yöntem düşünmüştüm. Böylece çok daha erken tepki verilirken potansiyel davetsiz kişiye geri çekilmesi için yeterince sinyal de verilmiş olur
Geri bildirim döngüsü içinde adrenalini yavaş yavaş yükseltmek daha etkili olabilir. Ani etkiyi ise yalnızca bir kez değerlendirmek gerekir
Yakın zamanda sürekli açık bir kayıt cihazı yaptım. Asıl amacı sesi düzenli biçimde sürekli kaydetmek; gözetim için değil, harika bir performansın ortasında kayıt düğmesine basmayı hatırlamak istemeyen müzisyenler ve üreticiler için
Zero-W,
arecord/aplaykullanan biraz nazlı bir shell script ve turboLua frontend kullandım; gayet iyi çalışıyorSürekli kayıt yapıyor ama yalnızca kullanıcının belirlediği saklama süresini geçmiş “eski” sesleri siliyor; seçenekler 1 dakika, 5 dakika, 15 dakika, 30 dakika, 1 saat, 3 saat, 5 saat ve 24 saate kadar gidiyor
Kullanıcının iyi bir şey yakaladığını düşündüğü zaman aralığını Keep olarak işaretleyebildiği bir frontend de yaptım. Bu sezgisel yaklaşım birçok gözetim ürünündeki deadman switch/güvenlik kamerası mekanizmasına benziyor
O kadar iyi çalışıyor ki neden hâlâ standart hale gelmediğini merak ediyorum. Depolama alanını doldurmak istememe yönündeki ekonomik tercih hâlâ sürüyor gibi ama bugünlerde 128GB bile oldukça uzun gidiyor
Sanırım bir gün bu yaklaşım yaygınlaşacak. Kurup unutmak, birkaç saat jam yaptıktan sonra geri dönüp yalnızca saklamak istediklerini seçmek ve geri kalan temizliğin kendiliğinden yapılmış olması oldukça ilham verici
Eski RPi Cam Web Interface projesini de unutmamak lazım. Epey eski ama hâlâ Pi'larımda çalışıyor
SD kartı bozmamak için sürekli çalışma ortamında kullanıyorum ve kayıtları bir sunucuya gönderiyor. Arayüzü de temiz
https://elinux.org/RPi-Cam-Web-Interface
Benzer bir amaç için https://github.com/TinkerTurtle/Sentry-Picam çözümünü çok başarılı şekilde kullanıyorum
Kaydedilen görüntü/video klasörlerini syncthing ile 3 başka makineyle senkronize ederek yedeklilik sağladım; ayrıca
sendxmpptabanlı bir push bildirim script'i ekleyip bir şey olduğunda tüm cihazlarda gerçek zamanlı bildirim alır hale getirdimOldukça havalı. Bir zamanlar https://securade.ai tarafında Nvidia Jetson'ı edge cihaz olarak kullanarak benzer bir şey üzerinde çalışmıştım
Şimdi ise reCamera'yı merakla bekliyorum: https://www.seeedstudio.com/blog/recamera/