Spaces:
Sleeping
Sleeping
| # β― [interactive pipe website](https://balthazarneveu.github.io/interactive_pipe/) | |
|  | |
| # Full tutorial | |
| **Note** : The same tutorial is also available on [Google Colab](https://colab.research.google.com/github/livalgo/interactive-pipe-examples/blob/main/interactive_pipe_tutorial.ipynb) to learn about the Jupyter notebook backend. | |
| # Analyzing the headless pipeline | |
| ```python | |
| headless_tutorial_pipeline = interactive_pipeline(gui=None)(tutorial_pipeline) | |
| # gui=None allows retuning a HeadlessPipeline instance. | |
| headless_tutorial_pipeline.graph_representation("__tuto_pipeline") | |
| ``` | |
| Let's now call the pipeline several times with varying parameters. | |
| π We provide a basic code sample to generate the gif animation. | |
| ```python | |
| from PIL import Image as PILImage | |
| img_list = [] | |
| for freq in np.linspace(1, 100, 10): | |
| # Let's first override some of the default parameters. | |
| headless_tutorial_pipeline.parameters = { | |
| "gen_color": {"frequency": freq, 'isotropy': freq/100.}, | |
| "compare_by_splitting": {"ratio": freq/100.}} | |
| # Let's execute | |
| headless_tutorial_pipeline() | |
| img = (255.*headless_tutorial_pipeline.results[1][1]).astype(np.uint8) | |
| img_list.append(PILImage.fromarray(img)) | |
| img_list[0].save("animation.gif", save_all=True, append_images=img_list[1:], duration=1, loop=1000) | |
| ``` | |
|  | |
| # Advice | |
| ## Keep separation between "production code" (library / not interactive) & interactivity | |
| - π‘ One of the strength of interactive pipe is to avoid adding hundreds of lines of code dedicated to GUI (graphical user interfaces). | |
| - With interactive pipe, you have the choice to keep this design choice. Each processing block can be defined as a regular function, without even importing the `interactive` decorator. In a separate file, you'll add sliders. | |
| ### Several ways to decorate building blocks | |
| #### 1.Decorate afterward π *= Recommended approach* | |
| - β Less elegant to read (`add_interactivity` may be in a different file) | |
| - β The decorated function can be re-used somewhere else (before being decorated). | |
| - β Possibility to add conditions (`debug` flag) | |
| ```python | |
| def gen_color(frequency=0, isotropy=0.): | |
| ... | |
| def add_interactivity(debug=True): | |
| interactive( | |
| frequency=(80, [1, 100]), | |
| isotropy=(0.8, [0.1, 1.]) if debug else 0.8 | |
| )(gen_color) | |
| ``` | |
| #### 2.Decorate using `@` | |
| ```python | |
| @interactive( | |
| frequency=(80, [1, 100]), | |
| isotropy=(0.8, [0.1, 1.]) | |
| ) | |
| def gen_color(frequency=0, isotropy=0.): | |
| ... | |
| ``` | |
| - β Easy to read | |
| - β The decorated function can't be re-used somewhere else. | |
| - β No possibility to add condition to hide/show slider. To hide the slider, you need to comment! | |
| #### 3. Shorter code using `@` | |
| ```python | |
| @interactive() | |
| def gen_color( | |
| frequency=(80, [1, 100]), | |
| isotropy=(0.8, [0.1, 1.]) | |
| ): | |
| ``` | |
| - β Shortest code | |
| - β The decorated function can't be re-used somewhere else | |
| ## Pipeline visualization | |
| Internally, `interactive_pipe` builds an execution graph of the pipeline. | |
| - If you're using the `qt` backend, press `G` to build the graph. | |
| - If you're in a notebook, it's possible to easily plot the graph. | |
| ```python | |
| headless_tutorial_pipeline = interactive_pipeline(gui=None)(tutorial_pipeline) | |
| headless_tutorial_pipeline.graph_representation() | |
| ``` | |
| | pipeline's execution graph | | |
| | :--:| | |
| |  | | |
| ## Backend choice | |
| |Backend | π `Qt` | π’ `Gradio` | | |
| |:---|:---|:---| | |
| | Responsiveness | β Very fast | β Slower | | |
| | Shareable | β No, only 1 local Qt Window | β Share a link with others, (β Optional: standalone hosting on HF spaces π€ ) | | |
| | Keyboard controls | β Yes | β No | | |
| | Full screen | β Yes | β No | | |
| | π `Qt` | π’ `Gradio` | | |
| |:---:|:---:| | |
| |  |  | | |
| ### Matplotlib backend | |
| Please note that there's also a matplotlib `gui="mpl"` backend in case of environments where you really don't have access to Qt or Jupyter notebooks. |