update example code
Browse files
app.py
CHANGED
@@ -1,44 +1,76 @@
|
|
1 |
from interactive_pipe import interactive_pipeline, interactive
|
|
|
|
|
2 |
import numpy as np
|
3 |
|
|
|
4 |
|
5 |
-
@interactive(angle=(45., [0., 360.]))
|
6 |
-
def gen_color(angle=45.):
|
7 |
-
lin_coord = np.linspace(-1, 1, 256)
|
8 |
-
X, Y = np.meshgrid(lin_coord, lin_coord)
|
9 |
-
ang = np.deg2rad(angle)
|
10 |
-
im = np.cos(ang) * X + np.sin(ang) * Y
|
11 |
-
im = np.clip(1+im, 0, 1)
|
12 |
-
im = np.stack(
|
13 |
-
[im, im[::-1], im[:, ::-1]],
|
14 |
-
axis=-1
|
15 |
-
)
|
16 |
-
return im
|
17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
|
19 |
-
@interactive(
|
20 |
-
flip=(True, "Flip Image"),
|
21 |
-
mirror=(True, "Mirror Image")
|
22 |
-
)
|
23 |
-
def flip_image(img, flip=True, mirror=True):
|
24 |
-
img = img[::-1] if flip else img
|
25 |
-
img = img[:, ::-1] if mirror else img
|
26 |
-
return img
|
27 |
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
|
29 |
-
markdown_description = "# Code to build this app on gradio \n"
|
30 |
-
markdown_description += "```python\n"+open(__file__, 'r').read()+"```"
|
31 |
|
|
|
|
|
|
|
|
|
|
|
32 |
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
)
|
37 |
-
def simple_pipe():
|
38 |
inp = gen_color()
|
39 |
-
|
40 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
|
42 |
|
|
|
43 |
if __name__ == "__main__":
|
44 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
from interactive_pipe import interactive_pipeline, interactive
|
2 |
+
import argparse
|
3 |
+
from typing import Tuple
|
4 |
import numpy as np
|
5 |
|
6 |
+
# --- Define processing blocks ---
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
9 |
+
def gen_color(
|
10 |
+
green: float = 0.8,
|
11 |
+
decay: int = 1
|
12 |
+
) -> np.ndarray: # 1 image output
|
13 |
+
coord = np.linspace(0., 1., 256)
|
14 |
+
X, Y = np.meshgrid(np.exp(-coord*decay), coord)
|
15 |
+
return np.stack([X, green*Y, Y[::-1]], -1)
|
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
|
18 |
+
def flip_img(
|
19 |
+
img: np.ndarray, # 1 image input
|
20 |
+
flip: bool = True
|
21 |
+
) -> Tuple[np.ndarray, np.ndarray]: # 2 image outputs
|
22 |
+
out = img[::-1] if flip else img.copy()
|
23 |
+
return out, img[:, ::-1]
|
24 |
|
|
|
|
|
25 |
|
26 |
+
def amplify(
|
27 |
+
img: np.ndarray, # 1 image input
|
28 |
+
amp: str = "L"
|
29 |
+
) -> np.ndarray: # 1 image output
|
30 |
+
return 1/{"S": 4, "M": 3, "L": 2, "XL": 1}[amp] * img
|
31 |
|
32 |
+
# --- Define pipeline = a sequence of processing blocks ---
|
33 |
+
|
34 |
+
|
35 |
+
def pipe() -> Tuple[np.ndarray, np.ndarray, np.ndarray]:
|
|
|
36 |
inp = gen_color()
|
37 |
+
out_flip, out_mirror = flip_img(inp)
|
38 |
+
out = amplify(out_mirror)
|
39 |
+
return [inp, out_flip, out] # Display 3 images side by side
|
40 |
+
|
41 |
+
|
42 |
+
# --- Add interactivity ---
|
43 |
+
|
44 |
+
def add_controls() -> None:
|
45 |
+
# Add controls to the processing blocks
|
46 |
+
interactive(
|
47 |
+
green=(1., [0., 1.], "Green amount"), # float <-> continuous slider
|
48 |
+
decay=(2, [0, 10], "Color decay") # int <-> discrete slider
|
49 |
+
)(gen_color)
|
50 |
+
interactive(
|
51 |
+
amp=("L", ["S", "M", "L", "XL"], "Amplify") # str <-> dropdown menu
|
52 |
+
)(amplify)
|
53 |
+
interactive(
|
54 |
+
flip=(True, "Flip") # bool <-> checkbox
|
55 |
+
)(flip_img)
|
56 |
+
|
57 |
+
|
58 |
+
def launch(backend="gradio", markdown_description="") -> None:
|
59 |
+
# Decorate pipeline which becomes interactive
|
60 |
+
playable_pipe = interactive_pipeline(
|
61 |
+
gui=backend,
|
62 |
+
markdown_description=markdown_description
|
63 |
+
)(pipe)
|
64 |
+
playable_pipe() # Launch the interactive pipeline
|
65 |
|
66 |
|
67 |
+
# --------------------------------------------------
|
68 |
if __name__ == "__main__":
|
69 |
+
parser = argparse.ArgumentParser()
|
70 |
+
parser.add_argument("-b", "--backend", default="gradio",
|
71 |
+
choices=["gradio", "qt", "mpl"], type=str)
|
72 |
+
args = parser.parse_args()
|
73 |
+
markdown_description = "# Code to build this app on gradio \n\n"
|
74 |
+
markdown_description += "```python\n"+open(__file__, 'r').read()+"```"
|
75 |
+
add_controls()
|
76 |
+
launch(args.backend, markdown_description)
|