Skip Navigation
Self-Hosted Main @selfhosted.forum

Frigate CCTV is absolutely amazing

So I've been self-hosting my CCTV for about 3 years now and it's always been... not great

First I gave Blue Iris a try which meant I needed a full Windows VM to run it

And it worked - it did the job and recorded stuff and it was fairly OK at motion detection, but damn did it eat the CPU and draw a lot of electricity for no real reason

A few months later I gave Shinobi CCTV a try in Docker and that's what I've been running since

Again, it's mostly fine but the UI is a little clunky and my use case of "24/7 recording that I can easily watch back" was mostly being met, although I had 1 problem

By default Shinobi segments video into 15 minute chunks

So if someone smashes into my car at 14:45:01 then I can't watch that footage until 15:00

Obviously this is a big flaw, so to get around this I changed the segment size to 1 minute

But I have 4 cameras, so this means that over a day I'll now have 5760 clips per day

Sifting through those to find some footage is not fun

Enter Frigate - I'd tried it before but never really gave it a full chance

It's a bit to wrap your head around at first, but once it's up and running it's just a docker-compose.yml for the container and a simple frigate.yml config file

The docs are EXTENSIVE and answered almost every question I had

But there's 1 extra awesome feature I wasn't originally aware of: OpenVINO

OpenVINO is a deep learning model from Intel that apparently runs on my old Broadwell gen Xeon E5-2650v4 CPUs without issue

I've turned it on and enabled object detection and I gotta say, WOW, it's very good

I can go outside with the dog, walk around for a moment and come back in and it'll pick both of us up no problem

So this saved me about £100 seeing as I don't need a Coral compute module (OK I could still get one, but I'm happy for now)

And just to top all of this off, Frigate and Reolink cameras generally don't play too nicely together, yet with support from the docs, mine are working great

Looking at Zabbix, my CPU utilisation for my CCTV server was averaging 10% whilst using Shinobi

Now it's up to 50% but my UPS runtime hasn't really changed so I'm calling that a win

My config is below if it helps anyone trying to get this set up with Reolink cameras


 
        # Disable MQTT because I'm not connecting this to Home Assistant
    mqtt:
      enabled: false
    
    # Enable 24/7 recording (mode: all means all clips, not just clips with objects in)
    # Keep 30 days worth of footage (Frigate automatically deletes the oldest footage once space gets extremely low)
    record:
      enabled: true
      retain:
        days: 30
        mode: all
    
    # Set the birdseye view to always show a live stream of the cameras
    birdseye:
      mode: continuous
    
    # Detection area for cameras (all 4 of my Reolink RLC-410 cameras are 2560x1920)
    detect:
      width: 2560
      height: 1920
    
    # Objects to track from /labelmap.txt
    objects:
      track:
        - person
        - bicycle
        - car
        - motorcycle
        - bird
        - cat
        - dog
    
    # Copy and paste from docs to use default OpenVINO
    # https://docs.frigate.video/configuration/detectors/#openvino-detector
    detectors:
      ov:
        type: openvino
        device: AUTO
        model:
          path: /openvino-model/ssdlite_mobilenet_v2.xml
    
    model:
      width: 300
      height: 300
      input_tensor: nhwc
      input_pixel_format: bgr
      labelmap_path: /openvino-model/coco_91cl_bkgr.txt
    
    # Config for each camera
    cameras:
      c1-side:
        ffmpeg:
          inputs:
            # Record HD stream
            - path: http://10.10.8.11/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=admin&password={FRIGATE_C1_PASS}
              input_args: preset-http-reolink
              roles:
                - record
            # Use low quality and low FPS stream for object detection
            - path: http://10.10.8.11/flv?port=1935&app=bcs&stream=channel0_sub.bcs&user=admin&password={FRIGATE_C1_PASS}
              input_args: preset-http-reolink
              roles:
                - detect
          # Record audio
          output_args:
            record: preset-record-generic-audio-copy
    
      c2-garden:
        ffmpeg:
          inputs:
            - path: http://10.10.8.12/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=admin&password={FRIGATE_C2_PASS}
              input_args: preset-http-reolink
              roles:
                - record
            - path: http://10.10.8.12/flv?port=1935&app=bcs&stream=channel0_sub.bcs&user=admin&password={FRIGATE_C2_PASS}
              input_args: preset-http-reolink
              roles:
                - detect
          output_args:
            record: preset-record-generic-audio-copy
    
      c3-garage:
        ffmpeg:
          inputs:
            - path: http://10.10.8.13/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=admin&password={FRIGATE_C3_PASS}
              input_args: preset-http-reolink
              roles:
                - record
            - path: http://10.10.8.13/flv?port=1935&app=bcs&stream=channel0_sub.bcs&user=admin&password={FRIGATE_C3_PASS}
              input_args: preset-http-reolink
              roles:
                - detect
          output_args:
            record: preset-record-generic-audio-copy
    
      c4-front:
        ffmpeg:
          inputs:
            - path: http://10.10.8.14/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=admin&password={FRIGATE_C4_PASS}
              input_args: preset-http-reolink
              roles:
                - record
            - path: http://10.10.8.14/flv?port=1935&app=bcs&stream=channel0_sub.bcs&user=admin&password={FRIGATE_C4_PASS}
              input_args: preset-http-reolink
              roles:
                - detect
          output_args:
            record: preset-record-generic-audio-copy
  
19 comments
19 comments