vggt commited on
Commit
6d443d9
·
1 Parent(s): 173dcbd

feat(ui): add image swap button to matching interface

Browse files
Files changed (3) hide show
  1. README.md +2 -2
  2. config/config.yaml +0 -507
  3. imcui/ui/image_matching_app.py +28 -0
README.md CHANGED
@@ -1,5 +1,5 @@
1
  ---
2
- title: imcui-dev
3
  emoji: ⚡
4
  colorFrom: green
5
  colorTo: purple
@@ -8,5 +8,5 @@ sdk_version: 6.10.0
8
  app_file: app.py
9
  pinned: true
10
  license: apache-2.0
11
- short_description: Image matching webui (Tiny codebase)
12
  ---
 
1
  ---
2
+ title: imcui
3
  emoji: ⚡
4
  colorFrom: green
5
  colorTo: purple
 
8
  app_file: app.py
9
  pinned: true
10
  license: apache-2.0
11
+ short_description: Image matching webui (vismatch api)
12
  ---
config/config.yaml DELETED
@@ -1,507 +0,0 @@
1
- server:
2
- name: "0.0.0.0"
3
- port: 7860
4
-
5
- defaults:
6
- setting_threshold: 0.1
7
- max_keypoints: 2000
8
- keypoint_threshold: 0.05
9
- enable_ransac: true
10
- ransac_method: CV2_USAC_MAGSAC
11
- ransac_reproj_threshold: 8
12
- ransac_confidence: 0.9999
13
- ransac_max_iter: 10000
14
- ransac_num_samples: 4
15
- match_threshold: 0.2
16
- setting_geometry: Homography
17
-
18
- matcher_zoo:
19
- # example config
20
- Example:
21
- # show in `Matching Model` or not, default: true
22
- enable: false
23
- # matcher name
24
- matcher: example
25
- # skip ci or not, default: false
26
- skip_ci: true
27
- # dense matcher or not, default: true
28
- dense: true
29
- # info
30
- info:
31
- # dispaly name in `Matching Model`
32
- name: example(example)
33
- # conference/journal/workshop Year
34
- source: "CVPR XXXX"
35
- # github link
36
- github: https://github.com/example/example
37
- # paper link
38
- paper: https://arxiv.org/abs/xxxx.xxxx
39
- # project link
40
- project: https://example.com
41
- # show in `support algos` table
42
- display: false
43
- # low, medium, high
44
- efficiency: low
45
-
46
- minima(loftr):
47
- matcher: minima_loftr
48
- dense: true
49
- info:
50
- name: MINIMA(LoFTR) #dispaly name
51
- source: "ARXIV 2024"
52
- paper: https://arxiv.org/abs/2412.19412
53
- display: true
54
- minima(RoMa):
55
- matcher: minima_roma
56
- skip_ci: true
57
- dense: true
58
- info:
59
- name: MINIMA(RoMa) #dispaly name
60
- source: "ARXIV 2024"
61
- paper: https://arxiv.org/abs/2412.19412
62
- display: false
63
- efficiency: low # low, medium, high
64
- omniglue:
65
- enable: true
66
- matcher: omniglue
67
- dense: true
68
- info:
69
- name: OmniGlue
70
- source: "CVPR 2024"
71
- github: https://github.com/Vincentqyw/omniglue-onnx
72
- paper: https://arxiv.org/abs/2405.12979
73
- project: https://hwjiang1510.github.io/OmniGlue
74
- display: true
75
- Mast3R:
76
- enable: false
77
- matcher: mast3r
78
- dense: true
79
- info:
80
- name: Mast3R #dispaly name
81
- source: "CVPR 2024"
82
- github: https://github.com/naver/mast3r
83
- paper: https://arxiv.org/abs/2406.09756
84
- project: https://dust3r.europe.naverlabs.com
85
- display: true
86
- efficiency: low # low, medium, high
87
- DUSt3R:
88
- # TODO: duster is under development
89
- enable: true
90
- # skip_ci: true
91
- matcher: duster
92
- dense: true
93
- info:
94
- name: DUSt3R #dispaly name
95
- source: "CVPR 2024"
96
- github: https://github.com/naver/dust3r
97
- paper: https://arxiv.org/abs/2312.14132
98
- project: https://dust3r.europe.naverlabs.com
99
- display: true
100
- GIM(dkm):
101
- enable: true
102
- # skip_ci: true
103
- matcher: gim(dkm)
104
- dense: true
105
- info:
106
- name: GIM(DKM) #dispaly name
107
- source: "ICLR 2024"
108
- github: https://github.com/xuelunshen/gim
109
- paper: https://arxiv.org/abs/2402.11095
110
- project: https://xuelunshen.com/gim
111
- display: true
112
- efficiency: low # low, medium, high
113
- RoMa:
114
- matcher: roma
115
- skip_ci: true
116
- dense: true
117
- info:
118
- name: RoMa #dispaly name
119
- source: "CVPR 2024"
120
- github: https://github.com/Parskatt/RoMa
121
- paper: https://arxiv.org/abs/2305.15404
122
- project: https://parskatt.github.io/RoMa
123
- display: true
124
- efficiency: low # low, medium, high
125
- dkm:
126
- matcher: dkm
127
- skip_ci: true
128
- dense: true
129
- info:
130
- name: DKM #dispaly name
131
- source: "CVPR 2023"
132
- github: https://github.com/Parskatt/DKM
133
- paper: https://arxiv.org/abs/2202.00667
134
- project: https://parskatt.github.io/DKM
135
- display: true
136
- efficiency: low # low, medium, high
137
- loftr:
138
- matcher: loftr
139
- dense: true
140
- info:
141
- name: LoFTR #dispaly name
142
- source: "CVPR 2021"
143
- github: https://github.com/zju3dv/LoFTR
144
- paper: https://arxiv.org/pdf/2104.00680
145
- project: https://zju3dv.github.io/loftr
146
- display: true
147
- eloftr:
148
- matcher: eloftr
149
- dense: true
150
- info:
151
- name: Efficient LoFTR #dispaly name
152
- source: "CVPR 2024"
153
- github: https://github.com/zju3dv/efficientloftr
154
- paper: https://zju3dv.github.io/efficientloftr/files/EfficientLoFTR.pdf
155
- project: https://zju3dv.github.io/efficientloftr
156
- display: true
157
- xoftr:
158
- matcher: xoftr
159
- dense: true
160
- info:
161
- name: XoFTR #dispaly name
162
- source: "CVPR 2024"
163
- github: https://github.com/OnderT/XoFTR
164
- paper: https://arxiv.org/pdf/2404.09692
165
- project: null
166
- display: true
167
- cotr:
168
- enable: false
169
- skip_ci: true
170
- matcher: cotr
171
- dense: true
172
- info:
173
- name: CoTR #dispaly name
174
- source: "ICCV 2021"
175
- github: https://github.com/ubc-vision/COTR
176
- paper: https://arxiv.org/abs/2103.14167
177
- project: null
178
- display: true
179
- efficiency: low # low, medium, high
180
- topicfm:
181
- matcher: topicfm
182
- dense: true
183
- info:
184
- name: TopicFM #dispaly name
185
- source: "AAAI 2023"
186
- github: https://github.com/TruongKhang/TopicFM
187
- paper: https://arxiv.org/abs/2307.00485
188
- project: null
189
- display: true
190
- aspanformer:
191
- matcher: aspanformer
192
- dense: true
193
- info:
194
- name: ASpanformer #dispaly name
195
- source: "ECCV 2022"
196
- github: https://github.com/Vincentqyw/ml-aspanformer
197
- paper: https://arxiv.org/abs/2208.14201
198
- project: null
199
- display: true
200
- xfeat+lightglue:
201
- enable: true
202
- matcher: xfeat_lightglue
203
- dense: true
204
- info:
205
- name: xfeat+lightglue
206
- source: "CVPR 2024"
207
- github: https://github.com/Vincentqyw/omniglue-onnx
208
- paper: https://arxiv.org/abs/2405.12979
209
- project: https://hwjiang1510.github.io/OmniGlue
210
- display: true
211
- xfeat(sparse):
212
- matcher: NN-mutual
213
- feature: xfeat
214
- dense: false
215
- info:
216
- name: XFeat #dispaly name
217
- source: "CVPR 2024"
218
- github: https://github.com/verlab/accelerated_features
219
- paper: https://arxiv.org/abs/2404.19174
220
- project: null
221
- display: true
222
- xfeat(dense):
223
- matcher: xfeat_dense
224
- dense: true
225
- info:
226
- name: XFeat #dispaly name
227
- source: "CVPR 2024"
228
- github: https://github.com/verlab/accelerated_features
229
- paper: https://arxiv.org/abs/2404.19174
230
- project: null
231
- display: false
232
- dedode:
233
- matcher: Dual-Softmax
234
- feature: dedode
235
- dense: false
236
- info:
237
- name: DeDoDe #dispaly name
238
- source: "3DV 2024"
239
- github: https://github.com/Parskatt/DeDoDe
240
- paper: https://arxiv.org/abs/2308.08479
241
- project: null
242
- display: true
243
- superpoint+superglue:
244
- matcher: superglue
245
- feature: superpoint_max
246
- dense: false
247
- info:
248
- name: SuperGlue #dispaly name
249
- source: "CVPR 2020"
250
- github: https://github.com/magicleap/SuperGluePretrainedNetwork
251
- paper: https://arxiv.org/abs/1911.11763
252
- project: null
253
- display: true
254
- superpoint+lightglue:
255
- matcher: superpoint-lightglue
256
- feature: superpoint_max
257
- dense: false
258
- info:
259
- name: LightGlue #dispaly name
260
- source: "ICCV 2023"
261
- github: https://github.com/cvg/LightGlue
262
- paper: https://arxiv.org/pdf/2306.13643
263
- project: null
264
- display: true
265
- disk:
266
- matcher: NN-mutual
267
- feature: disk
268
- dense: false
269
- info:
270
- name: DISK
271
- source: "NeurIPS 2020"
272
- github: https://github.com/cvlab-epfl/disk
273
- paper: https://arxiv.org/abs/2006.13566
274
- project: null
275
- display: true
276
- disk+dualsoftmax:
277
- matcher: Dual-Softmax
278
- feature: disk
279
- dense: false
280
- info:
281
- name: DISK
282
- source: "NeurIPS 2020"
283
- github: https://github.com/cvlab-epfl/disk
284
- paper: https://arxiv.org/abs/2006.13566
285
- project: null
286
- display: false
287
- superpoint+dualsoftmax:
288
- matcher: Dual-Softmax
289
- feature: superpoint_max
290
- dense: false
291
- info:
292
- name: SuperPoint
293
- source: "CVPRW 2018"
294
- github: https://github.com/magicleap/SuperPointPretrainedNetwork
295
- paper: https://arxiv.org/abs/1712.07629
296
- project: null
297
- display: false
298
- sift+lightglue:
299
- matcher: sift-lightglue
300
- feature: sift
301
- dense: false
302
- info:
303
- name: LightGlue #dispaly name
304
- source: "ICCV 2023"
305
- github: https://github.com/cvg/LightGlue
306
- paper: https://arxiv.org/pdf/2306.13643
307
- project: null
308
- display: true
309
- disk+lightglue:
310
- matcher: disk-lightglue
311
- feature: disk
312
- dense: false
313
- info:
314
- name: LightGlue
315
- source: "ICCV 2023"
316
- github: https://github.com/cvg/LightGlue
317
- paper: https://arxiv.org/pdf/2306.13643
318
- project: null
319
- display: true
320
- aliked+lightglue:
321
- matcher: aliked-lightglue
322
- feature: aliked-n16
323
- dense: false
324
- info:
325
- name: ALIKED
326
- source: "ICCV 2023"
327
- github: https://github.com/Shiaoming/ALIKED
328
- paper: https://arxiv.org/pdf/2304.03608.pdf
329
- project: null
330
- display: true
331
- superpoint+mnn:
332
- matcher: NN-mutual
333
- feature: superpoint_max
334
- dense: false
335
- info:
336
- name: SuperPoint #dispaly name
337
- source: "CVPRW 2018"
338
- github: https://github.com/magicleap/SuperPointPretrainedNetwork
339
- paper: https://arxiv.org/abs/1712.07629
340
- project: null
341
- display: true
342
- sift+sgmnet:
343
- matcher: sgmnet
344
- feature: sift
345
- dense: false
346
- info:
347
- name: SGMNet #dispaly name
348
- source: "ICCV 2021"
349
- github: https://github.com/vdvchen/SGMNet
350
- paper: https://arxiv.org/abs/2108.08771
351
- project: null
352
- display: true
353
- sosnet:
354
- matcher: NN-mutual
355
- feature: sosnet
356
- dense: false
357
- info:
358
- name: SOSNet #dispaly name
359
- source: "CVPR 2019"
360
- github: https://github.com/scape-research/SOSNet
361
- paper: https://arxiv.org/abs/1904.05019
362
- project: https://research.scape.io/sosnet
363
- display: true
364
- hardnet:
365
- matcher: NN-mutual
366
- feature: hardnet
367
- dense: false
368
- info:
369
- name: HardNet #dispaly name
370
- source: "NeurIPS 2017"
371
- github: https://github.com/DagnyT/hardnet
372
- paper: https://arxiv.org/abs/1705.10872
373
- project: null
374
- display: true
375
- d2net:
376
- matcher: NN-mutual
377
- feature: d2net-ss
378
- dense: false
379
- info:
380
- name: D2Net #dispaly name
381
- source: "CVPR 2019"
382
- github: https://github.com/Vincentqyw/d2-net
383
- paper: https://arxiv.org/abs/1905.03561
384
- project: https://dusmanu.com/publications/d2-net.html
385
- display: true
386
- rord:
387
- matcher: NN-mutual
388
- feature: rord
389
- dense: false
390
- info:
391
- name: RoRD #dispaly name
392
- source: "IROS 2021"
393
- github: https://github.com/UditSinghParihar/RoRD
394
- paper: https://arxiv.org/abs/2103.08573
395
- project: https://uditsinghparihar.github.io/RoRD
396
- display: true
397
- alike:
398
- matcher: NN-mutual
399
- feature: alike
400
- dense: false
401
- info:
402
- name: ALIKE #dispaly name
403
- source: "TMM 2022"
404
- github: https://github.com/Shiaoming/ALIKE
405
- paper: https://arxiv.org/abs/2112.02906
406
- project: null
407
- display: true
408
- lanet:
409
- matcher: NN-mutual
410
- feature: lanet
411
- dense: false
412
- info:
413
- name: LANet #dispaly name
414
- source: "ACCV 2022"
415
- github: https://github.com/wangch-g/lanet
416
- paper: https://openaccess.thecvf.com/content/ACCV2022/papers/Wang_Rethinking_Low-level_Features_for_Interest_Point_Detection_and_Description_ACCV_2022_paper.pdf
417
- project: null
418
- display: true
419
- r2d2:
420
- matcher: NN-mutual
421
- feature: r2d2
422
- dense: false
423
- info:
424
- name: R2D2 #dispaly name
425
- source: "NeurIPS 2019"
426
- github: https://github.com/naver/r2d2
427
- paper: https://arxiv.org/abs/1906.06195
428
- project: null
429
- display: true
430
- darkfeat:
431
- matcher: NN-mutual
432
- feature: darkfeat
433
- dense: false
434
- info:
435
- name: DarkFeat #dispaly name
436
- source: "AAAI 2023"
437
- github: https://github.com/THU-LYJ-Lab/DarkFeat
438
- paper: null
439
- project: null
440
- display: true
441
- sift:
442
- matcher: NN-mutual
443
- feature: sift
444
- dense: false
445
- info:
446
- name: SIFT #dispaly name
447
- source: "IJCV 2004"
448
- github: null
449
- paper: https://www.cs.ubc.ca/~lowe/papers/ijcv04.pdf
450
- project: null
451
- display: true
452
- gluestick:
453
- enable: false
454
- matcher: gluestick
455
- dense: true
456
- info:
457
- name: GlueStick #dispaly name
458
- source: "ICCV 2023"
459
- github: https://github.com/cvg/GlueStick
460
- paper: https://arxiv.org/abs/2304.02008
461
- project: https://iago-suarez.com/gluestick
462
- display: true
463
- sold2:
464
- enable: false
465
- matcher: sold2
466
- dense: true
467
- info:
468
- name: SOLD2 #dispaly name
469
- source: "CVPR 2021"
470
- github: https://github.com/cvg/SOLD2
471
- paper: https://arxiv.org/abs/2104.03362
472
- project: null
473
- display: true
474
-
475
- sfd2+imp:
476
- enable: true
477
- matcher: imp
478
- feature: sfd2
479
- dense: false
480
- info:
481
- name: SFD2+IMP #dispaly name
482
- source: "CVPR 2023"
483
- github: https://github.com/feixue94/imp-release
484
- paper: https://arxiv.org/pdf/2304.14837
485
- project: https://feixue94.github.io/
486
- display: true
487
-
488
- sfd2+mnn:
489
- enable: true
490
- matcher: NN-mutual
491
- feature: sfd2
492
- dense: false
493
- info:
494
- name: SFD2+MNN #dispaly name
495
- source: "CVPR 2023"
496
- github: https://github.com/feixue94/sfd2
497
- paper: https://arxiv.org/abs/2304.14845
498
- project: https://feixue94.github.io/
499
- display: true
500
-
501
- retrieval_zoo:
502
- netvlad:
503
- enable: true
504
- openibl:
505
- enable: true
506
- cosplace:
507
- enable: true
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
imcui/ui/image_matching_app.py CHANGED
@@ -129,6 +129,9 @@ class ImageMatchingApp:
129
  button_run = gr.Button(value="Run Match", variant="primary")
130
  with gr.Row():
131
  button_stop = gr.Button(value="Force Stop", variant="stop")
 
 
 
132
 
133
  with gr.Accordion("Advanced Setting", open=False):
134
  with gr.Tab("Matching Setting"):
@@ -408,6 +411,13 @@ class ImageMatchingApp:
408
  outputs=[input_image0, input_image1],
409
  )
410
 
 
 
 
 
 
 
 
411
  # estimate geo
412
  choice_geometry_type.change(
413
  fn=generate_warp_images,
@@ -493,6 +503,24 @@ class ImageMatchingApp:
493
  def _on_select_force_resize(self, visible: bool = False):
494
  return gr.update(visible=visible), gr.update(visible=visible)
495
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
496
  def ui_reset_state(
497
  self,
498
  *_args: Any,
 
129
  button_run = gr.Button(value="Run Match", variant="primary")
130
  with gr.Row():
131
  button_stop = gr.Button(value="Force Stop", variant="stop")
132
+ button_swap_image = gr.Button(
133
+ value="Swap Image", variant="secondary"
134
+ )
135
 
136
  with gr.Accordion("Advanced Setting", open=False):
137
  with gr.Tab("Matching Setting"):
 
411
  outputs=[input_image0, input_image1],
412
  )
413
 
414
+ # Swap images button action
415
+ button_swap_image.click(
416
+ fn=self.swap_images,
417
+ inputs=[input_image0, input_image1],
418
+ outputs=[input_image0, input_image1],
419
+ )
420
+
421
  # estimate geo
422
  choice_geometry_type.change(
423
  fn=generate_warp_images,
 
503
  def _on_select_force_resize(self, visible: bool = False):
504
  return gr.update(visible=visible), gr.update(visible=visible)
505
 
506
+ def swap_images(
507
+ self,
508
+ image0: Optional[np.ndarray],
509
+ image1: Optional[np.ndarray],
510
+ ) -> Tuple[Optional[np.ndarray], Optional[np.ndarray]]:
511
+ """
512
+ Swap the two input images.
513
+
514
+ Args:
515
+ image0: The first input image.
516
+ image1: The second input image.
517
+
518
+ Returns:
519
+ tuple: A tuple containing (image1, image0) - the swapped images.
520
+ """
521
+ logger.info("Swapping images...")
522
+ return image1, image0
523
+
524
  def ui_reset_state(
525
  self,
526
  *_args: Any,