File size: 2,984 Bytes
e15f81c 3e74eb0 e7bd9fb ad83944 424c4c2 a5e8b58 e7bd9fb ad83944 f6c162d e7bd9fb f9fdb45 1254333 e7bd9fb f9fdb45 1254333 33ee975 6250287 33ee975 ad83944 e7bd9fb f9fdb45 e7bd9fb f9fdb45 1254333 e7bd9fb ad83944 15b6f1c 1254333 ad83944 f6c162d 1254333 e7bd9fb 1254333 e7bd9fb 2b7f7bd f9fdb45 e7bd9fb e15f81c e7bd9fb f0dbb23 e7bd9fb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
import os
import streamlit as st
import requests
from transformers import pipeline
from typing import Dict
from together import Together
from utils import img2txt, txt2story, txt2speech, get_user_preferences
# Main function
def main():
st.set_page_config(page_title="π¨ Image-to-Audio Story π§", page_icon="πΌοΈ")
st.title("Turn the Image into Audio Story")
# Allows users to upload an image file
uploaded_file = st.file_uploader("# π· Upload an image...", type=["jpg", "jpeg", "png"])
# Parameters for LLM model (in the sidebar)
st.sidebar.markdown("# LLM Inference Configuration Parameters")
top_k = st.sidebar.number_input("Top-K", min_value=1, max_value=100, value=5)
top_p = st.sidebar.number_input("Top-P", min_value=0.0, max_value=1.0, value=0.8)
temperature = st.sidebar.number_input("Temperature", min_value=0.1, max_value=2.0, value=1.5)
# Get user preferences for the story
st.markdown("## Story Preferences")
preferences = get_user_preferences()
if uploaded_file is not None:
# Reads and saves uploaded image file
bytes_data = uploaded_file.read()
with open("uploaded_image.jpg", "wb") as file:
file.write(bytes_data)
st.image(uploaded_file, caption='πΌοΈ Uploaded Image', use_column_width=True)
# Initiates AI processing and story generation
with st.spinner("## π€ AI is at Work! "):
scenario = img2txt("uploaded_image.jpg") # Extracts text from the image
# Modify the prompt to include user preferences
prompt = f"Based on the image description: '{scenario}', create a {preferences['genre']} story set in {preferences['setting']} in {preferences['continent']}. " \
f"The story should have a {preferences['tone']} tone and explore the theme of {preferences['theme']}. " \
f"The main conflict should be {preferences['conflict']}. " \
f"The story should have a {preferences['twist']} and end with a {preferences['ending']} ending."
story = txt2story(prompt, top_k, top_p, temperature) # Generates a story based on the image text, LLM params, and user preferences
txt2speech(story) # Converts the story to audio
st.markdown("---")
st.markdown("## π Image Caption")
st.write(scenario)
st.markdown("---")
st.markdown("## π Story")
st.write(story)
st.markdown("---")
st.markdown("## π§ Audio Story")
st.audio("audio_story.wav")
if __name__ == '__main__':
main()
# Credits
st.markdown("### Credits")
st.caption('''
Made with β€οΈ by @Aditya-Neural-Net-Ninja\n
Utilizes Image-to-Text, Text Generation, Text-to-Speech Transformer Models\n
Gratitude to Streamlit, π€ Spaces for Deployment & Hosting
''') |