Az időjárás lassan javul, olyannyira, hogy már énekesmadarak is megjelentek az udvaron. Van kint egy régi, vízzel teli edényem, amit rendszeresen ivásra és fürdésre használnak. Már régóta szerettem volna néhány minőségi videót készíteni róluk, ahogyan azt néhány évvel ezelőtt egy régi kamerás telefonnal és egy OBS-szel összekapcsolt mozgásérzékelő szoftverrel tettem. Működött, de a minőség elég gyenge volt, rengeteg CPU erőforrást használt, és nem tudtam hozzányúlni a géphez, mivel billentyűparancsokon keresztül működött.
Azóta beszereztem egy olcsó USB HDMI felvevő eszközt, amely lehetővé teszi, hogy a kameráimat az OBS-hez csatlakoztassam, ez sokkal jobb minőséget és finomabb vezérlést biztosít. A minőség annyira jó, hogy most már megéri a mozgásérzékelős részt javítani.
Hogyan működik?
OBS
Az OBS a 27-es verzió óta tartalmaz egy WebSocket-kiszolgálót. Ez lehetővé teszi a teljes távvezérlést és az előnézeti képeknek a szoftverből való lekérését, így tökéletes ehhez a projekthez.
Tartalmaz egy Replay Buffer funkciót is, amely lehetővé teszi a folyamatos rögzítést egy trigger elsütéséig. Ez lehetővé teszi a jelenet rögzítését, mielőtt az észlelés ténylegesen megtörténne.
A felvételi rész szokásos, csak referenciaként itt vannak a beállításaim. Ez az új NVENC-vel történik egy NVidia 3060 Ti-n.
Az én kódom
A kód a WebSocket-kiszolgálón keresztül minden imageInterval
másodpercben előnézeti képeket kér. Amikor a kép megérkezik, szürkeárnyalatossá konvertáljuk, és az OpenCV-JS segítségével OpenCV Mat-ba transzformáljuk. Ez tetszőleges műveleteket tesz lehetővé a képen és annak összetevőin. Amikor a következő kép megérkezik, azt kivonjuk az előzőből, és csak a különbségek maradnak meg. A különbségértékeket összegezzük és elosztjuk a kép felbontásával, így kapunk egy normalizált, számszerűsített értéket. Ez az érték egy avgSize
hosszúságú tömbbe kerül. Amikor a tömb megtelt, a kód kiszámítja az összes érték átlagtól való eltérését, és összehasonlítja az aktuális kép átlagtól való eltérésével. Ha a különbség nagyobb, mint a motionLimit
, az érzékelés elindul, és a Replay Buffer saveAfter
másodperc után elmentésre kerül.
Ezek mind változtatható paraméterek a kód elején.
1 | const wsAddress = '127.0.0.1:4455'; // OBS Websocket address |
How to try?
Mindenekelőtt telepíteni kell a NodeJS-t és az NPM-et. Menj át a weboldalukra, a telepítéshez csak néhány kattintásra van szükség. Kivéve, ha Linuxon vagy, de akkor tudod, mit kell tenned.
Akkor az én kódomra van szükséged, ami itt a GitHubon elérhető.
Mellékeltem pár példát (19-et igazából), amit ezzel a kóddal rögzítettem. A videók egy Nikon D3300/Sony A5000 géppel készültek egy ilyen olcsó HDMI rögzítőkártyán keresztül, egy Helios 81N (első néhány) és egy Samyang 16mm f/2 (új objektív, erről majd később írok).