diff --git a/face_morpher/default.nix b/face_morpher/default.nix new file mode 100644 index 0000000..0b074aa --- /dev/null +++ b/face_morpher/default.nix @@ -0,0 +1,48 @@ +{ lib, fetchurl, runCommandNoCC, buildPythonPackage, fetchFromGitHub, dlib, docopt, matplotlib, numpy, opencv4, scipy, model ? null }: +let + model' = if !isNull model then model else + fetchurl { + url = "http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2"; + sha256 = "0bxr25mp6zpzk6icgrmnx7ph0qxs6bdgvjvjhrspmamr1sw2rp7v"; + downloadToTemp = true; + postFetch = '' + bzcat $downloadedFile > $out + ''; + }; + + modelDir = runCommandNoCC "face_morpher-models" { } '' + install -Dm 444 ${lib.escapeShellArg model'} "$out/shape_predictor_68_face_landmarks.dat" + ''; +in +buildPythonPackage rec { + pname = "face_morpher"; + version = "unstable-2019-06-30"; + + src = fetchFromGitHub { + owner = "alyssaq"; + repo = pname; + rev = "7a30611cd9d33469e843cec9cfa23ccf819386a8"; + sha256 = "09ahar661r5046gr3qsv2z22x50jz1bv116ci55fsvcjzv64rygw"; + }; + + propagatedBuildInputs = [ + dlib + docopt + matplotlib + numpy + opencv4 + scipy + ]; + + makeWrapperArgs = [ "--set DLIB_DATA_DIR ${lib.escapeShellArg modelDir}" ]; + + doCheck = false; + + meta = with lib; { + description = "A warper, morpher and averager for human faces"; + homepage = "https://github.com/alyssaq/face_morpher"; + license = licenses.mit; + maintainers = with maintainers; [ sbruder ]; + platforms = platforms.unix; + }; +} diff --git a/flake.nix b/flake.nix index 5dc9a36..021a878 100644 --- a/flake.nix +++ b/flake.nix @@ -28,6 +28,8 @@ deemix = callPythonPackage ./deemix { }; + face_morpher = callPythonPackage ./face_morpher { }; + mpvScripts = prev.mpvScripts // { pitchcontrol = callPackage ./mpv-scripts/pitchcontrol { }; }; @@ -72,6 +74,7 @@ VisiCut cyanrip deemix + face_morpher oha snownews textidote