Kamera Keamanan Open Source Berbasis Raspberry Pi
(github.com/TzuHuanTai)- Raspberry Pi WebRTC adalah proyek berbasis C++20 yang mengubah Raspberry Pi atau NVIDIA Jetson menjadi platform streaming WebRTC dengan latensi sekitar 200 ms
- Menggunakan WebRTC native dan mendukung encoding hardware/software, snapshot, perekaman, siaran, kendali jarak jauh melalui WebRTC DataChannel, serta messaging IoT
- Metode signaling yang didukung adalah MQTT, WHEP, dan WebSocket; MQTT digunakan agar kamera Pi dan klien dapat bertukar informasi koneksi WebRTC
- Perangkat yang didukung mencakup Raspberry Pi Zero/3/4/5 dan NVIDIA Jetson Nano/NX/Orin; kamera dapat menggunakan CSI atau USB dan harus mendukung libcamera, libargus, atau V4L2
- Pada Pi 5 atau perangkat tanpa hardware encoder, opsi
--hw-accelharus dihapus dari opsi eksekusi; WHEP tidak memerlukan broker, tetapi membutuhkan hostname publik
Ikhtisar Proyek
- Raspberry Pi WebRTC adalah proyek yang mengubah Raspberry Pi atau NVIDIA Jetson menjadi platform streaming WebRTC berlatensi rendah
- Target latensi yang dinyatakan adalah sekitar 200 ms
- Teknologi utama yang dicantumkan adalah sebagai berikut
-
libwebrtc m146.7680
-
C++20
- Lisensi Apache 2.0
-
Fitur yang Didukung
- Menyediakan streaming berbasis WebRTC native
- Encoding video mendukung encoding hardware dan encoding software
- Fitur kamera mencakup snapshot, perekaman, dan siaran
- Mendukung kendali jarak jauh dan messaging IoT melalui DataChannel WebRTC
Metode Signaling dan Klien
- Mendukung metode signaling MQTT
- Mendukung metode signaling WHEP
- Mendukung metode signaling WebSocket
- picamera.js: signaling SFU dan siaran
Persyaratan
- Board yang didukung adalah Raspberry Pi Zero/3/4/5 atau NVIDIA Jetson Nano/NX/Orin
- Kamera dapat menggunakan kamera CSI atau USB
- Input kamera harus mendukung libcamera, libargus, atau V4L2
Mulai Cepat Raspberry Pi
- Instal Raspberry Pi OS
- Flash Lite OS ke kartu SD dengan Raspberry Pi Imager
- Instal dependensi
- Instal
libmosquitto1,pulseaudio,libavformat61,libswscale8,libyaml-cpp0.8
- Instal
- Unduh binary
- Unduh release binary terbaru dan ekstrak arsipnya
- Signaling MQTT
Cara Menjalankan dan Catatan
- Buka picamera-web, tambahkan pengaturan MQTT, lalu buat
UID - Jalankan
./pi-webrtcdi Pi, lalu tentukan kamera, FPS, resolusi, host MQTT, port, nama pengguna, kata sandi, UID, dan lainnya sebagai opsi - Contoh opsi mencakup
--camera=libcamera:0,--fps=30,--width=1280,--height=960,--use-mqtt,--no-audio, dan lainnya --hw-acceladalah opsi yang ditambahkan saat menggunakan encoding hardware pada Pi Zero 2W, 3B, 4B- Pada Pi 5 atau perangkat tanpa hardware encoder,
--hw-accelharus dihapus
Penggunaan Lanjutan
- Menyiarkan live stream ke lebih dari 1.000 penonton melalui SFU
- Menggunakan driver V4L2: untuk kamera USB
- Menjalankan sebagai layanan Linux
- Perekaman
- Komunikasi audio dua arah
- Messaging DataChannel dua arah
- Streaming AI atau feed kustom ke kamera virtual
- Menggunakan Nginx proxy dan WHEP
- Menggunakan WebRTC Camera di Home Assistant
1 komentar
Komentar Hacker News
Dulu saya perlu memantau rumah yang sedang direnovasi dari jarak jauh, jadi saya mencoba memasang sistem keamanan yang banyak diiklankan dan direkomendasikan oleh kenalan. Ternyata tidak murah, dan baru saat konfigurasi saya tahu sebagian besar fitur yang saya inginkan mensyaratkan internet broadband
Tidak ada materi pemasaran yang menyebutkan syarat ini, rumah itu tidak punya internet, dan saya tidak berniat membayar 40 dolar per bulan untuk sistem keamanan plus minimal 60 dolar lagi untuk internet
Sebagai gantinya, saya memasang kamera Raspberry Pi ke RPi Zero 2W yang saya punya, lalu membeli hotspot LTE dan SIM prabayar T-Mobile seharga 5 dolar per bulan
Untuk perangkat lunaknya, saya memakai imgcomp untuk mengambil foto tiap detik dan menyimpannya ke RAM disk. Jika dua foto berbeda setelah mengabaikan noise, Pi akan mengunggah foto yang berubah itu ke direktori VPS, lalu itu dijadikan pemicu agar Gotify mengirim tautan foto ke ponsel sebagai notifikasi
Secara keseluruhan memang rangkaian ala Rube Goldberg, tetapi selama beberapa tahun hampir selalu berjalan sempurna
Dulu saya pernah membuat sesuatu yang mirip https://youtube.com/watch?v=5E7_40PWqiQ
Saya tinggal di apartemen selama rumah dibangun, dan ingin membuat video timelapse dengan kamera sekaligus, sebagai fungsi tambahan, bisa mengaksesnya dari internet untuk melihat bagaimana para pekerja mengerjakannya
Sayangnya, setiap ide yang terpikir ternyata sudah dibuat orang lain, dalam kasus ini oleh pihak dari Tiongkok. Di AliExpress ada kamera-kamera yang cukup bagus yang bisa melakukan fungsi seperti ini dan bahkan lebih, dengan finishing yang juga lebih baik daripada casing kasar hasil cetak 3D
Impian saya adalah membuat perangkat seperti ini dan memungkinkan akses jarak jauh lewat Tor. Dengan begitu semuanya tetap sepenuhnya lokal, tetapi tetap bisa diakses dari jarak jauh dari mana saja di dunia
Salah satu proyek alternatif yang saya lihat untuk dicoba di Raspberry Pi Zero WH adalah mediamtx
https://github.com/bluenviron/mediamtx?tab=readme-ov-file#raspberry-pi-cameras
Ini contoh pemanfaatan WebRTC yang bagus, dan anehnya WebRTC masih belum cukup banyak digunakan
Jika self-hosting dan ingin mengakses server signaling dari jarak jauh lewat data seluler, saat ISP memberi IP dinamis mungkin perlu mengatur DDNS dan port forwarding
Namun cara ini mengekspos server ke internet. Sebagai gantinya, bisa memakai solusi open source yang membuat koneksi privat antara Pi dan server. Dengan begitu tidak perlu membuka akses jaringan ke server, dan tidak perlu IP statis atau port forwarding
Saya penasaran kenapa menurut Anda WebRTC kesulitan diadopsi luas. Apakah karena kualitas perangkat lunak, materi edukasi, atau masalah lain? Saya selalu mencari proyek baru
Saya kurang paham bagian bahwa Raspberry Pi 5 tidak mendukung encoding hardware v4l2. Decoding video saja dimasukkan dengan begitu serius, jadi kenapa tidak ada encoder?
Encoding dan decoding memang punya bagian yang tumpang tindih, tetapi saat mengerjakan codec Opus pun ada cukup banyak kode yang hanya relevan untuk salah satu jalur
Ini persis yang saya cari. Saya ingin menjalankan deteksi manusia
Saya memakai yolov3-tiny; model machine learning computer vision ini memang bukan yang terbaru, tetapi sangat ringan. Saat ini saya sedang memaksimalkan performa inferensi di C++ untuk deteksi manusia real-time di sekitar rumah
Saya ingin saat malam ada orang masuk ke properti, sirene dan lampu menyala otomatis untuk mengusir penyusup
https://github.com/jmaczan/yolov3-tiny-openvino
Saya sempat membayangkan pendekatan menyalakan lampu dan sirene secara bertahap saat seseorang makin mendekat. Dengan begitu sistem bereaksi jauh lebih awal sekaligus memberi sinyal yang cukup kepada calon penyusup untuk mundur
Sepertinya menaikkan adrenalin perlahan dalam sebuah feedback loop akan lebih efektif. Efek mendadak hanya perlu dinilai satu kali
Baru-baru ini saya membuat perangkat perekam yang selalu menyala. Tujuan utamanya merekam audio terus-menerus, bukan untuk pengawasan, melainkan untuk musisi dan kreator yang tidak ingin harus ingat menekan tombol rekam di tengah permainan yang bagus
Saya memakai Zero-W, skrip shell yang agak rumit untuk menangani
arecord/aplay, serta frontend turboLua, dan hasilnya berjalan cukup baikPerangkat terus merekam, tetapi hanya menghapus audio “lama” setelah melewati periode retensi yang ditentukan pengguna. Opsinya dari 1 menit, 5 menit, 15 menit, 30 menit, 1 jam, 3 jam, 5 jam, sampai 24 jam
Saya juga membuat frontend agar pengguna bisa memilih Keep untuk rentang waktu ketika mereka merasa telah menangkap sesuatu yang bagus. Heuristik ini mirip mekanisme dead man's switch/kamera keamanan pada banyak produk pengawasan
Cara ini bekerja begitu baik sampai saya heran kenapa belum menjadi semacam standar. Sepertinya masih ada preferensi ekonomis untuk tidak memenuhi ruang penyimpanan, tetapi sekarang 128GB pun bisa bertahan cukup lama
Suatu saat saya rasa pendekatan seperti ini akan menjadi umum. Pasang, lupakan, lalu setelah beberapa jam jam session kembali dan hanya cari bagian yang ingin disimpan; sisanya sudah beres sendiri. Cukup menginspirasi
Jangan lupakan proyek lama RPi Cam Web Interface. Sudah cukup tua, tetapi masih berjalan di Pi-Pi saya
Saya menjalankannya dalam lingkungan operasi terus-menerus agar tidak merusak kartu SD, dan penyimpanan dikirim ke server. Antarmukanya juga rapi
https://elinux.org/RPi-Cam-Web-Interface
Untuk kebutuhan serupa, saya memakai https://github.com/TinkerTurtle/Sentry-Picam dengan sangat baik
Folder gambar/video yang direkam saya sinkronkan ke 3 mesin lain dengan syncthing untuk redundansi, lalu saya menambahkan skrip notifikasi push berbasis
sendxmppagar kalau ada sesuatu terjadi, semua perangkat langsung mendapat notifikasi real-timeCukup keren. Dulu saya pernah mengerjakan hal mirip di https://securade.ai dengan Nvidia Jetson sebagai perangkat edge
Sekarang saya menantikan reCamera: https://www.seeedstudio.com/blog/recamera/