Realcat commited on
Commit
2d554b0
β€’
1 Parent(s): 57c1094

update: rename common -> ui

Browse files
.github/workflows/format.yml CHANGED
@@ -19,6 +19,6 @@ jobs:
19
  cache: 'pip'
20
  - run: python -m pip install --upgrade pip
21
  - run: python -m pip install .[dev]
22
- - run: python -m flake8 common/*.py hloc/*.py hloc/matchers/*.py hloc/extractors/*.py
23
- - run: python -m isort common/*.py hloc/*.py hloc/matchers/*.py hloc/extractors/*.py --check-only --diff
24
- - run: python -m black common/*.py hloc/*.py hloc/matchers/*.py hloc/extractors/*.py --check --diff
 
19
  cache: 'pip'
20
  - run: python -m pip install --upgrade pip
21
  - run: python -m pip install .[dev]
22
+ - run: python -m flake8 ui/*.py hloc/*.py hloc/matchers/*.py hloc/extractors/*.py
23
+ - run: python -m isort ui/*.py hloc/*.py hloc/matchers/*.py hloc/extractors/*.py --check-only --diff
24
+ - run: python -m black ui/*.py hloc/*.py hloc/matchers/*.py hloc/extractors/*.py --check --diff
.gitignore CHANGED
@@ -24,3 +24,4 @@ experiments*
24
  gen_example.py
25
  datasets/lines/terrace0.JPG
26
  datasets/lines/terrace1.JPG
 
 
24
  gen_example.py
25
  datasets/lines/terrace0.JPG
26
  datasets/lines/terrace1.JPG
27
+ datasets/South-Building*
README.md CHANGED
@@ -112,7 +112,7 @@ then open http://localhost:7860 in your browser.
112
 
113
  ### Add your own feature / matcher
114
 
115
- I provide an example to add local feature in [hloc/extractors/example.py](hloc/extractors/example.py). Then add feature settings in `confs` in file [hloc/extract_features.py](hloc/extract_features.py). Last step is adding some settings to `model_zoo` in file [common/config.yaml](common/config.yaml).
116
 
117
  ## Contributions welcome!
118
 
 
112
 
113
  ### Add your own feature / matcher
114
 
115
+ I provide an example to add local feature in [hloc/extractors/example.py](hloc/extractors/example.py). Then add feature settings in `confs` in file [hloc/extract_features.py](hloc/extract_features.py). Last step is adding some settings to `model_zoo` in file [ui/config.yaml](ui/config.yaml).
116
 
117
  ## Contributions welcome!
118
 
app.py CHANGED
@@ -1,6 +1,6 @@
1
  import argparse
2
  from pathlib import Path
3
- from common.app_class import ImageMatchingApp
4
 
5
  if __name__ == "__main__":
6
  parser = argparse.ArgumentParser()
@@ -19,7 +19,7 @@ if __name__ == "__main__":
19
  parser.add_argument(
20
  "--config",
21
  type=str,
22
- default=Path(__file__).parent / "common/config.yaml",
23
  help="config file",
24
  )
25
  args = parser.parse_args()
 
1
  import argparse
2
  from pathlib import Path
3
+ from ui.app_class import ImageMatchingApp
4
 
5
  if __name__ == "__main__":
6
  parser = argparse.ArgumentParser()
 
19
  parser.add_argument(
20
  "--config",
21
  type=str,
22
+ default=Path(__file__).parent / "ui/config.yaml",
23
  help="config file",
24
  )
25
  args = parser.parse_args()
format.sh CHANGED
@@ -1,3 +1,3 @@
1
- python -m flake8 common/*.py hloc/*.py hloc/matchers/*.py hloc/extractors/*.py
2
- python -m isort common/*.py hloc/*.py hloc/matchers/*.py hloc/extractors/*.py
3
- python -m black common/*.py hloc/*.py hloc/matchers/*.py hloc/extractors/*.py
 
1
+ python -m flake8 ui/*.py hloc/*.py hloc/matchers/*.py hloc/extractors/*.py
2
+ python -m isort ui/*.py hloc/*.py hloc/matchers/*.py hloc/extractors/*.py
3
+ python -m black ui/*.py hloc/*.py hloc/matchers/*.py hloc/extractors/*.py
pyproject.toml CHANGED
@@ -20,10 +20,10 @@ dynamic = ["dependencies"]
20
  dev = ["black", "flake8", "isort"]
21
 
22
  [tool.setuptools.packages.find]
23
- include = ["hloc*", "common",]
24
 
25
  [tool.setuptools.package-data]
26
- common = ["*.yaml"]
27
 
28
  [tool.setuptools.dynamic]
29
  dependencies = {file = ["requirements.txt"]}
 
20
  dev = ["black", "flake8", "isort"]
21
 
22
  [tool.setuptools.packages.find]
23
+ include = ["hloc*", "ui",]
24
 
25
  [tool.setuptools.package-data]
26
+ ui = ["*.yaml"]
27
 
28
  [tool.setuptools.dynamic]
29
  dependencies = {file = ["requirements.txt"]}
test_app_cli.py CHANGED
@@ -3,13 +3,13 @@ import warnings
3
  import numpy as np
4
  from pathlib import Path
5
  from hloc import logger
6
- from common.utils import (
7
  get_matcher_zoo,
8
  load_config,
9
  DEVICE,
10
  ROOT,
11
  )
12
- from common.api import ImageMatchingAPI
13
 
14
 
15
  def test_all(config: dict = None):
@@ -109,6 +109,6 @@ def test_one():
109
 
110
 
111
  if __name__ == "__main__":
112
- config = load_config(ROOT / "common/config.yaml")
113
  test_one()
114
  test_all(config)
 
3
  import numpy as np
4
  from pathlib import Path
5
  from hloc import logger
6
+ from ui.utils import (
7
  get_matcher_zoo,
8
  load_config,
9
  DEVICE,
10
  ROOT,
11
  )
12
+ from ui.api import ImageMatchingAPI
13
 
14
 
15
  def test_all(config: dict = None):
 
109
 
110
 
111
  if __name__ == "__main__":
112
+ config = load_config(ROOT / "ui/config.yaml")
113
  test_one()
114
  test_all(config)
{common β†’ ui}/__init__.py RENAMED
File without changes
{common β†’ ui}/api.py RENAMED
@@ -289,5 +289,5 @@ class ImageMatchingAPI(torch.nn.Module):
289
 
290
 
291
  if __name__ == "__main__":
292
- config = load_config(ROOT / "common/config.yaml")
293
  api = ImageMatchingAPI(config)
 
289
 
290
 
291
  if __name__ == "__main__":
292
+ config = load_config(ROOT / "ui/config.yaml")
293
  api = ImageMatchingAPI(config)
{common β†’ ui}/app_class.py RENAMED
@@ -6,8 +6,8 @@ import numpy as np
6
  from easydict import EasyDict as edict
7
  from omegaconf import OmegaConf
8
 
9
- from common.sfm import SfmEngine
10
- from common.utils import (
11
  GRADIO_VERSION,
12
  gen_examples,
13
  generate_warp_images,
@@ -388,7 +388,7 @@ class ImageMatchingApp:
388
  "outputs": "experiments/sfm",
389
  }
390
  )
391
- # sfm_ui.call()
392
 
393
  def run(self):
394
  self.app.queue().launch(
@@ -552,12 +552,17 @@ class AppBaseUI:
552
  def __init__(self, cfg: Dict[str, Any] = {}):
553
  self.cfg = OmegaConf.create(cfg)
554
  self.inputs = edict({})
 
 
555
 
556
  def _init_ui(self):
557
  NotImplemented
558
 
559
  def call(self, **kwargs):
560
- self._init_ui()
 
 
 
561
 
562
 
563
  class AppSfmUI(AppBaseUI):
@@ -566,6 +571,7 @@ class AppSfmUI(AppBaseUI):
566
  assert "matcher_zoo" in self.cfg
567
  self.matcher_zoo = self.cfg["matcher_zoo"]
568
  self.sfm_engine = SfmEngine(cfg)
 
569
 
570
  def init_retrieval_dropdown(self):
571
  algos = []
@@ -756,36 +762,40 @@ class AppSfmUI(AppBaseUI):
756
  gr.Textbox(
757
  label="Retriangluation Details",
758
  )
759
- button_sfm = gr.Button("Run SFM", variant="primary")
760
- model_3d = gr.Model3D(
761
  interactive=True,
762
  )
763
- output_image = gr.Image(
764
  label="SFM Visualize",
765
  type="numpy",
766
  image_mode="RGB",
767
  interactive=False,
768
  )
769
 
770
- button_sfm.click(
771
- fn=self.sfm_engine.call,
772
- inputs=[
773
- self.inputs.matcher_key,
774
- self.inputs.input_images, # images
775
- self.inputs.camera_model,
776
- self.inputs.camera_params,
777
- self.inputs.max_keypoints,
778
- self.inputs.keypoint_threshold,
779
- self.inputs.match_threshold,
780
- self.inputs.ransac_threshold,
781
- self.inputs.ransac_confidence,
782
- self.inputs.ransac_max_iter,
783
- self.inputs.scene_graph,
784
- self.inputs.global_feature,
785
- self.inputs.top_k,
786
- self.inputs.mapper_refine_focal_length,
787
- self.inputs.mapper_refine_principle_points,
788
- self.inputs.mapper_refine_extra_params,
789
- ],
790
- outputs=[model_3d, output_image],
791
- )
 
 
 
 
 
6
  from easydict import EasyDict as edict
7
  from omegaconf import OmegaConf
8
 
9
+ from ui.sfm import SfmEngine
10
+ from ui.utils import (
11
  GRADIO_VERSION,
12
  gen_examples,
13
  generate_warp_images,
 
388
  "outputs": "experiments/sfm",
389
  }
390
  )
391
+ sfm_ui.call_empty()
392
 
393
  def run(self):
394
  self.app.queue().launch(
 
552
  def __init__(self, cfg: Dict[str, Any] = {}):
553
  self.cfg = OmegaConf.create(cfg)
554
  self.inputs = edict({})
555
+ self.outputs = edict({})
556
+ self.ui = edict({})
557
 
558
  def _init_ui(self):
559
  NotImplemented
560
 
561
  def call(self, **kwargs):
562
+ NotImplemented
563
+
564
+ def info(self):
565
+ gr.Info("SFM is under construction.")
566
 
567
 
568
  class AppSfmUI(AppBaseUI):
 
571
  assert "matcher_zoo" in self.cfg
572
  self.matcher_zoo = self.cfg["matcher_zoo"]
573
  self.sfm_engine = SfmEngine(cfg)
574
+ self._init_ui()
575
 
576
  def init_retrieval_dropdown(self):
577
  algos = []
 
762
  gr.Textbox(
763
  label="Retriangluation Details",
764
  )
765
+ self.ui.button_sfm = gr.Button("Run SFM", variant="primary")
766
+ self.outputs.model_3d = gr.Model3D(
767
  interactive=True,
768
  )
769
+ self.outputs.output_image = gr.Image(
770
  label="SFM Visualize",
771
  type="numpy",
772
  image_mode="RGB",
773
  interactive=False,
774
  )
775
 
776
+ def call_empty(self):
777
+ self.ui.button_sfm.click(fn=self.info, inputs=[], outputs=[])
778
+
779
+ def call(self):
780
+ self.ui.button_sfm.click(
781
+ fn=self.sfm_engine.call,
782
+ inputs=[
783
+ self.inputs.matcher_key,
784
+ self.inputs.input_images, # images
785
+ self.inputs.camera_model,
786
+ self.inputs.camera_params,
787
+ self.inputs.max_keypoints,
788
+ self.inputs.keypoint_threshold,
789
+ self.inputs.match_threshold,
790
+ self.inputs.ransac_threshold,
791
+ self.inputs.ransac_confidence,
792
+ self.inputs.ransac_max_iter,
793
+ self.inputs.scene_graph,
794
+ self.inputs.global_feature,
795
+ self.inputs.top_k,
796
+ self.inputs.mapper_refine_focal_length,
797
+ self.inputs.mapper_refine_principle_points,
798
+ self.inputs.mapper_refine_extra_params,
799
+ ],
800
+ outputs=[self.outputs.model_3d, self.outputs.output_image],
801
+ )
{common β†’ ui}/config.yaml RENAMED
File without changes
{common β†’ ui}/sfm.py RENAMED
File without changes
{common β†’ ui}/utils.py RENAMED
File without changes
{common β†’ ui}/viz.py RENAMED
File without changes