diff --git a/hosts/kameramann/default.nix b/hosts/kameramann/default.nix index 498fb5b..b21eafb 100644 --- a/hosts/kameramann/default.nix +++ b/hosts/kameramann/default.nix @@ -8,4 +8,6 @@ networking.hostName = "kameramann"; networking.interfaces.ens18.useDHCP = true; + + swapDevices = [{ device = "/swapfile"; size = 4096; }]; } diff --git a/hosts/kameramann/hardware.nix b/hosts/kameramann/hardware.nix index 5ab4352..cf28f1b 100644 --- a/hosts/kameramann/hardware.nix +++ b/hosts/kameramann/hardware.nix @@ -1,4 +1,4 @@ -{ ... }: { +{ pkgs, ... }: { services.qemuGuest.enable = true; boot.loader = { systemd-boot.enable = true; @@ -9,5 +9,14 @@ "virtio_scsi" # use "virtio_blk" instead if disk is /dev/vda "ahci" "sd_mod" + "i915" ]; + + environment.systemPackages = [ pkgs.intel-gpu-tools pkgs.libva-utils ]; + + hardware.enableRedistributableFirmware = true; + hardware.graphics = { + enable = true; + extraPackages = [ pkgs.intel-media-driver pkgs.intel-compute-runtime ]; + }; } diff --git a/hosts/kameramann/models/coco-80.txt b/hosts/kameramann/models/coco-80.txt new file mode 100644 index 0000000..79e0171 --- /dev/null +++ b/hosts/kameramann/models/coco-80.txt @@ -0,0 +1,80 @@ +0 person +1 bicycle +2 car +3 motorcycle +4 airplane +5 car +6 train +7 car +8 boat +9 traffic light +10 fire hydrant +11 stop sign +12 parking meter +13 bench +14 bird +15 cat +16 dog +17 horse +18 sheep +19 cow +20 elephant +21 bear +22 zebra +23 giraffe +24 backpack +25 umbrella +26 handbag +27 tie +28 suitcase +29 frisbee +30 skis +31 snowboard +32 sports ball +33 kite +34 baseball bat +35 baseball glove +36 skateboard +37 surfboard +38 tennis racket +39 bottle +40 wine glass +41 cup +42 fork +43 knife +44 spoon +45 bowl +46 banana +47 apple +48 sandwich +49 orange +50 broccoli +51 carrot +52 hot dog +53 pizza +54 donut +55 cake +56 chair +57 couch +58 potted plant +59 bed +60 dining table +61 toilet +62 tv +63 laptop +64 mouse +65 remote +66 keyboard +67 cell phone +68 microwave +69 oven +70 toaster +71 sink +72 refrigerator +73 book +74 clock +75 vase +76 scissors +77 teddy bear +78 hair drier +79 toothbrush \ No newline at end of file diff --git a/hosts/kameramann/models/yolov9-s-320.onnx b/hosts/kameramann/models/yolov9-s-320.onnx new file mode 100644 index 0000000..1eb30ee Binary files /dev/null and b/hosts/kameramann/models/yolov9-s-320.onnx differ diff --git a/hosts/kameramann/models/yolov9-t-320.onnx b/hosts/kameramann/models/yolov9-t-320.onnx new file mode 100644 index 0000000..bade14e Binary files /dev/null and b/hosts/kameramann/models/yolov9-t-320.onnx differ diff --git a/hosts/kameramann/nvr.nix b/hosts/kameramann/nvr.nix index 417d136..4064dc8 100644 --- a/hosts/kameramann/nvr.nix +++ b/hosts/kameramann/nvr.nix @@ -97,20 +97,43 @@ in services.frigate = { enable = true; + vaapiDriver = "iHD"; hostname = "kameramann.lan.baubs.net"; settings = { + auth.enabled = false; go2rtc.streams = lib.foldl' lib.mergeAttrs { } ( lib.mapAttrsToList (name: _: { "${name}" = [ ]; "${name}_sub" = [ ]; }) cameras ); + mqtt = { + enabled = true; + host = "192.168.178.33"; + user = "frigate"; + password = "frigate"; + }; + ffmpeg.hwaccel_args = "preset-vaapi"; + detectors.ov_0 = { + type = "openvino"; + device = "GPU"; + }; + model = { + model_type = "yolo-generic"; + width = 320; + height = 320; + input_tensor = "nchw"; + input_dtype = "float"; + path = "${./models/yolov9-t-320.onnx}"; + labelmap_path = "${./models/coco-80.txt}"; + }; detect.enabled = true; objects.track = [ "person" "bird" "car" ]; + telemetry.stats.intel_gpu_device = "sys:/sys/devices/pci0000:00/0000:00:02.0"; classification.bird.enabled = true; cameras = lib.mapAttrs ( name: cam: cam.frigate // { ffmpeg.inputs = frigateInputs name; }