eienmojiki commited on
Commit
fb1a9a7
·
verified ·
1 Parent(s): dfda583

Update Gradio app with multiple files

Browse files
Files changed (2) hide show
  1. app.py +62 -24
  2. components.py +39 -28
app.py CHANGED
@@ -9,34 +9,66 @@ def create_app():
9
  with gr.Blocks(theme=gr.themes.Soft(), css="""
10
  .gradio-container {
11
  max-width: 1400px !important;
 
12
  }
13
  .filter-header {
14
  text-align: center;
15
- padding: 20px;
16
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
17
- border-radius: 10px;
18
- margin-bottom: 20px;
 
19
  }
20
  .filter-header h1 {
21
  color: white;
22
  margin: 0;
23
  font-size: 2.5em;
 
24
  }
25
  .filter-header p {
26
- color: rgba(255,255,255,0.9);
27
  margin: 10px 0 0 0;
 
28
  }
29
  .image-container {
30
  border: 2px solid #e0e0e0;
31
- border-radius: 10px;
32
- padding: 10px;
33
  background: white;
 
 
 
 
 
34
  }
35
  .control-panel {
36
- background: #f8f9fa;
37
- border-radius: 10px;
 
 
 
 
 
 
 
38
  padding: 15px;
39
- margin-top: 10px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  }
41
  """) as app:
42
  with gr.Column(elem_classes="filter-header"):
@@ -46,10 +78,8 @@ def create_app():
46
  """)
47
 
48
  # Khởi tạo components
49
- controls = create_filter_controls()
50
  filter_names = list(registry.filters.keys())
51
- filter_groups = controls
52
-
53
  with gr.Row():
54
  with gr.Column(scale=1):
55
  with gr.Group(elem_classes="image-container"):
@@ -67,17 +97,14 @@ def create_app():
67
  interactive=True
68
  )
69
 
70
- # Các điều khiển bộ lọc
71
- control_components = []
72
- for filter_name, group in filter_groups.items():
73
- for component in group.children:
74
- control_components.append(component)
75
-
76
  filter_doc = gr.Markdown(
77
  value="Chọn một bộ lọc để xem mô tả chi tiết.",
78
  elem_classes="filter-description"
79
  )
80
 
 
 
 
81
  apply_button = gr.Button(
82
  "✨ Áp dụng bộ lọc",
83
  variant="primary",
@@ -99,7 +126,7 @@ def create_app():
99
  # Xử lý cập nhật UI
100
  def update_controls(filter_name):
101
  updates = []
102
- for group_name, group in filter_groups.items():
103
  updates.append(gr.update(visible=group_name == filter_name))
104
 
105
  doc = registry.filters[filter_name].__doc__ or "Không có mô tả chi tiết."
@@ -112,10 +139,15 @@ def create_app():
112
 
113
  try:
114
  image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
 
 
115
  params = {}
116
- param_names = list(registry.params_map.get(filter_name, {}).keys())
117
- for i, param_name in enumerate(param_names):
118
- params[param_name] = args[i]
 
 
 
119
 
120
  processed = registry.filters[filter_name](image, **params)
121
 
@@ -132,15 +164,21 @@ def create_app():
132
  def reset_all():
133
  return None, None, gr.update(visible=False), gr.update(visible=False), "Original"
134
 
 
 
 
 
 
 
135
  # Kết nối sự kiện
136
  filter_select.change(
137
  update_controls,
138
  inputs=filter_select,
139
- outputs=list(filter_groups.values()) + [filter_doc],
140
  api_name=False
141
  )
142
 
143
- input_components = [input_image, filter_select] + control_components
144
  apply_button.click(
145
  process,
146
  inputs=input_components,
 
9
  with gr.Blocks(theme=gr.themes.Soft(), css="""
10
  .gradio-container {
11
  max-width: 1400px !important;
12
+ margin: auto !important;
13
  }
14
  .filter-header {
15
  text-align: center;
16
+ padding: 30px;
17
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
18
+ border-radius: 15px;
19
+ margin-bottom: 30px;
20
+ box-shadow: 0 10px 30px rgba(0,0,0,0.1);
21
  }
22
  .filter-header h1 {
23
  color: white;
24
  margin: 0;
25
  font-size: 2.5em;
26
+ font-weight: bold;
27
  }
28
  .filter-header p {
29
+ color: rgba(255,255,255,0.95);
30
  margin: 10px 0 0 0;
31
+ font-size: 1.1em;
32
  }
33
  .image-container {
34
  border: 2px solid #e0e0e0;
35
+ border-radius: 12px;
36
+ padding: 15px;
37
  background: white;
38
+ box-shadow: 0 4px 6px rgba(0,0,0,0.05);
39
+ transition: all 0.3s ease;
40
+ }
41
+ .image-container:hover {
42
+ box-shadow: 0 8px 15px rgba(0,0,0,0.1);
43
  }
44
  .control-panel {
45
+ background: linear-gradient(to bottom, #f8f9fa, #ffffff);
46
+ border-radius: 12px;
47
+ padding: 20px;
48
+ margin-top: 15px;
49
+ border: 1px solid #e9ecef;
50
+ box-shadow: 0 2px 4px rgba(0,0,0,0.04);
51
+ }
52
+ .filter-description {
53
+ background: #f0f4f8;
54
  padding: 15px;
55
+ border-radius: 8px;
56
+ margin: 15px 0;
57
+ border-left: 4px solid #667eea;
58
+ }
59
+ .gr-button-primary {
60
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important;
61
+ border: none !important;
62
+ font-weight: bold !important;
63
+ }
64
+ .gr-button-primary:hover {
65
+ transform: translateY(-2px);
66
+ box-shadow: 0 5px 15px rgba(102, 126, 234, 0.4) !important;
67
+ }
68
+ .gr-button-secondary {
69
+ background: #6c757d !important;
70
+ border: none !important;
71
+ color: white !important;
72
  }
73
  """) as app:
74
  with gr.Column(elem_classes="filter-header"):
 
78
  """)
79
 
80
  # Khởi tạo components
 
81
  filter_names = list(registry.filters.keys())
82
+
 
83
  with gr.Row():
84
  with gr.Column(scale=1):
85
  with gr.Group(elem_classes="image-container"):
 
97
  interactive=True
98
  )
99
 
 
 
 
 
 
 
100
  filter_doc = gr.Markdown(
101
  value="Chọn một bộ lọc để xem mô tả chi tiết.",
102
  elem_classes="filter-description"
103
  )
104
 
105
+ # Tạo các điều khiển bộ lọc động
106
+ filter_controls = create_filter_controls()
107
+
108
  apply_button = gr.Button(
109
  "✨ Áp dụng bộ lọc",
110
  variant="primary",
 
126
  # Xử lý cập nhật UI
127
  def update_controls(filter_name):
128
  updates = []
129
+ for group_name in filter_controls:
130
  updates.append(gr.update(visible=group_name == filter_name))
131
 
132
  doc = registry.filters[filter_name].__doc__ or "Không có mô tả chi tiết."
 
139
 
140
  try:
141
  image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
142
+
143
+ # Lấy các tham số cho filter hiện tại
144
  params = {}
145
+ if filter_name in filter_controls and hasattr(filter_controls[filter_name], 'children'):
146
+ param_names = list(registry.params_map.get(filter_name, {}).keys())
147
+ controls_list = filter_controls[filter_name].children
148
+ for i, param_name in enumerate(param_names):
149
+ if i < len(controls_list):
150
+ params[param_name] = args[i]
151
 
152
  processed = registry.filters[filter_name](image, **params)
153
 
 
164
  def reset_all():
165
  return None, None, gr.update(visible=False), gr.update(visible=False), "Original"
166
 
167
+ # Thu thập tất cả control components
168
+ all_control_components = []
169
+ for filter_name in filter_controls:
170
+ if hasattr(filter_controls[filter_name], 'children'):
171
+ all_control_components.extend(filter_controls[filter_name].children)
172
+
173
  # Kết nối sự kiện
174
  filter_select.change(
175
  update_controls,
176
  inputs=filter_select,
177
+ outputs=list(filter_controls.values()) + [filter_doc],
178
  api_name=False
179
  )
180
 
181
+ input_components = [input_image, filter_select] + all_control_components
182
  apply_button.click(
183
  process,
184
  inputs=input_components,
components.py CHANGED
@@ -5,32 +5,43 @@ def create_filter_controls():
5
  controls = {}
6
  for filter_name in registry.filters:
7
  params = registry.params_map.get(filter_name, {})
8
- filter_group = gr.Group(visible=filter_name == "Original") # Create group here
9
- filter_controls_list = []
10
- with filter_group: # Put controls inside the group
11
- for param_name, config in params.items():
12
- if config['type'] == int:
13
- slider = gr.Slider(
14
- minimum=config.get('min', 1),
15
- maximum=config.get('max', 100),
16
- value=config['default'],
17
- label=param_name.replace('_', ' ').title(),
18
- step=config.get('step', 1)
19
- )
20
- elif config['type'] == float:
21
- slider = gr.Slider(
22
- minimum=config.get('min', 0.1),
23
- maximum=config.get('max', 10.0),
24
- step=config.get('step', 0.1),
25
- value=config['default'],
26
- label=param_name.replace('_', ' ').title()
27
- )
28
- elif config['type'] == bool:
29
- slider = gr.Checkbox(
30
- value=config['default'],
31
- label=param_name.replace('_', ' ').title()
32
- )
33
- filter_controls_list.append(slider)
34
- controls[filter_name] = filter_group # Store the group
35
- filter_group.children = filter_controls_list # Add controls to the group
 
 
 
 
 
 
 
 
 
 
 
36
  return controls
 
5
  controls = {}
6
  for filter_name in registry.filters:
7
  params = registry.params_map.get(filter_name, {})
8
+
9
+ with gr.Group(visible=filter_name == "Original") as filter_group:
10
+ filter_controls_list = []
11
+
12
+ if params: # Only create controls if there are parameters
13
+ gr.Markdown(f"### Tùy chỉnh {filter_name}")
14
+
15
+ for param_name, config in params.items():
16
+ if config['type'] == int:
17
+ slider = gr.Slider(
18
+ minimum=config.get('min', 1),
19
+ maximum=config.get('max', 100),
20
+ value=config['default'],
21
+ label=param_name.replace('_', ' ').title(),
22
+ step=config.get('step', 1),
23
+ interactive=True
24
+ )
25
+ elif config['type'] == float:
26
+ slider = gr.Slider(
27
+ minimum=config.get('min', 0.1),
28
+ maximum=config.get('max', 10.0),
29
+ step=config.get('step', 0.1),
30
+ value=config['default'],
31
+ label=param_name.replace('_', ' ').title(),
32
+ interactive=True
33
+ )
34
+ elif config['type'] == bool:
35
+ slider = gr.Checkbox(
36
+ value=config['default'],
37
+ label=param_name.replace('_', ' ').title(),
38
+ interactive=True
39
+ )
40
+ filter_controls_list.append(slider)
41
+ else:
42
+ gr.Markdown("*Bộ lọc này không có tham số tùy chỉnh*")
43
+
44
+ filter_group.children = filter_controls_list
45
+ controls[filter_name] = filter_group
46
+
47
  return controls