From 971f7155d64c42daed373b83a50b6cc4c46cdcc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Laurent?= <francois.laurent@posteo.net> Date: Mon, 30 May 2022 09:13:32 +0200 Subject: [PATCH] initial larvatagger.jl command --- Manifest.toml | 8 +++- Project.toml | 1 + scripts/larvatagger.jl | 88 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 1 deletion(-) create mode 100755 scripts/larvatagger.jl diff --git a/Manifest.toml b/Manifest.toml index f2ee5f9..cfd7dc3 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -203,6 +203,12 @@ git-tree-sha1 = "5a4168170ede913a2cd679e53c2123cb4b889795" uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" version = "0.25.53" +[[deps.DocOpt]] +deps = ["Dates", "Printf"] +git-tree-sha1 = "866efe767d646ee8c66b15ff22520c03a1200ca7" +uuid = "968ba79b-81e4-546f-ab3a-2eecfa62a9db" +version = "0.4.2" + [[deps.DocStringExtensions]] deps = ["LibGit2"] git-tree-sha1 = "b19534d1895d702889b219c382a6e18010797f0b" @@ -858,7 +864,7 @@ version = "0.1.1" [[deps.PlanarLarvae]] deps = ["DelimitedFiles", "JSON3", "MAT", "Meshes", "OrderedCollections", "SHA", "StaticArrays", "StructTypes"] -git-tree-sha1 = "34279a2e3f91bc7dff05d7d02c8710eadd76fdaf" +git-tree-sha1 = "20a9e95162e6226283a7024ab2352f9d08822d4a" repo-rev = "dev" repo-url = "https://gitlab.pasteur.fr/nyx/planarlarvae.jl" uuid = "c2615984-ef14-4d40-b148-916c85b43307" diff --git a/Project.toml b/Project.toml index 7ba527d..c6ee36b 100644 --- a/Project.toml +++ b/Project.toml @@ -6,6 +6,7 @@ version = "0.3.0" [deps] Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" +DocOpt = "968ba79b-81e4-546f-ab3a-2eecfa62a9db" Formatting = "59287772-0a20-5a39-b81b-1366585eb4c0" JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" JSServe = "824d6782-a2ef-11e9-3a09-e5662e0c26f9" diff --git a/scripts/larvatagger.jl b/scripts/larvatagger.jl new file mode 100755 index 0000000..e8b4152 --- /dev/null +++ b/scripts/larvatagger.jl @@ -0,0 +1,88 @@ +#!/bin/bash +#= +PROJECT_DIR=$(dirname $(dirname $(realpath "${BASH_SOURCE[0]}"))) +if [ "$1" == "open" ]; then FLAGS="-iq "; fi +exec julia --project="$PROJECT_DIR" --color=yes --startup-file=no $FLAGS\ + "${BASH_SOURCE[0]}" "$@" +=# + +using DocOpt +using PlanarLarvae.Datasets, PlanarLarvae.Formats +using LarvaTagger +using JSServe: JSServe, Server + +usage = """Larva Tagger. + +Usage: + larvatagger.jl import <input-path> [<output-file>] [--id=<id>] [--framerate=<fps>] + larvatagger.jl open <input-path> [--backends=<path>] [--port=<number>] [--quiet] + larvatagger.jl open <input-path> [--viewer] [--browser] + larvatagger.jl train <backend-path> <data-repository> [--instance=<name>] + larvatagger.jl -h | --help + +Options: + -h --help Show this screen. + -q --quiet Do not show instructions. + --id=<id> Run ID, e.g. `date_time`. + --framerate=<fps> Camera frame rate, in frames per second. + --backends=<path> Path to backend repository. + --port=<number> Port number the server listens to. + --viewer Disable editing capabilities. + --browser Automatically open a browser tab at the served location. + --instance=<name> Name of the trained model. + +""" + +function main() + parsed_args = docopt(usage) + if parsed_args["import"] + infile = parsed_args["<input-path>"] + outfile = parsed_args["<output-file>"] + kwargs = Dict{Symbol, Any}() + framerate = parsed_args["--framerate"] + if !isnothing(framerate) + kwargs[:framerate] = parse(Float64, framerate) + end + file = load(infile; kwargs...) + runid = parsed_args["--id"] + run = Run(isnothing(runid) ? file.run.id : runid, Track[]; + file.run.attributes[:metadata]...) + run.attributes[:labels] = String[] + Datasets.pushdependency!(run, infile) + if isnothing(outfile) + Datasets.write_json(stdout, run) + else + Datasets.to_json_file(outfile, run) + end + elseif parsed_args["open"] + verbose = !parsed_args["--quiet"] + infile = parsed_args["<input-path>"] + if parsed_args["--viewer"] + app = larvaviewer(infile) + else + kwargs = Dict{Symbol, Any}() + backends = parsed_args["--backends"] + if !isnothing(backends) + kwargs[:backend_directory] = backends + end + app = larvaeditor(infile; kwargs...) + end + # + port = parsed_args["--port"] + port = isnothing(port) ? 9284 : parse(Int, port) + server = Server(app, "0.0.0.0", port) + if parsed_args["--browser"] + JSServe.openurl("http://127.0.0.1:$(port)") + #display(JSServe.BrowserDisplay(), app) + elseif verbose + @info "The server is listening to http://127.0.0.1:$(port)" + end + if verbose + @info "Press Ctrl+D to kill the server" + end + elseif parsed_args["train"] + @error "not implemented yet" + end +end + +main() -- GitLab