My opinion: Zoneminder vs. Motioneye vs. Shinobi

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:

Category Zoneminder Motioneye Shinobi Winner
Language Perl, PHP Python Javascript Motioneye
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. :smiley:

3 Likes

I’d recommend you consider an alternative to what I consider to be these not great options.
Get a Coral Accelerator and use Frigate. While I still use Spectrum for constant recording, I rarely look at it anymore because Frigate captures people so reliably.

3 Likes

Oooh! I have not heard of Frigate, I’m going to try it immediately. Thank you for this @omayhemo. I have a Coral USB on the way, should be here tomorrow or Tuesday. It’s funny I ordered one in January 2021 but I think because of the pandemic all the Google Coral USBs went unavailable and after I ordered it, the company I bought from never sent it. I realized after three weeks that I had paid and not received so I disputed the charge on my credit card.

I tried ordering it again about a week ago and they’ve shipped it! I am, right now, waiting for the cuda-enabled opencv build to finish compiling for ZM (enabling GPU crunching). I figured out why it wasn’t working but the compile has taken over an hour and a half and it’s still running! If the Frigate feature set is rich, I’ll be happy… I think I’ve been spoiled by ZM.

Wow, Frigate is really something. I can’t wait for my Coral to arrive now… I think I might have to order another one…

I’ve run into something strange though. When I enabled clips originally, I captured one while testing my camera. I’ve been playing with the options and now when the camera is triggered it shows this in the output log file:

frigate.events                 WARNING : Unable to create clip for front_door and event 1624209089.173186-1dlj5b. There were no cache files for this event.

Every time and I can’t figure it out. My yml file looks like this:

detectors:
  cpu1:
    type: cpu
  cpu2:
    type: cpu
  cpu3:
    type: cpu
  cpu4:
    type: cpu
  cpu5:
    type: cpu
  cpu6:
    type: cpu

mqtt:
  host: 192.168.20.11
  user: <mqtt username>
  password: <mqtt password>

ffmpeg:
  hwaccel_args:
    - -c:v
    - h264_cuvid
  input_args:
    - -avoid_negative_ts
    - make_zero
    - -fflags
    - nobuffer
    - -flags
    - low_delay
    - -strict
    - experimental
    - -fflags
    - +genpts+discardcorrupt
    - -use_wallclock_as_timestamps
    - "1"

cameras:
  front_door:
    ffmpeg:
      inputs:
        - path: rtmp://192.168.40.99/bcs/channel0_main.bcs?channel=0&stream=0&user=webuser&password=webuser
          roles:
            - detect
            - record
        - path: rtsp://webuser:[email protected]/h264Preview_01_sub
          roles:
            - clips
            - rtmp
    width: 2048
    height: 1536
    fps: 10
    detect:
      enabled: False
    motion:
      mask:
        - 2048,0,635,0,757,719,999,703,1252,700,1633,839,2048,1054
    clips:
      enabled: True
      objects:
        - person
    snapshots:
      enabled: True
      timestamp: True
      bounding_box: True
      height: 400
    objects:
      track:
        - person
        - dog
        - cat
    mqtt:
      crop: False
1 Like

Search up the forums and you’ll find a thread dedicated to Frigate. I’d recommend reaching out there, the author is very active.

What did you learn… how does Frigate compare to Zoneminder?

Heh, shortly after this analysis I installed frigate and started using it as my primary security camera solution after having used zoneminder as my mainstay for several years. I was very familiar and comfortable with ZM.

The only problem I have discovered with frigate is that occasionally it silently fails to save the recording but for all the other benefits it is completely worth it in my mind (I’ve opened a GitHub ticket for this issue.) Object detection out of the box with TPU and GPU support baked-in is awesome! The integration and compatibility with Home Assistant is icing on the cake.

Thanks to Doug (@omayhemo) for suggesting it to me in this thread. :smiley:

1 Like