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
            ''')