I have a set of seven Reolink security cameras that I’ve used with Zoneminder for a long time. They’re hooked to a beastly computer (6-core E5-2620 with 128GB of ram) so I have no problem scaling up the shared memory area so ZM can do its thing. Anyway, I’ve run it with dlandon’s object detection docker and recently he deprecated the docker image I was using so I took the opportunity to fully evaluate other options.
Primarily, I was interested in seeing if I could find something else that was also docker-based but would work quickly/easily with GPU and/or TPU offloading. Well, eventually I realized that was a fruitless endeavor. I think ZM probably still wins at this point even though I spent a good chunk of today trying to get it working without success.
I’m going to come out and say: I’m probably biased to ZM since I’ve used it for so long but I did try to give each package a fair shake because I was fully intending to switch to something else. In fact, I ran Motioneye on the machine for the last week but ended up switching back to ZM today because it isn’t as feature-rich.
I put together this table of my experiences so I could try to record the things I found good and bad for each package. After I created the table, I decided I’d tabulate where I thought each package performed well and see how they measured up. This was the result:
|Open Source||Yes||Yes||Not really, weekly nag screen to dismiss, also riddled with licensing options||Zoneminder/Motioneye|
|ONVIF||failed looking for cameras||works well, found all my cameras but used rtsp stream instead of rtmp||Shinobi|
|Mobile App||zmNinja - fully functional - different interface||Motion Eye - look and feel just like web app||Must pay for license to use – didn’t evaluate||Motioneye|
|Camera trigger||excellent support -advanced zoning config, alarmed/filtered/blobed - capturing depends on trigger||mediocre support for triggering has object detection OOTB but requires significant CPU (had to reduce resolution)||terrible trigger support: front-edge one-shot trigger only, then timer-based video recording. Supports zones but not advanced triggering like ZM||Zoneminder|
|Audio support||yes, but not to trigger camera||none||yes, and to trigger recording!||Shinobi|
|Web Interface||Tons of options because ZM has been around a long time. Front page shows all camera’s states at a glance. Various ways to review recordings.||Clean and snappy! Well organized option set, but limited configuration options.||Lots of options but layout, navigation, and feel is terrible. Power video viewer for recordings is terrible. Copy option tree to other cameras is a VERY nice feature.||Zoneminder|
|CPU demand||5.5 load average (full-res 2.8-3MP @ 10fps)||3.5 load average (all cameras scaled down to 1024x768 @ 10fps) - CPU overrun at full-res||I think performance was good but I couldn’t tell if trigger/detection was working until my disk was full of recordings of nothing||Zoneminder|
|Backup/Restore||Manual SQL: mysqldump, mysql redirect import||Button to save and restore to tar.gz file, works great!||Attempted json export, setup new docker instance use import and it failed||Motioneye|
|Integration with HA||Works very well, camera views and camera controls, even obj. detection and alert via mqtt with zmeventnotifier||Frenck’s integration allows for viewing the camera frame and works well but no camera controls||Frenck had developed an integration for this but dropped it in favor of Motioneye because the Shinobi development was too progressing slow||Zoneminder|
|Learning curve||Steep - difficult to set up and configure||Low - meaningful options but also low configurability||Moderate - options and verbiage in config aren’t very clear||Motioneye|
|My opinion: The bad||Antiquated interface. Unable to get addon GPU offload CUDA working, yet.||Front page interface is montage and first click does nothing, second click allows on-screen selection of options.||Could not tell when a camera was recording. Could not get notification of camera trigger to work.|
|My opinion: The good||Solid performance, solid support.||Single multithreaded process. E-mail notification works and was simple to configure.||It’s hard to find something good here. :-/|
|My total winner count||5||5||2|
As you can see, from my judgement, it ends up being a tie. I was surprised by that result but I’d add that if you want something you can just setup and forget about, Motioneye is probably the answer. If you want something that is highly configurable with some amount of pain then ZM is your huckleberry.
The fact that I’m posting this to the Home Assistant forums, I’ll also say that I think ZM has the best integration options for HA giving camera views and camera controls natively. I was able to customize Motioneye to the point where I was going to be able to send it restful commands to pause and resume camera operation but it wasn’t trivial. This is VERY important to me because I inevitably have a spider-web or some fog that causes the cameras to start capturing a bunch of videos and I use HA to detect that is happening and put them to sleep (monitor). It works very well and I don’t want to lose that ability.
Also, ZM offers some very fine-grain control over trigger/record that the other two packages just don’t seem to offer so for a real security suite IMO ZM is the winner. As I said at the top, I’m probably biased so take all of this with a grain of salt.