Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -59,12 +59,12 @@ def setup_animation_env(img_size, desired_range, coefficients):
|
|
59 |
|
60 |
return fig, ax, background, circles, circle_lines, drawing
|
61 |
|
62 |
-
def animate(frame, coefs,
|
63 |
fig.canvas.restore_region(background)
|
64 |
|
65 |
center = (0, 0)
|
66 |
for idx, (r, fr) in enumerate(coefs_static):
|
67 |
-
c_dynamic = coefs[idx][0] * np.exp(1j * (fr * tau *
|
68 |
x, y = center[0] + r * np.cos(theta[frame]), center[1] + r * np.sin(theta[frame])
|
69 |
circle_lines[idx].set_data([center[0], center[0] + np.real(c_dynamic)], [center[1], center[1] + np.imag(c_dynamic)])
|
70 |
circles[idx].set_data(x, y)
|
@@ -89,29 +89,29 @@ def animate(frame, coefs, time, fig, ax, background, circles, circle_lines, draw
|
|
89 |
|
90 |
return (pil_image, None)
|
91 |
|
92 |
-
def generate_animation(frames, coefs, img_size, desired_range,
|
93 |
fig, ax, background, circles, circle_lines, drawing = setup_animation_env(img_size, desired_range, coefficients)
|
94 |
print(coefs)
|
95 |
coefs_static = [(np.linalg.norm(c), fr) for c, fr in coefs]
|
96 |
-
|
97 |
-
theta = np.linspace(0, tau,
|
98 |
draw_x, draw_y = [], []
|
99 |
|
100 |
-
anim = animation.FuncAnimation(fig, animate, frames=frames, interval=5, fargs=(coefs,
|
101 |
|
102 |
-
return anim
|
103 |
|
104 |
-
def fourier_transform_drawing(input_image, frames, coefficients, img_size, blur_kernel_size, desired_range, num_points
|
105 |
xs, ys = process_image(input_image, img_size, blur_kernel_size, desired_range)
|
106 |
coefs = calculate_fourier_coefficients(xs, ys, num_points, coefficients)
|
107 |
-
anim = generate_animation(frames, coefs, img_size, desired_range,
|
108 |
|
109 |
# Saving the animation
|
110 |
with tempfile.NamedTemporaryFile(delete=False, suffix='.mp4') as temp_file:
|
111 |
anim.save(temp_file.name, fps=15)
|
112 |
|
113 |
for frame in range(frames):
|
114 |
-
yield (animate(frame, coefs,
|
115 |
|
116 |
def setup_gradio_interface():
|
117 |
interface = gr.Interface(
|
@@ -124,7 +124,6 @@ def setup_gradio_interface():
|
|
124 |
gr.Slider(minimum=3, maximum=11, step=2, value=5, label="Blur Kernel Size (odd number)"),
|
125 |
gr.Number(value=400, label="Desired Range for Scaling", precision=0),
|
126 |
gr.Number(value=1000, label="Number of Points for Integration", precision=0),
|
127 |
-
gr.Slider(minimum=50, maximum=500, value=80, label="Theta Points for Animation")
|
128 |
],
|
129 |
outputs=["image", gr.Video()],
|
130 |
title="Fourier Transform Drawing",
|
|
|
59 |
|
60 |
return fig, ax, background, circles, circle_lines, drawing
|
61 |
|
62 |
+
def animate(frame, coefs, frame_times, fig, ax, background, circles, circle_lines, drawing, draw_x, draw_y, coefs_static, theta):
|
63 |
fig.canvas.restore_region(background)
|
64 |
|
65 |
center = (0, 0)
|
66 |
for idx, (r, fr) in enumerate(coefs_static):
|
67 |
+
c_dynamic = coefs[idx][0] * np.exp(1j * (fr * tau * frame_times[frame]))
|
68 |
x, y = center[0] + r * np.cos(theta[frame]), center[1] + r * np.sin(theta[frame])
|
69 |
circle_lines[idx].set_data([center[0], center[0] + np.real(c_dynamic)], [center[1], center[1] + np.imag(c_dynamic)])
|
70 |
circles[idx].set_data(x, y)
|
|
|
89 |
|
90 |
return (pil_image, None)
|
91 |
|
92 |
+
def generate_animation(frames, coefs, img_size, desired_range, coefficients):
|
93 |
fig, ax, background, circles, circle_lines, drawing = setup_animation_env(img_size, desired_range, coefficients)
|
94 |
print(coefs)
|
95 |
coefs_static = [(np.linalg.norm(c), fr) for c, fr in coefs]
|
96 |
+
frame_times = np.linspace(0, 1, num=frames)
|
97 |
+
theta = np.linspace(0, tau, num=frames)
|
98 |
draw_x, draw_y = [], []
|
99 |
|
100 |
+
anim = animation.FuncAnimation(fig, animate, frames=frames, interval=5, fargs=(coefs, frame_times, fig, ax, background, circles, circle_lines, drawing, draw_x, draw_y, coefs_static, theta))
|
101 |
|
102 |
+
return anim, frame_times
|
103 |
|
104 |
+
def fourier_transform_drawing(input_image, frames, coefficients, img_size, blur_kernel_size, desired_range, num_points):
|
105 |
xs, ys = process_image(input_image, img_size, blur_kernel_size, desired_range)
|
106 |
coefs = calculate_fourier_coefficients(xs, ys, num_points, coefficients)
|
107 |
+
anim, frame_times = generate_animation(frames, coefs, img_size, desired_range, coefficients)
|
108 |
|
109 |
# Saving the animation
|
110 |
with tempfile.NamedTemporaryFile(delete=False, suffix='.mp4') as temp_file:
|
111 |
anim.save(temp_file.name, fps=15)
|
112 |
|
113 |
for frame in range(frames):
|
114 |
+
yield (animate(frame, coefs, frame_times, fig, ax, background, circles, circle_lines, drawing, draw_x, draw_y, coefs_static, theta), temp_file.name)
|
115 |
|
116 |
def setup_gradio_interface():
|
117 |
interface = gr.Interface(
|
|
|
124 |
gr.Slider(minimum=3, maximum=11, step=2, value=5, label="Blur Kernel Size (odd number)"),
|
125 |
gr.Number(value=400, label="Desired Range for Scaling", precision=0),
|
126 |
gr.Number(value=1000, label="Number of Points for Integration", precision=0),
|
|
|
127 |
],
|
128 |
outputs=["image", gr.Video()],
|
129 |
title="Fourier Transform Drawing",
|