Spaces:
Running
Running
File size: 3,442 Bytes
a3f0f2d 1c73813 dbdffeb a3f0f2d 1c73813 b4e799c f90960c a3f0f2d 1705ce6 a3f0f2d 1c73813 96bd4e6 1705ce6 a3f0f2d 4e37a66 f90960c a3f0f2d f90960c a3f0f2d f90960c a3f0f2d 1705ce6 b8e12f6 3e282cd a3f0f2d f90960c a3f0f2d dbdffeb |
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 |
import gradio as gr
import cv2
import numpy as np
from registry import registry
from filters import *
from components import create_filter_controls
def create_app():
with gr.Blocks() as app:
gr.Markdown("# 📷 Real-Time Photo Filter App")
# Khởi tạo components
controls = create_filter_controls()
filter_names = list(registry.filters.keys())
filter_groups = {} # Store filter groups
with gr.Row():
with gr.Column():
input_image = gr.Image(label="Input Image", type="numpy")
filter_select = gr.Dropdown(
label="Select Filter",
choices=filter_names,
value="Original"
)
# Thêm các control vào UI
control_components = []
filter_groups = controls # Assign controls directly to filter_groups
for filter_name, group in filter_groups.items():
for component in group.children: # Iterate over children of the group
control_components.append(component) # Collect sliders for event handling
apply_button = gr.Button("Apply Filter") # Add Apply button
with gr.Column():
output_image = gr.Image(label="Filtered Image")
# Xử lý cập nhật UI
def update_controls(filter_name):
updates = []
for group_name, group in filter_groups.items():
visibility = (group_name == filter_name)
updates.append(gr.update(visible=visibility)) # Changed from gr.Group.update
return updates
# Xử lý ảnh khi button click
def process(image, filter_name, *args): # Update process function to take image, filter_name and *args
if image is None:
return None
try:
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
params = {}
param_names = list(registry.params_map.get(filter_name, {}).keys())
for i, param_name in enumerate(param_names):
params[param_name] = args[i] # Get parameter values from args
processed = registry.filters[filter_name](image, **params)
if len(processed.shape) == 2:
processed = cv2.cvtColor(processed, cv2.COLOR_GRAY2RGB)
else:
processed = cv2.cvtColor(processed, cv2.COLOR_BGR2RGB)
return processed
except Exception as e:
print(f"Error processing image: {e}")
return image
# Kết nối sự kiện
filter_select.change(
update_controls,
inputs=filter_select,
outputs=list(filter_groups.values()), # Pass list of groups as outputs
api_name=False
)
input_components = [input_image, filter_select] + control_components # Input components for button click
apply_button.click( # Attach click event to Apply button
process,
inputs=input_components, # Use all input components
outputs=output_image,
)
return app
if __name__ == "__main__":
app = create_app()
app.launch(share=True) |