Spaces:
Runtime error
Runtime error
# -*- coding: utf-8 -*- | |
"""20221027_Generate_Beatles_with_Gradio_faster_version (2).ipynb | |
Automatically generated by Colaboratory. | |
Original file is located at | |
https://colab.research.google.com/drive/1B2KVLt04uBMgr2ejW19FYaEgk9lnNS0E | |
# Build a demo | |
Put together a Gradio App bases on the Huggingface tutorials so that users can generate Beatles-like poetry based on an input prompt. | |
""" | |
# Import libraries | |
from transformers import pipeline | |
from numpy import random | |
import gradio as gr | |
import re | |
import torch | |
from torch import autocast | |
from PIL import Image | |
import os | |
# Array with song cover art styles | |
image_input_styles = ["Random", "Pencil sketch", "Oil painting", "Pop art", "Piet Mondriaan"] | |
# Get image type for image input | |
""" | |
The default setting for the art style dropdown is "Random". The below function determines which style is chosen | |
If set to "Random", copy the art style array and remove "Random" to prevent "Random" from being a chosen art style | |
""" | |
def get_image_input(title, given_input_style): | |
if given_input_style == 'Random': | |
image_input_styles_new = image_input_styles.copy() | |
image_input_styles_new.pop(0) | |
random_choice = random.randint(len(image_input_styles_new)-1) | |
final_style = image_input_styles_new[random_choice] | |
else: | |
final_style = given_input_style | |
image_input = 'Cover for ' + title.lower() + ' in style of ' + final_style | |
return image_input, final_style | |
# Available models for generate lyrics pipeline | |
checkpoint = 'wvangils/GPT-Medium-Beatles-Lyrics-finetuned-newlyrics' | |
# checkpoint = 'wvangils/GPT-Neo-125m-Beatles-Lyrics-finetuned-newlyrics' | |
# checkpoint = 'wvangils/BLOOM-560m-Beatles-Lyrics-finetuned' | |
# Setup all the pipelines we need | |
title_generator = pipeline('summarization', model='czearing/story-to-title') | |
lyrics_generator = pipeline("text-generation", model=checkpoint) | |
# For the image generator we use stable diffusion from an existing HuggingFace space | |
stable_diffusion = gr.Blocks.load(name="spaces/stabilityai/stable-diffusion-1") | |
# Create 4 images for the given prompt and receive the first one | |
# This function uses an existing HuggingFace space where the number of created images cannot be modified | |
def get_image(prompt): | |
gallery_dir = stable_diffusion(prompt, fn_index=2) | |
images = [os.path.join(gallery_dir, img) for img in os.listdir(gallery_dir)] | |
return [images[0]] | |
# Lyrics generation | |
def generate_beatles(input_prompt, temperature, top_p, given_input_style): | |
# Create generator for different models | |
generated_lyrics = lyrics_generator(input_prompt | |
, max_length = 100 | |
, num_return_sequences = 1 | |
, return_full_text = True | |
#, num_beams = 1 | |
#, early_stopping = True # Werkt niet goed lijkt | |
, temperature = temperature | |
#, top_k = 50 # Default 50 | |
, top_p = top_p # Default 1.0 | |
, no_repeat_ngram_size = 3 # Default = 0 | |
, repetition_penalty = 1.0 # Default = 1.0 | |
#, do_sample = True # Default = False | |
)[0]["generated_text"] | |
# Put lyrics in the right form | |
lyrics_sentences = re.sub('\n', '. ', generated_lyrics) | |
# Create a title based on the generated lyrics | |
title = title_generator(lyrics_sentences, min_length=1, max_length=10, repetition_penalty=2.5)[0]['summary_text'] | |
# Create an image based on the generated title | |
image_input, image_style = get_image_input(title, given_input_style) | |
# Generate the image | |
image = get_image(image_input) | |
return (title, generated_lyrics, image, image_style) |