V4L2 (MJPG) -> cap.read() -> CLAHE(night) -> imencode -> _current_frame (web MJPEG)
-> resize .25 -> gray -> blur -> absdiff -> contours -> motion?
-> motion? VideoWriter.write() : pre_buffer.append(jpeg)
-> on stop: ffmpeg remux fps fix -> Telegram/email
a mjpeg system basically, all in python but does need opencvIn 2018, I had a project where I needed to capture live video of some test equipment that was in an area off limits to humans. I could get measurements remotely but just not fast enough to stop the test if something went wrong. We also had no idea what to expect if something went wrong so there was no way to setup a trigger for a screengrab. We had zero funds for buying anything, PM told me to beg, borrow, or steal what I needed. I got a couple of old laptops and webcams from IT and built my own version of this using a slick ffmpeg one-liner to record locally and stream to another laptop outside the off limits area. I did have to buy a USB 3.0 ExpressCard, which I kept, because turns out you can't run multiple webcams through the single USB hub every port branched off from (even the docking station ports). It worked great.
The post you replied to very specifically mentioned using an IP camera. Unless you are paying “proper” money per camera, these days most of them are limited out-of-the-box in ways that are intended to drive you to paying a subscription service to have the recordings stored and processed (and presumably used for AI training whether you agree or not) on someone else's server.
The point of this, and other similar projects, is to host that target server yourself to maintain control and privacy. Where it says “such as […] a USB webcam” I assume it is using the same components and libraries that other options do and so will support common IP camera outputs easily too (assuming your camera doesn't protect its feed, or protects it badly, or you can flash it with alternate firmware that doesn't try to lock you in that way), and where it says “such as a spare Linux board …” spare here implies the target audience is people who are likely to have a spare board/box (or resource spare on their home-lab to host an extra container/VM) available so don't need to buy one at current prices.
I have a bunch of Nest cameras and some cheaper Tapo cameras.
The "motion detection" is night and day different. The Tapo does some basic frame-diffing and it's awful. Shadows? DING DING DiNG MOTION DETECTED! gust of wind made some blades of grass move? Motion! Spider? Motion motion motion! Turn down the sensitivity a notch or two and it won't notice a human walk across the frame 2 meters away. The Tapo ones claim to be smart but twigs and leaves still trigger pet/person/motion alerts. It makes them essentially useless.
The Nest cameras are so much better and their "human" detected is usually zero-false-negatives at the cost of one or two false-positives perhaps once every 3 or 4 months, and their app is superior (tapo one frequently needs to be false-killed to load clips). Yes I am aware that the nest ones are streaming back to google 24/7.
Tldr: naive frame-diffing sucks for this sort of thing if used outside. An open source implementation that has accurate and reliable "human detection" would be amazing. Doesn't need to be "AI" - I would hope that there is some sort of computationally reasonable OpenCV way of doing person detection. Perhaps wait for frame-diffing to flag motion then feed it to a more expensive algorithm?
Nest does it in the cloud. Obviously it's more capable but it also means Google grabs all your video: https://support.google.com/googlehome/answer/16594324?hl=en#...
"This feature ensures continuous full-motion recording at 30 frames per second (fps) to comply with gaming industry regulations. Casino Mode guarantees that the frame rate will not dip below 30 fps by forcing automatic bit rate and exposure control to maintain specific predetermined settings."
[1] https://www.retailitinsights.com/doc/arecont-vision-adds-cas...
Instead I would suggest either a direct CSI connection or an external GigE camera.
I have also tried many other IP camera brands over the years, but it seems none of them have figured out how to output fully compliant RTP/RTMP/etc. streams so I end up always having strange and random problems receiving fluid streams from them into a central server.
Coupled with the fact that many brands are just using the same recycled white-label Chinese firmware, I'm not surprised.
Would love better recommendations though if any exist.
Not too sure if you are looking for non Chinese manufactured though, down here anything else is just way too expensive and lower quality anyway!
Another issue is semi-compliant ONVIF implementations for PTZ cameras and/or not having relative movement implemented. Or you know, just lacking RTSP and ONVIF entirely.
> Coupled with the fact that many brands are just using the same recycled white-label Chinese firmware, I'm not surprised.
SDKs for many of the SoCs not being available is really annoying as well. Some of the Ingenic, Sigmastar, Goke etc. are available, but I think many were just leaks from customers rather than intentional releases.