From b482a8c10613aa0321a2f5ec5ce1a1d7d22b1e52 Mon Sep 17 00:00:00 2001 From: Zuckerberg Date: Sun, 26 May 2024 17:16:59 -0600 Subject: [PATCH] Restore frigate functionality by reverting to an older tensorflow version for libedgetpu --- flake.lock | 17 ++++++ flake.nix | 3 +- machines/storage/s0/home-automation.nix | 69 +++++++++++++------------ overlays/default.nix | 11 +++- 4 files changed, 64 insertions(+), 36 deletions(-) diff --git a/flake.lock b/flake.lock index 063dd45..197b849 100644 --- a/flake.lock +++ b/flake.lock @@ -215,6 +215,22 @@ "type": "indirect" } }, + "nixpkgs-frigate": { + "locked": { + "lastModified": 1695825837, + "narHash": "sha256-4Ne11kNRnQsmSJCRSSNkFRSnHC4Y5gPDBIQGjjPfJiU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5cfafa12d57374f48bcc36fda3274ada276cf69e", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5cfafa12d57374f48bcc36fda3274ada276cf69e", + "type": "github" + } + }, "nixpkgs-xone-fix": { "flake": false, "locked": { @@ -276,6 +292,7 @@ "flake-utils": "flake-utils", "nix-index-database": "nix-index-database", "nixpkgs": "nixpkgs", + "nixpkgs-frigate": "nixpkgs-frigate", "nixpkgs-xone-fix": "nixpkgs-xone-fix", "radio": "radio", "radio-web": "radio-web", diff --git a/flake.nix b/flake.nix index ff0751a..c745b22 100644 --- a/flake.nix +++ b/flake.nix @@ -1,6 +1,7 @@ { inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11"; + nixpkgs-frigate.url = "github:NixOS/nixpkgs/5cfafa12d57374f48bcc36fda3274ada276cf69e"; flake-utils.url = "github:numtide/flake-utils"; @@ -123,7 +124,7 @@ "aarch64-linux"."iso" = mkIso "aarch64-linux"; }; - overlays.default = import ./overlays; + overlays.default = import ./overlays { inherit inputs; }; nixosModules.kernel-modules = import ./overlays/kernel-modules; deploy.nodes = diff --git a/machines/storage/s0/home-automation.nix b/machines/storage/s0/home-automation.nix index d5f8431..183dc56 100644 --- a/machines/storage/s0/home-automation.nix +++ b/machines/storage/s0/home-automation.nix @@ -3,6 +3,40 @@ let frigateHostname = "frigate.s0"; frigatePort = 61617; + + mkEsp32Cam = address: { + ffmpeg = { + input_args = ""; + inputs = [{ + path = address; + roles = [ "detect" "record" ]; + }]; + + output_args.record = "-f segment -pix_fmt yuv420p -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v libx264 -preset ultrafast -an "; + }; + rtmp.enabled = false; + snapshots = { + enabled = true; + bounding_box = true; + }; + record = { + enabled = true; + retain.days = 10; # Keep video for 10 days + events.retain = { + default = 30; # Keep video with detections for 30 days + mode = "active_objects"; + }; + }; + detect = { + enabled = true; + width = 800; + height = 600; + fps = 10; + }; + objects = { + track = [ "person" ]; + }; + }; in { networking.firewall.allowedTCPPorts = [ @@ -21,40 +55,7 @@ in host = "localhost:1883"; }; cameras = { - dahlia-cam = { - ffmpeg = { - input_args = ""; - inputs = [{ - path = "http://dahlia-cam.lan:8080"; - roles = [ "detect" "record" ]; - }]; - - output_args.record = "-f segment -pix_fmt yuv420p -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v libx264 -preset ultrafast -an "; - }; - rtmp.enabled = false; - snapshots = { - enabled = true; - bounding_box = true; - }; - record = { - enabled = false; - retain.days = 0; # To not retain any recording if there is no detection of any events - events.retain = { - default = 3; # To retain recording for 3 days of only the events that happened - mode = "active_objects"; - }; - }; - detect = { - enabled = true; - width = 800; - height = 600; - fps = 20; - }; - objects = { - track = [ "dog" ]; - filters.dog.threshold = 0.4; - }; - }; + dahlia-cam = mkEsp32Cam "http://dahlia-cam.lan:8080"; }; # ffmpeg = { # hwaccel_args = "preset-vaapi"; diff --git a/overlays/default.nix b/overlays/default.nix index 89fcd8f..29959ce 100644 --- a/overlays/default.nix +++ b/overlays/default.nix @@ -1,6 +1,15 @@ +{ inputs }: final: prev: +let + system = prev.system; + frigatePkgs = inputs.nixpkgs-frigate.legacyPackages.${system}; +in { - libedgetpu = prev.callPackage ./libedgetpu { }; + # It seems that libedgetpu needs to be built with the newer version of tensorflow in nixpkgs + # but I am lazy so I instead just downgrade by using the old nixpkgs + libedgetpu = frigatePkgs.callPackage ./libedgetpu { }; + frigate = frigatePkgs.frigate; + actual-server = prev.callPackage ./actualbudget { }; }