Vincentqyw / image-matching-webui

🤗 image matching toolbox webui
https://huggingface.co/spaces/Realcat/image-matching-webui
Apache License 2.0
760 stars 65 forks source link
aspanformer deep-learning feature-matching gradio image-matching keypoint-matching kornia lightglue loftr pose-estimation sift superglue superpoint topicfm visual-localization

Contributors Forks Stargazers Issues


$\color{red}{\textnormal{Image\ Matching\ WebUI}}$
Identify matching points between two images

Description

This simple tool efficiently matches image pairs using multiple famous image matching algorithms. The tool features a Graphical User Interface (GUI) designed using gradio. You can effortlessly select two images and a matching algorithm and obtain a precise matching result. Note: the images source can be either local images or webcam images.

Try it on

Open In Studio

Here is a demo of the tool:

https://github.com/Vincentqyw/image-matching-webui/assets/18531182/263534692-c3484d1b-cc00-4fdc-9b31-e5b7af07ecd9

The tool currently supports various popular image matching algorithms, namely:

How to use

HuggingFace / Lightning AI

Just try it on

Open In Studio

or deploy it locally following the instructions below.

Requirements

git clone --recursive https://github.com/Vincentqyw/image-matching-webui.git
cd image-matching-webui
conda env create -f environment.yaml
conda activate imw

or using docker:

docker pull vincentqin/image-matching-webui:latest
docker run -it -p 7860:7860 vincentqin/image-matching-webui:latest python app.py --server_name "0.0.0.0" --server_port=7860

Deploy to Railway

Deploy to Railway, setting up a Custom Start Command in Deploy section:

python -m api.server

Run demo

python ./app.py

then open http://localhost:7860 in your browser.

Add your own feature / matcher

I provide an example to add local feature in hloc/extractors/example.py. Then add feature settings in confs in file hloc/extract_features.py. Last step is adding some settings to matcher_zoo in file ui/config.yaml.

Contributions welcome!

External contributions are very much welcome. Please follow the PEP8 style guidelines using a linter like flake8 (reformat using command python -m black .). This is a non-exhaustive list of features that might be valuable additions:

Adding local features / matchers as submodules is very easy. For example, to add the GlueStick:

git submodule add https://github.com/cvg/GlueStick.git third_party/GlueStick

If remote submodule repositories are updated, don't forget to pull submodules with:

git submodule init
git submodule update --remote

if you only want to update one submodule, use git submodule update --remote third_party/GlueStick.

Contributors

Resources

Acknowledgement

This code is built based on Hierarchical-Localization. We express our gratitude to the authors for their valuable source code.