blakeblackshear / frigate

NVR with realtime local object detection for IP cameras
https://frigate.video
MIT License
18.8k stars 1.71k forks source link

[Config Support]: ffmpeg detection forces scaling to 1280x720? #9334

Closed ufoczek closed 9 months ago

ufoczek commented 9 months ago

Describe the problem you are having

My camera on channel 0 displays the image in 4k (3840x2160). I only use one channel for recording and motion/object detection. I noticed in the processes that ffmpeg uses -s 1280x720 in the detection section. Why? With the configuration shown, the cpu consumption looks as follows:

Process P-ID FPS CPU % Memory % ffmpeg 644 15.2 96.2% 0.9% Capture 328 15.2 55.3% 1.7% Detect 326 0 (0 skipped) 7.6% 1.0%

When I change the resolution in the detection section (from 3840x2160 to a smaller resolution, e.g. 1920x1080) the ffmpeg consumption decreases, but it is still in the process arguments -s 1280x720.

Version

0.13.0-49814B3

Frigate config file

mqtt:
  enabled: True
  host: frigate-mqtt
  port: 1883

detectors:
  coral:
    type: edgetpu
    device: usb
    model:
      path: /edgetpu_model.tflite
      labelmap_path: /labelmap.txt
      width: 320
      height: 320
      input_pixel_format: rgb
      input_tensor: nhwc
      model_type: ssd
  ov:
    type: openvino
    device: AUTO
    model:
      path: /openvino-model/ssdlite_mobilenet_v2.xml
      width: 300
      height: 300
      input_tensor: nhwc
      input_pixel_format: bgr
      labelmap_path: /config/ai/coco_91cl_bkgr.txt

database:
  path: /config/frigate.db

audio:
  enabled: False
  max_not_heard: 30
  min_volume: 250
  listen:
    - alarm

logger:
  default: info

birdseye:
  enabled: False

ffmpeg:
  global_args: -hide_banner -loglevel warning -threads 2
  hwaccel_args: preset-vaapi
  output_args:
    detect: -threads 2 -f rawvideo -pix_fmt yuv420p
    record: preset-record-generic-audio-aac
  retry_interval: 5
detect:
  fps: 15
  enabled: True
  min_initialized: 2
  max_disappeared: 25
  stationary:
    interval: 100
    threshold: 5
  annotation_offset: 0

objects:
  track:
      - person
      - dog
      - cat
      - car
      - vehicle
      - truck
      - bicycle
  filters:
    person:
      min_score: 0.5
      threshold: 0.6
motion:
  threshold: 10
  lightning_threshold: 0.6
  contour_area: 20
  frame_alpha: 0.02
  frame_height: 100
  improve_contrast: true
  mqtt_off_delay: 30

record:
  enabled: True
  expire_interval: 60
  sync_recordings: False
  retain:
    days: 1
    mode: all
  export:
    timelapse_args: "-vf setpts=0.04*PTS -r 30"
  events:
    pre_capture: 5
    post_capture: 15
    objects:
      - person
    required_zones: []
    retain:
      default: 10
      mode: motion
      objects:
        person: 15

snapshots:
  enabled: True
  clean_copy: True
  timestamp: False
  bounding_box: True
  crop: False
  height: 2160
  required_zones: []
  retain:
    default: 10
    objects:
      person: 15
  quality: 100

rtmp:
  enabled: False

go2rtc:
  streams:
    front:
      - rtsp://{FRIGATE_RTSP_USER}:{FRIGATE_RTSP_PASSWORD}@192.168.100.21:554/Streaming/channels/101

live:
  stream_name: front
  height: 720
  quality: 8

timestamp_style:
  position: "tl"
  format: "%m/%d/%Y %H:%M:%S"
  color:
    red: 255
    green: 255
    blue: 255
  thickness: 2
  effect: "solid"

cameras:
  front:
    enabled: True
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/front?video&audio
          roles:
            - detect
            - record
    audio:
      enabled: False
    best_image_timeout: 20
    webui_url: ""

    mqtt:
      enabled: True
      timestamp: True
      bounding_box: True
      crop: True
      height: 270
      quality: 70
      required_zones: []

    ui:
      order: 0
      dashboard: True

    birdseye:
      order: 0

ui:
  live_mode: mse
  use_experimental: False
  time_format: browser
  date_style: short
  time_style: medium
  strftime_fmt: "%d/%m/%Y %H:%M:%S"

telemetry:
  network_interfaces:
    - eth
    - enp
    - eno
    - ens
    - wl
    - lo
  stats:
    intel_gpu_stats: True
    network_bandwidth: True

Relevant log output

ps output:

root     3797391  0.1  0.3 268792 63820 ?        Ssl  23:25   0:01 ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 3840x2160 -i pipe: -f mpegts -s 1280x720 -codec:v mpeg1video -q 8 -bf 0 pipe:
root     3798966 96.1  0.8 567200 136860 ?       Ssl  23:30  12:41 ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel_flags allow_profile_mismatch -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -user_agent FFmpeg Frigate/0.13.0-49814b3 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/front?video&audio -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/front@%Y%m%d%H%M%S%z.mp4 -r 15 -vf fps=15,scale_vaapi=w=3840:h=2160:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:

Frigate stats

{
    "bandwidth_usages": {
        "89": {
            "bandwidth": 793.4
        }
    },
    "cameras": {
        "front": {
            "audio_dBFS": 0,
            "audio_rms": 0,
            "camera_fps": 15,
            "capture_pid": 328,
            "detection_enabled": 1,
            "detection_fps": 0,
            "ffmpeg_pid": 644,
            "pid": 326,
            "process_fps": 15,
            "skipped_fps": 0
        }
    },
    "cpu_usages": {
        "1": {
            "cmdline": "/package/admin/s6/command/s6-svscan -d4 -- /run/service",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "15": {
            "cmdline": "s6-supervise s6-linux-init-shutdownd",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "16": {
            "cmdline": "/package/admin/s6-linux-init/command/s6-linux-init-shutdownd -c /run/s6/basedir -g 3000 -C -B",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "24": {
            "cmdline": "s6-supervise frigate-log",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "25": {
            "cmdline": "s6-supervise go2rtc",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "26": {
            "cmdline": "s6-supervise frigate",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "27": {
            "cmdline": "s6-supervise go2rtc-log",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "28": {
            "cmdline": "s6-supervise s6rc-oneshot-runner",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "29": {
            "cmdline": "s6-supervise nginx",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "30": {
            "cmdline": "s6-supervise s6rc-fdholder",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "31": {
            "cmdline": "s6-supervise nginx-log",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "32": {
            "cmdline": "s6-supervise go2rtc-healthcheck",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "41": {
            "cmdline": "/package/admin/s6-2.11.3.2/command/s6-fdholderd -1 -i data/rules",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "42": {
            "cmdline": "/package/admin/s6/command/s6-ipcserverd -1 -- /package/admin/s6/command/s6-ipcserver-access -v0 -E -l0 -i data/rules -- /package/admin/s6/command/s6-sudod -t 30000 -- /package/admin/s6-rc/command/s6-rc-oneshot-run -l ../.. --",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "77": {
            "cmdline": "s6-log -b -- T 1 n0 s10000000 T /dev/shm/logs/nginx",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "79": {
            "cmdline": "s6-log -b -- T 1 n0 s10000000 T /dev/shm/logs/go2rtc",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "87": {
            "cmdline": "s6-log -b -- T 1 n0 s10000000 T /dev/shm/logs/frigate",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "89": {
            "cmdline": "/usr/local/go2rtc/bin/go2rtc -config=/dev/shm/go2rtc.yaml",
            "cpu": "7.4",
            "cpu_average": "3",
            "mem": "0.1"
        },
        "107": {
            "cmdline": "python3 -u -m frigate",
            "cpu": "2.0",
            "cpu_average": "5",
            "mem": "2.1"
        },
        "109": {
            "cmdline": "bash ./run.user go2rtc-healthcheck",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "122": {
            "cmdline": "nginx: master process nginx",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.1"
        },
        "142": {
            "cmdline": "nginx: worker process",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "143": {
            "cmdline": "nginx: worker process",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "144": {
            "cmdline": "nginx: worker process",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "145": {
            "cmdline": "nginx: worker process",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "146": {
            "cmdline": "nginx: cache manager process",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        },
        "295": {
            "cmdline": "frigate.logger       ",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.5"
        },
        "301": {
            "cmdline": "frigate.recording_manager",
            "cpu": "0.6",
            "cpu_average": "0",
            "mem": "0.8"
        },
        "313": {
            "cmdline": "/usr/bin/python3 -c from multiprocessing.resource_tracker import main;main(41)",
            "cpu": "0.3",
            "cpu_average": "0",
            "mem": "0.1"
        },
        "315": {
            "cmdline": "frigate.detector.coral",
            "cpu": "0.0",
            "cpu_average": "2",
            "mem": "0.8"
        },
        "317": {
            "cmdline": "frigate.detector.ov  ",
            "cpu": "0.0",
            "cpu_average": "17",
            "mem": "3.0"
        },
        "322": {
            "cmdline": "frigate.output       ",
            "cpu": "4.4",
            "cpu_average": "2",
            "mem": "0.9"
        },
        "326": {
            "cmdline": "frigate.process:front",
            "cpu": "7.1",
            "cpu_average": "32",
            "mem": "1.0"
        },
        "327": {
            "cmdline": "ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 3840x2160 -i pipe: -f mpegts -s 1280x720 -codec:v mpeg1video -q 8 -bf 0 pipe:",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.4"
        },
        "328": {
            "cmdline": "frigate.capture:front",
            "cpu": "54.9",
            "cpu_average": "47",
            "mem": "1.7"
        },
        "644": {
            "cmdline": "ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel_flags allow_profile_mismatch -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -user_agent FFmpeg Frigate/0.13.0-49814b3 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/front?video&audio -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/front@%Y%m%d%H%M%S%z.mp4 -r 15 -vf fps=15,scale_vaapi=w=3840:h=2160:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:",
            "cpu": "95.7",
            "cpu_average": "95",
            "mem": "0.9"
        },
        "983": {
            "cmdline": "sleep 30s",
            "cpu": "0.0",
            "cpu_average": "0",
            "mem": "0.0"
        }
    },
    "detection_fps": 0,
    "detectors": {
        "coral": {
            "detection_start": 0,
            "inference_speed": 13.39,
            "pid": 315
        },
        "ov": {
            "detection_start": 0,
            "inference_speed": 30.3,
            "pid": 317
        }
    },
    "gpu_usages": {
        "intel-vaapi": {
            "gpu": "16.1%",
            "mem": "-%"
        }
    },
    "processes": {
        "go2rtc": {
            "pid": 89
        },
        "logger": {
            "pid": 295
        },
        "recording": {
            "pid": 301
        }
    },
    "service": {
        "last_updated": 1705271625,
        "latest_version": "0.12.1",
        "storage": {
            "/dev/shm": {
                "free": 243.2,
                "mount_type": "tmpfs",
                "total": 256,
                "used": 12.8
            },
            "/media/frigate/clips": {
                "free": 114374.7,
                "mount_type": "ext4",
                "total": 233140.7,
                "used": 106851.9
            },
            "/media/frigate/recordings": {
                "free": 114374.7,
                "mount_type": "ext4",
                "total": 233140.7,
                "used": 106851.9
            },
            "/tmp/cache": {
                "free": 114374.7,
                "mount_type": "overlay",
                "total": 233140.7,
                "used": 106851.9
            }
        },
        "temperatures": {},
        "uptime": 514,
        "version": "0.13.0-49814b3"
    }
}

Operating system

Debian

Install method

Docker Compose

Coral version

USB

Any other information that may be helpful

ffmpeg detection args

ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 3840x2160 -i pipe: -f mpegts -s 1280x720 -codec:v mpeg1video -q 8 -bf 0 pipe:

ffmpeg args

ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel_flags allow_profile_mismatch -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -user_agent FFmpeg Frigate/0.13.0-49814b3 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/front?video&audio -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/front@%Y%m%d%H%M%S%z.mp4 -r 15 -vf fps=15,scale_vaapi=w=3840:h=2160:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:

ffprobe output

Stream 0: Return Code: 0

Video: Codec: H.265 / HEVC (High Efficiency Video Coding) Resolution: 3840x2160 FPS: 25/1

Audio: Codec: AAC (Advanced Audio Coding)

docker-compose:

environment: LIBVA_DRIVER_NAME: i965

intel gpu stats:

intel-gpu-top: Intel Geminilake (Gen9) @ /dev/dri/card0 - 252/ 260 MHz; 74% RC6; 1.34/ 6.32 W; 381 irqs/s

     ENGINES     BUSY                                                                                                                                                                                                    MI_SEMA MI_WAIT
   Render/3D    3.12% |██████                                                                                                                                                                                          |      0%      0%
     Blitter    0.55% |█▏                                                                                                                                                                                              |      0%      0%
       Video   13.49% |██████████████████████████                                                                                                                                                                      |      0%      0%
VideoEnhance    0.00% |                                                                                                                                                                                                |      0%      0%
NickM-27 commented 9 months ago

You seem to be misunderstanding, those are not detection args. Those are args for the jsmpeg live output which you have configured to output with a height of 720p