-
SurveyJS
Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App. With SurveyJS form UI libraries, you can build and style forms in a fully-integrated drag & drop form builder, render them in your JS app, and store form submission data in any backend, inc. PHP, ASP.NET Core, and Node.js.
Code is here(Specifically under src/thirdparty/iot_devices/NVRChannel).
Basically I stream from RTSP cameras into GStreamer. I have GStreamer constantly convert to MPEG-TS(A wonderful format because the fixed size chunks make stream streaming easy) and output on a named pipe, plus output the keyframes to ramdisk files.
The TS stream I output via a web socket and use a JS player to decode that(See kaithem/data/modules/Beholder for the player code).
But I also output the video to files in the ramdisk continually and keep the last few segments. When record is triggered, I copy all the existing segments over(To catch things before record started), start copying any new ones and start creating an HLS playlist file. When you go to play a file in the web UI, I use an HLS player directly.
This allows playback while a session is still being recorded, and future metadata stuff in the file, and lets me use .ts for everything.
Keyframes go into a motion algorithm that uses PIL to perform an erosion operation and remove small bits of noise, taking into account real motion will be connected pixels. If motion is seen, tflite-runtime runs the Efficientdet model. This is probably the weakest part of the system, since I only look at keyframes and the model is not very accurate I occasionally miss things.
The results get postprocessed because sometimes the model sees things that aren't there. Definitely could use better modeling.
The motion estimator value is exposed as a tag point for other automation triggers in realtime.
I'm using Amcrest at the moment but they have some big ethical problems last I heard, so I'd probably go with TP Link Tapo if they still have RTSP next time.
https://github.com/EternityForest/KaithemAutomation