File size: 6,142 Bytes
755e20b
 
87f54b3
 
 
 
e947d7e
 
 
 
 
 
 
87f54b3
e947d7e
87f54b3
e947d7e
87f54b3
e947d7e
87f54b3
e947d7e
87f54b3
e947d7e
87f54b3
e947d7e
87f54b3
e947d7e
87f54b3
165fc74
e947d7e
87f54b3
e947d7e
87f54b3
e947d7e
87f54b3
e947d7e
87f54b3
e947d7e
87f54b3
e947d7e
87f54b3
 
 
 
 
 
 
 
 
 
755e20b
87f54b3
 
755e20b
87f54b3
 
755e20b
87f54b3
 
755e20b
87f54b3
 
 
 
 
755e20b
87f54b3
 
755e20b
87f54b3
 
755e20b
87f54b3
 
755e20b
87f54b3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32b9f0d
 
 
 
 
87f54b3
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import os

import gradio as gr
from PIL import Image

elements = {
    "Becane": ("data/data_becane_1_0_2_014_before_img6", "data/data_becane_1_0_2_014_after_img7", "models/RoadBecane_f.stl"),
    "BTWIN": ("data/data_btwin_1_26_3_114_before_img0", "data/data_btwin_1_26_3_114_after_img13", "models/BTWIN.stl"),
    "Classic Road": ("data/data_croad_4_26_4_112_before_img3", "data/data_croad_4_26_4_112_after_img7", "models/ClassicRoad.stl"),
    "Domane": ("data/data_domane_2_0_39_012_before_img6", "data/data_domane_2_0_39_012_after_img13", "models/domane.stl"),
    "Enduro": ("data/data_enduro_2_18_18_105_before_img6", "data/data_enduro_2_18_18_105_after_img10", "models/enduro.stl"),
    "G1": ("data/data_g1_2_36_14_010_before_img6", "data/data_g1_2_36_14_010_after_img8", "models/g1.stl"),
    "GBike": ("data/data_gbike_3_31_8_018_before_img2", "data/data_gbike_3_31_8_018_after_img8", "models/gbike.stl"),
    "Holland": (
        "data/data_holland_4_24_18_00_before_img4", "data/data_holland_4_24_18_00_after_img7", "models/holland.stl"),
    "Huffy": (
        "data/data_huffy_6_4_35_012_before_img4", "data/data_huffy_6_4_35_012_after_img12", "models/huffy.stl"),
    "Kuota": (
        "data/data_kuota_6_5_30_112_before_img4", "data/data_kuota_6_5_30_112_after_img12", "models/kuota.stl"),
    "MFactory": (
        "data/data_mfactory_1_17_8_00_before_img4", "data/data_mfactory_1_17_8_00_after_img12", "models/mfactory.stl"),
    "Mirage": (
        "data/data_mirage_6_11_36_117_before_img4", "data/data_mirage_6_11_36_117_after_img12", "models/mirage.stl"),
    "Old Bike": (
        "data/data_oldbike_3_30_15_100_before_img4", "data/data_oldbike_3_30_15_100_after_img12", "models/oldbike.stl"),
    "Freeride": (
        "data/data_freeride_6_24_0_00_before_img4", "data/data_freeride_6_24_0_00_after_img12", "models/freeride_1Step_f.stl"),
    "RondoRuut": (
        "data/data_rondo_2_11_39_106_before_img4", "data/data_rondo_2_11_39_106_after_img12",
        "models/RondoRuutClean_1Step_f.stl"),
    "MTB Ghost": (
        "data/data_ghost_1_0_4_116_before_img4", "data/data_ghost_1_0_4_116_after_img12", "models/MTB_Ghost.stl"),
    "Scalpel": (
        "data/data_scalpel_6_2_12_101_before_img4", "data/data_scalpel_6_2_12_101_after_img12", "models/scalpel.stl"),
    "Verdona": (
        "data/data_verdona_1_14_10_118_before_img4", "data/data_verdona_1_14_10_118_after_img12", "models/verdona.stl"),
    "Vintage": (
        "data/data_vintage_6_6_33_011_before_img4", "data/data_vintage_6_6_33_011_after_img12", "models/Vintage.stl"),
    "WBike": (
        "data/data_wbike_3_19_23_00_before_img4", "data/data_wbike_3_19_23_00_after_img12", "models/wbike.stl"),
}


def generate_ui(key):
    img_b, img_a, model = elements[key]
    gr.Markdown("### Before damage")
    with gr.Row():
        with gr.Row():
            with gr.Column(scale=1):
                gr.Markdown("#### Render")
                img_bn = gr.Image(os.path.join(os.path.dirname(__file__),f"{img_b}.png"))
            with gr.Column(scale=1):
                gr.Markdown("#### Background")
                img_bb = gr.Image(os.path.join(os.path.dirname(__file__),f"{img_b}_background.png"))
            with gr.Column(scale=1):
                gr.Markdown("#### Foreground")
                img_bf = gr.Image(os.path.join(os.path.dirname(__file__),f"{img_b}_foreground.png"))
            with gr.Column(scale=1):
                gr.Markdown("#### Segmentation")
                img_bs = gr.Image(os.path.join(os.path.dirname(__file__),f"{img_b}_segmentation.png"))

    gr.Markdown("### After damage")
    with gr.Row():
        with gr.Column(scale=1):
            gr.Markdown("#### Render")
            img_an = gr.Image(os.path.join(os.path.dirname(__file__),f"{img_a}.png"))
        with gr.Column(scale=1):
            gr.Markdown("#### Background")
            img_ab = gr.Image(os.path.join(os.path.dirname(__file__),f"{img_a}_background.png"))
        with gr.Column(scale=1):
            gr.Markdown("#### Foreground")
            img_af = gr.Image(os.path.join(os.path.dirname(__file__),f"{img_a}_foreground.png"))
        with gr.Column(scale=1):
            gr.Markdown("#### Segmentation")
            img_as = gr.Image(os.path.join(os.path.dirname(__file__),f"{img_a}_segmentation.png"))

    model = gr.Model3D(model, label="3D model preview")
    return img_bn, img_bb, img_bf, img_bs, img_an, img_ab, img_af, img_as, model


def get_values(key):
    img_b, img_a, model = elements[key]
    gr.Markdown("### Before damage")
    img_bn = Image.open(f"{img_b}.png")
    img_bb = Image.open(f"{img_b}_background.png")
    img_bf = Image.open(f"{img_b}_foreground.png")
    img_bs = Image.open(f"{img_b}_segmentation.png")
    img_an = Image.open(f"{img_a}.png")
    img_ab = Image.open(f"{img_a}_background.png")
    img_af = Image.open(f"{img_a}_foreground.png")
    img_as = Image.open(f"{img_a}_segmentation.png")

    return img_bn, img_bb, img_bf, img_bs, img_an, img_ab, img_af, img_as, model


block = gr.Blocks()

with block:
    with open("page.md", "r") as f:
        gr.Markdown(f.read())
        first_key = list(elements.keys())[0]
        dropdown = gr.Dropdown(choices=list(elements.keys()), value=first_key, label="Model", interactive=True)
        img_bn, img_bb, img_bf, img_bs, img_an, img_ab, img_af, img_as, model = generate_ui(first_key)

    dropdown.change(get_values, inputs=[dropdown],
                    outputs=[img_bn, img_bb, img_bf, img_bs, img_an, img_ab, img_af,
                             img_as, model])
    gr.Markdown("### Citation Information \n```\n@inproceedings{bbb_2022,\n  title={Bent & Broken Bicycles: Leveraging"
                " synthetic data for damaged object re-identification},\n  author={Luca Piano, Filippo Gabriele Pratticò,"
                " Alessandro Sebastian Russo, Lorenzo Lanari, Lia Morra, Fabrizio Lamberti},\n  booktitle={2022 IEEE "
                "Winter Conference on Applications of Computer Vision (WACV)},\n  year={2022},\n  "
                "organization={IEEE}\n}\n```")

block.queue(concurrency_count=40, max_size=20).launch(max_threads=150)