commit cfa54fac5dfe57c442e1319e63fa404292e3bd21 Author: Sebastian Wendel Date: Tue Sep 27 00:51:48 2022 +0200 working flake biuld diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..8ebe67a --- /dev/null +++ b/.envrc @@ -0,0 +1,2 @@ +use flake +eval "$shellHook" \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1659dc8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.*/ +**/__pycache__/ +result +*.egg-info +build/ +.direnv +jupyterlab \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..4ffb78d --- /dev/null +++ b/flake.lock @@ -0,0 +1,361 @@ +{ + "nodes": { + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1631705391, + "narHash": "sha256-PzP6vikNJZiS7yANC6sZWQlIDf4E2MTckvAsJxwV0DQ=", + "owner": "teto", + "repo": "flake-compat", + "rev": "8e15c6e3c0f15d0687a2ab6ae92cc7fab896bfed", + "type": "github" + }, + "original": { + "owner": "teto", + "ref": "support-packages", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1627913399, + "narHash": "sha256-hY8g6H2KFL8ownSiFeMOjwPC8P0ueXpCVEbxgda3pko=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "12c64ca55c1014cdc1b16ed5a804aa8576601ff2", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_3": { + "flake": false, + "locked": { + "lastModified": 1627913399, + "narHash": "sha256-hY8g6H2KFL8ownSiFeMOjwPC8P0ueXpCVEbxgda3pko=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "12c64ca55c1014cdc1b16ed5a804aa8576601ff2", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_3": { + "locked": { + "lastModified": 1631561581, + "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_4": { + "locked": { + "lastModified": 1629481132, + "narHash": "sha256-JHgasjPR0/J1J3DRm4KxM4zTyAj4IOJY8vIl75v/kPI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "997f7efcb746a9c140ce1f13c72263189225f482", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_5": { + "locked": { + "lastModified": 1642700792, + "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "846b2ae0fc4cc943637d3d1def4454213e203cba", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "gitignore": { + "flake": false, + "locked": { + "lastModified": 1611672876, + "narHash": "sha256-qHu3uZ/o9jBHiA3MEKHJ06k7w4heOhA+4HCSIvflRxo=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "211907489e9f198594c0eb0ca9256a1949c9d412", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "hls": { + "inputs": { + "flake-compat": "flake-compat_3", + "flake-utils": "flake-utils_4", + "gitignore": "gitignore", + "nixpkgs": "nixpkgs", + "pre-commit-hooks": "pre-commit-hooks" + }, + "locked": { + "lastModified": 1637213318, + "narHash": "sha256-ZgxPwV7t4DyGYP7aXoetq+JHtd73XlOV2fYSflQmOXw=", + "owner": "haskell", + "repo": "haskell-language-server", + "rev": "311107eabbf0537e0c192b2c377d282505b4eff1", + "type": "github" + }, + "original": { + "owner": "haskell", + "repo": "haskell-language-server", + "type": "github" + } + }, + "ihaskell": { + "inputs": { + "flake-compat": "flake-compat_2", + "flake-utils": "flake-utils_3", + "hls": "hls", + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1663329285, + "narHash": "sha256-X4GJE1Ao3cMSaSyxCqYMsUp3jYOeTavQCrgYxDsBark=", + "owner": "gibiansky", + "repo": "IHaskell", + "rev": "e1fc53a97f51293d8b24aa96c3280928596d414b", + "type": "github" + }, + "original": { + "owner": "gibiansky", + "repo": "IHaskell", + "type": "github" + } + }, + "jupyterWith": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils_2", + "ihaskell": "ihaskell", + "nixpkgs": "nixpkgs_3" + }, + "locked": { + "lastModified": 1663881891, + "narHash": "sha256-280tlQA0ZwIMsyqJ4OFhfMNBzDLTBPK9mBQNZ6LxrhY=", + "owner": "tweag", + "repo": "jupyterWith", + "rev": "2f89c4f64586565d8d591cfd428f5c201eb8467c", + "type": "github" + }, + "original": { + "owner": "tweag", + "repo": "jupyterWith", + "type": "github" + } + }, + "mach-nix": { + "inputs": { + "flake-utils": "flake-utils_5", + "nixpkgs": "nixpkgs_4", + "pypi-deps-db": "pypi-deps-db" + }, + "locked": { + "lastModified": 1654084003, + "narHash": "sha256-j/XrVVistvM+Ua+0tNFvO5z83isL+LBgmBi9XppxuKA=", + "owner": "DavHau", + "repo": "mach-nix", + "rev": "7e14360bde07dcae32e5e24f366c83272f52923f", + "type": "github" + }, + "original": { + "id": "mach-nix", + "ref": "3.5.0", + "type": "indirect" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1630887066, + "narHash": "sha256-0ecIlrLsNIIa+zrNmzXXmbMBLZlmHU/aWFsa4bq99Hk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5e47a07e9f2d7ed999f2c7943b0896f5f7321ca3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1634515797, + "narHash": "sha256-elgCUC2khtBkOSpE4gDymNvthTZAI4hGI2iNu3YEUkA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5f0194220f2402b06f7f79bba6351895facb5acb", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1659446231, + "narHash": "sha256-hekabNdTdgR/iLsgce5TGWmfIDZ86qjPhxDg/8TlzhE=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "eabc38219184cc3e04a974fe31857d8e0eac098d", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "release-21.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1643805626, + "narHash": "sha256-AXLDVMG+UaAGsGSpOtQHPIKB+IZ0KSd9WS77aanGzgc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "554d2d8aa25b6e583575459c297ec23750adb6cb", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable", + "type": "indirect" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1664191034, + "narHash": "sha256-J8km863T/UmO0jsi58eqV/H+aua9fXMS8DjELdxwOYc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ef395e396b97462839e3f964fc8795f1c93ec904", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "pre-commit-hooks": { + "inputs": { + "flake-utils": [ + "jupyterWith", + "ihaskell", + "hls", + "flake-utils" + ], + "nixpkgs": [ + "jupyterWith", + "ihaskell", + "hls", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1624971177, + "narHash": "sha256-Amf/nBj1E77RmbSSmV+hg6YOpR+rddCbbVgo5C7BS0I=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "397f0713d007250a2c7a745e555fa16c5dc8cadb", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "pypi-deps-db": { + "flake": false, + "locked": { + "lastModified": 1643877077, + "narHash": "sha256-jv8pIvRFTP919GybOxXE5TfOkrjTbdo9QiCO1TD3ZaY=", + "owner": "DavHau", + "repo": "pypi-deps-db", + "rev": "da53397f0b782b0b18deb72ef8e0fb5aa7c98aa3", + "type": "github" + }, + "original": { + "owner": "DavHau", + "repo": "pypi-deps-db", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "jupyterWith": "jupyterWith", + "mach-nix": "mach-nix", + "nixpkgs": "nixpkgs_5" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..e74d6d7 --- /dev/null +++ b/flake.nix @@ -0,0 +1,184 @@ +{ + description = "A Nix Flake for Cyanovision Project"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs"; + flake-utils.url = "github:numtide/flake-utils"; + jupyterWith.url = "github:tweag/jupyterWith"; + mach-nix.url = "mach-nix/3.5.0"; + }; + + outputs = { + self, + nixpkgs, + jupyterWith, + mach-nix, + flake-utils, + ... + } @ inputs: + flake-utils.lib.eachSystem ["x86_64-linux" "aarch64-linux"] (system: let + pkgs = import nixpkgs { + system = system; + overlays = nixpkgs.lib.attrValues jupyterWith.overlays; + }; + + machNix = mach-nix.lib."${system}"; + + iPython = pkgs.kernels.iPythonWith { + name = cyanovision.name; + packages = p: with p; [sympy numpy]; + ignoreCollisions = true; + }; + + jupyterEnvironment = pkgs.jupyterlabWith { + kernels = [iPython]; + }; + + cyanovision = { + name = "cyanovision"; + src = pkgs.fetchFromGitHub { + owner = "IoannouPanayiotis"; + repo = "Sensor-CDT-Team-Challenge-2021-2022"; + rev = "fd7e538b8afc2227a1100bdd42903b282fcf46bb"; + sha256 = "sha256-e4kEuvH3my4gzOhP9zWCWSUOYokJJ7JBRXSpeMQkkp0="; + }; + requirements = { + release = builtins.readFile ./requirements/release.txt; + dev = builtins.readFile ./requirements/dev.txt; + all = cyanovision.requirements.release + cyanovision.requirements.dev; + }; + packagesExtra = with pkgs; [ + libusb1 + libsndfile + ]; + pythonPackages = with pkgs.python310Packages; [ + matplotlib + numpy + pathlib2 + pillow + pycocotools + tensorflow + tkinter + ]; + packages = { + # cyanovision-deps = machNix.mkPython { + # packagesExtra = cyanovision.packagesExtra; + # requirements = cyanovision.requirements.release; + # providers.tensorflow = "nixpkgs"; + # }; + + cyanovision-ui = pkgs.python3Packages.buildPythonApplication rec { + pname = "${cyanovision.name}-ui"; + version = "2022"; + src = cyanovision.src; + + propagatedBuildInputs = cyanovision.packagesExtra; + + pythonPath = with pkgs.python310Packages; [ + matplotlib + numpy + pathlib2 + pillow + pycocotools + tensorflow + tkinter + ]; + + format = "other"; + doCheck = false; + + postPatch = '' + sed -i '1 i #!/bin/python3' Cyanovision\ UI/cyanovision_ui.py + ''; + + installPhase = '' + mkdir -p $out/bin \ + $out/share/applications/${pname}/images \ + $out/lib/${pkgs.python3.libPrefix}/site-packages + cp Cyanovision\ UI/cyanovision_ui.py $out/bin/${pname} + cp Cyanovision\ UI/*.png $out/share/applications/${pname}/images + cp Cyanovision\ UI/object_detection_train.py \ + $out/lib/${pkgs.python3.libPrefix}/site-packages + ''; + + preFixup = '' + substituteInPlace $out/bin/${pname} \ + --replace "sensors_cdt_logo.png" "$out/share/applications/${pname}/images/sensors_cdt_logo.png" \ + --replace "cyanovision_logo.png" "$out/share/applications/${pname}/images/cyanovision_logo.png" + chmod +x $out/bin/${pname} + patchShebangs --host $out/bin/${pname} + ''; + }; + cyanovision-model = pkgs.stdenv.mkDerivation { + name = cyanovision.name + "-model"; + src = cyanovision.src; + installPhase = '' + mkdir -p $out/share/applications/${cyanovision.name}/model + cp -R Trained\ Object\ Detection\ Model/*.tflite \ + $out/share/applications/${cyanovision.name}/model + ''; + doCheck = false; + }; + cyanovision-dataset = pkgs.stdenv.mkDerivation { + name = cyanovision.name + "-dataset"; + src = cyanovision.src; + installPhase = '' + mkdir -p $out/share/applications/${cyanovision.name}/dataset + cp -R Cyanovision\ UI/dataset \ + $out/share/applications/${cyanovision.name}/dataset + ''; + doCheck = false; + }; + }; + }; + + venv = machNix.mkPython { + packagesExtra = cyanovision.packagesExtra; + requirements = cyanovision.requirements.release; + providers.tensorflow = "nixpkgs"; + _.pytest-cov.propagatedBuildInputs.mod = pySelf: self: oldVal: oldVal ++ [pySelf.tomli]; + }; + in rec { + apps.jupyterlab = { + type = "app"; + program = "${jupyterEnvironment}/bin/jupyter-lab"; + }; + + defaultApp = apps.jupyterlab; + + # packages.cyanovision-deps = cyanovision.packages.cyanovision-deps; + packages.cyanovision-ui = cyanovision.packages.cyanovision-ui; + packages.cyanovision-model = cyanovision.packages.cyanovision-model; + packages.cyanovision-dataset = cyanovision.packages.cyanovision-dataset; + packages.venv = venv; + + packages.docker = + (machNix.mkDockerImage { + packagesExtra = with pkgs; [bash libusb1 libsndfile]; + requirements = builtins.readFile ./requirements/release.txt; + _.pytest-cov.propagatedBuildInputs.mod = pySelf: self: oldVal: oldVal ++ [pySelf.tomli]; + }) + .override + (oldAttrs: { + name = "cyanovision"; + config.Cmd = ["jupyter" "lab" "--notebook-dir=/mnt" "--allow-root" "--ip=0.0.0.0"]; + }); + + defaultPackage = packages.cyanovision-ui; + + # devShell = jupyterEnvironment.env; + devShell = pkgs.mkShell { + name = "nix-cyanovision"; + buildInputs = [ + # cyanovision-dataset + # cyanovision-model + # cyanovision-ui + venv + pkgs.git + pkgs.libusb1 + ]; + shellHook = '' + ''; + }; + }); +} diff --git a/requirements/dev.txt b/requirements/dev.txt new file mode 100644 index 0000000..02f97f6 --- /dev/null +++ b/requirements/dev.txt @@ -0,0 +1,12 @@ +autopep8 +coverage +flake8 +pep8 +pycodestyle +pyflakes +pylint +pytest +pytest-cov +python-dateutil +PyYAML +toml diff --git a/requirements/release.txt b/requirements/release.txt new file mode 100644 index 0000000..4ffdfaf --- /dev/null +++ b/requirements/release.txt @@ -0,0 +1,12 @@ +matplotlib +numpy +pathlib +# PIL +pycocotools +# tensorflow +tflite +# tflite-model-maker +# tflite-support +# tflite-model-maker==0.3.2 +# tkinter +jupyterlab \ No newline at end of file