Spaces:
Sleeping
Sleeping
from interactive_pipe import Control, interactive_pipeline, interactive | |
from interactive_pipe.data_objects.image import Image | |
import argparse | |
from pathlib import Path | |
import cv2 | |
root = Path(__file__).parent | |
img_folder = root/"images" | |
audio_folder = root/"audio" | |
TRACK = "track" | |
IMAGE = ICON = "image" | |
CAPTION = "caption" | |
PROMPT = "prompt" | |
PROMPT_STYLE = "a cute crayon drawing of " | |
PROMPT_EXTRA = " on a white background, using a style from a cartoon book for baby kids" | |
# Audio generated by https://huggingface.co/spaces/facebook/MusicGen | |
# Elephant : a short savanah jungle music like the lion's king akuna matata with elephants barking | |
# Snail: a short instrumental country song with banjo without lyrics | |
# Rabbit: we will rock you by queens but played with ukulele without lyrics | |
TRACK_DICT = { | |
"elephant": { | |
TRACK: audio_folder/"elephant.mp4", | |
CAPTION: "ELEPHANT", | |
PROMPT: "a smiling elephant walking in the sunny yellow savana", | |
}, | |
"snail": { | |
TRACK: audio_folder/"snail.mp4", | |
CAPTION: "SNAIL", | |
PROMPT: "a cute yellow and orange snail with two eyes slowly walking on the green grass" | |
}, | |
"rabbit": { | |
TRACK: audio_folder/"rabbit.mp4", | |
CAPTION: "RABBIT", | |
PROMPT: "a smiling funny little rabbit in the green grass", | |
}, | |
"pause": { | |
TRACK: None, | |
PROMPT: "a cute sleeping cat", | |
CAPTION: "...zzzz" | |
} | |
} | |
for item_name, element in TRACK_DICT.items(): | |
TRACK_DICT[item_name][IMAGE] = img_folder/(item_name+".png") | |
ICONS = [it[ICON] for key, it in TRACK_DICT.items()] | |
def song_choice(global_params={}, song="elephant"): | |
global_params[TRACK] = song | |
def play_song(global_params={}): | |
song = global_params.get(TRACK, None) | |
first_exec = global_params.get("first_exec", True) | |
if not first_exec: | |
audio_track = TRACK_DICT[song][TRACK] | |
if audio_track is None: | |
global_params["__stop"]() | |
else: | |
global_params["__set_audio"](audio_track) | |
global_params["__play"]() | |
else: | |
global_params["first_exec"] = False | |
def image_choice(global_params={}): | |
song = global_params.get(TRACK, list(TRACK_DICT.keys())[0]) | |
img = Image.from_file(TRACK_DICT[song][IMAGE]).data | |
max_height = 300 # Raspberry pi with a 7" touchscreen | |
h, w, _c = img.shape | |
if h > max_height: | |
img = cv2.resize(img, (w*max_height//h, max_height)) | |
h, w, _c = img.shape | |
caption = TRACK_DICT[song][CAPTION] | |
global_params["__output_styles"]["img_out"] = { | |
"title": caption | |
} # discard auto titling | |
return img | |
def sample_pipeline(): | |
song_choice() | |
play_song() | |
img_out = image_choice() | |
return img_out | |
if __name__ == '__main__': | |
parser = argparse.ArgumentParser(description='Music and image player') | |
parser.add_argument('-b', '--backend', type=str, | |
default='gradio', choices=['gradio', 'qt']) | |
args = parser.parse_args() | |
markdown_description = "# π READ TUTORIAL HERE\n" | |
markdown_description += 'THIS INTERACTIVE PIPE IS INTENDED FOR THE QT BACKEND AND TO BE DEPLOYED ON A RASPBERRY PI FOR KIDS (touchscreen + full screen)\n\n' | |
markdown_description += "```python\n"+open(__file__, 'r').read()+"```\n" | |
app = interactive_pipeline( | |
gui=args.backend, | |
cache=False, | |
audio=True, | |
size="fullscreen", | |
markdown_description=markdown_description)(sample_pipeline) | |
app() | |