mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-21 21:23:06 +00:00
d55cec42d1
Fixes the error image for unreachable cameras, the idle image for the birdseye view and fix cache path in old clip removal function.
190 lines
5.4 KiB
Nix
190 lines
5.4 KiB
Nix
{ lib
|
|
, callPackage
|
|
, python3
|
|
, fetchFromGitHub
|
|
, fetchurl
|
|
, fetchpatch
|
|
, frigate
|
|
, opencv4
|
|
, nixosTests
|
|
}:
|
|
|
|
let
|
|
version = "0.12.0";
|
|
|
|
src = fetchFromGitHub {
|
|
#name = "frigate-${version}-source";
|
|
owner = "blakeblackshear";
|
|
repo = "frigate";
|
|
rev = "refs/tags/v${version}";
|
|
hash = "sha256-kJ0MnmWThiFbXvrN+zL5pZHq+Ig3DhCc8wPlWX2+nP8=";
|
|
};
|
|
|
|
frigate-web = callPackage ./web.nix {
|
|
inherit version src;
|
|
};
|
|
|
|
python = python3.override {
|
|
packageOverrides = self: super: {
|
|
# https://github.com/blakeblackshear/frigate/blob/v0.12.0/requirements-wheels.txt#L7
|
|
opencv = super.toPythonModule ((opencv4.override {
|
|
enablePython = true;
|
|
pythonPackages = self;
|
|
}).overrideAttrs (oldAttrs: rec {
|
|
version = "4.5.5";
|
|
src = fetchFromGitHub {
|
|
owner = "opencv";
|
|
repo = "opencv";
|
|
rev = "refs/tags/${version}";
|
|
hash = "sha256-TJfzEAMh4JSshZ7oEZPgB59+NBACsj6Z5TCzVOBaEP4=";
|
|
};
|
|
contribSrc = fetchFromGitHub {
|
|
owner = "opencv";
|
|
repo = "opencv_contrib";
|
|
rev = "refs/tags/${version}";
|
|
hash = "sha256-skuH9GYg0mivGaJjxbggXk4x/0bbQISrAawA3ZUGfCk=";
|
|
};
|
|
postUnpack = ''
|
|
cp --no-preserve=mode -r "${contribSrc}/modules" "$NIX_BUILD_TOP/source/opencv_contrib"
|
|
'';
|
|
}));
|
|
};
|
|
};
|
|
|
|
# Tensorflow Lite models
|
|
# https://github.com/blakeblackshear/frigate/blob/v0.12.0/Dockerfile#L88-L91
|
|
tflite_cpu_model = fetchurl {
|
|
url = "https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess.tflite";
|
|
hash = "sha256-kLszpjTgQZFMwYGapd+ZgY5sOWxNLblSwP16nP/Eck8=";
|
|
};
|
|
tflite_edgetpu_model = fetchurl {
|
|
url = "https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess_edgetpu.tflite";
|
|
hash = "sha256-Siviu7YU5XbVbcuRT6UnUr8PE0EVEnENNV2X+qGzVkE=";
|
|
};
|
|
|
|
# OpenVino models
|
|
# https://github.com/blakeblackshear/frigate/blob/v0.12.0/Dockerfile#L92-L95
|
|
openvino_model = fetchurl {
|
|
url = "https://github.com/openvinotoolkit/open_model_zoo/raw/master/data/dataset_classes/coco_91cl_bkgr.txt";
|
|
hash = "sha256-5Cj2vEiWR8Z9d2xBmVoLZuNRv4UOuxHSGZQWTJorXUQ=";
|
|
};
|
|
in
|
|
python.pkgs.buildPythonApplication rec {
|
|
pname = "frigate";
|
|
inherit version;
|
|
format = "other";
|
|
|
|
inherit src;
|
|
|
|
patches = [
|
|
(fetchpatch {
|
|
# numpy 1.24 compat
|
|
url = "https://github.com/blakeblackshear/frigate/commit/cb73d0cd392990448811c7212bc5f09be411fc69.patch";
|
|
hash = "sha256-Spt7eRosmTN8zyJ2uVme5HPVy2TKgBtvbQ6tp6PaNac=";
|
|
})
|
|
];
|
|
|
|
postPatch = ''
|
|
echo 'VERSION = "${version}"' > frigate/version.py
|
|
|
|
substituteInPlace frigate/app.py \
|
|
--replace "Router(migrate_db)" 'Router(migrate_db, "${placeholder "out"}/share/frigate/migrations")'
|
|
|
|
substituteInPlace frigate/const.py \
|
|
--replace "/media/frigate" "/var/lib/frigate" \
|
|
--replace "/tmp/cache" "/var/cache/frigate"
|
|
|
|
substituteInPlace frigate/http.py \
|
|
--replace "/opt/frigate" "${placeholder "out"}/${python.sitePackages}" \
|
|
--replace "/tmp/cache/" "/var/cache/frigate"
|
|
|
|
substituteInPlace frigate/output.py \
|
|
--replace "/opt/frigate" "${placeholder "out"}/${python.sitePackages}"
|
|
|
|
substituteInPlace frigate/record.py \
|
|
--replace "/tmp/cache" "/var/cache/frigate"
|
|
|
|
substituteInPlace frigate/detectors/detector_config.py \
|
|
--replace "/labelmap.txt" "${placeholder "out"}/share/frigate/labelmap.txt"
|
|
|
|
substituteInPlace frigate/detectors/plugins/edgetpu_tfl.py \
|
|
--replace "/edgetpu_model.tflite" "${tflite_edgetpu_model}"
|
|
|
|
substituteInPlace frigate/detectors/plugins/cpu_tfl.py \
|
|
--replace "/cpu_model.tflite" "${tflite_cpu_model}"
|
|
|
|
substituteInPlace frigate/ffmpeg_presets.py --replace \
|
|
'"-timeout" if os.path.exists(BTBN_PATH) else "-stimeout"' \
|
|
'"-timeout"'
|
|
'';
|
|
|
|
dontBuild = true;
|
|
|
|
propagatedBuildInputs = with python.pkgs; [
|
|
# requirements.txt
|
|
scikit-build
|
|
# requirements-wheel.txt
|
|
click
|
|
flask
|
|
imutils
|
|
matplotlib
|
|
numpy
|
|
opencv
|
|
openvino
|
|
paho-mqtt
|
|
peewee
|
|
peewee-migrate
|
|
psutil
|
|
pydantic
|
|
pyyaml
|
|
requests
|
|
scipy
|
|
setproctitle
|
|
tensorflow
|
|
tzlocal
|
|
ws4py
|
|
zeroconf
|
|
];
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
mkdir -p $out/${python.sitePackages}/frigate
|
|
cp -R frigate/* $out/${python.sitePackages}/frigate/
|
|
|
|
mkdir -p $out/share/frigate
|
|
cp -R {migrations,labelmap.txt} $out/share/frigate/
|
|
|
|
cp --no-preserve=mode ${openvino_model} $out/share/frigate/coco_91cl_bkgr.txt
|
|
sed -i 's/truck/car/g' $out/share/frigate/coco_91cl_bkgr.txt
|
|
|
|
runHook postInstall
|
|
'';
|
|
|
|
checkInputs = with python.pkgs; [
|
|
pytestCheckHook
|
|
];
|
|
|
|
passthru = {
|
|
web = frigate-web;
|
|
inherit python;
|
|
pythonPath =(python.pkgs.makePythonPath propagatedBuildInputs) + ":${frigate}/${python.sitePackages}";
|
|
tests = {
|
|
inherit (nixosTests) frigate;
|
|
};
|
|
};
|
|
|
|
meta = with lib; {
|
|
changelog = "https://github.com/blakeblackshear/frigate/releases/tag/v${version}";
|
|
description = "NVR with realtime local object detection for IP cameras";
|
|
longDescription = ''
|
|
A complete and local NVR designed for Home Assistant with AI
|
|
object detection. Uses OpenCV and Tensorflow to perform realtime
|
|
object detection locally for IP cameras.
|
|
'';
|
|
homepage = "https://github.com/blakeblackshear/frigate";
|
|
license = licenses.mit;
|
|
maintainers = with maintainers; [ hexa ];
|
|
};
|
|
}
|