Spaces:
Sleeping
Sleeping
import os | |
import time | |
from typing import Any | |
import requests | |
import streamlit as st | |
from dotenv import find_dotenv, load_dotenv | |
from langchain.chains import LLMChain | |
from langchain.chat_models import ChatOpenAI | |
from langchain.prompts import PromptTemplate | |
from transformers import pipeline | |
from gtts import gTTS | |
import google.generativeai as genai | |
from custom import css_code | |
load_dotenv(find_dotenv()) | |
HUGGINGFACE_API_TOKEN = os.getenv("HUGGINGFACE_API_TOKEN") | |
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") | |
def progress_bar(amount_of_time: int) -> Any: | |
progress_text = "Please wait, Generative models hard at work" | |
my_bar = st.progress(0, text=progress_text) | |
for percent_complete in range(amount_of_time): | |
time.sleep(0.04) | |
my_bar.progress(percent_complete + 1, text=progress_text) | |
time.sleep(1) | |
my_bar.empty() | |
def generate_text_from_image(url: str) -> str: | |
image_to_text: Any = pipeline("image-to-text", model="Salesforce/blip-image-captioning-base") | |
generated_text: str = image_to_text(url)[0]["generated_text"] | |
return generated_text | |
def generate_story_from_text(scenario: str) -> str: | |
prompt_template: str = f""" | |
You are a talented story teller who can create a story from a simple narrative. | |
Create a story using the following scenario; the story should have a maximum of 1050 tokens; | |
CONTEXT: {scenario} | |
STORY: | |
""" | |
prompt: PromptTemplate = PromptTemplate(template=prompt_template, input_variables=["scenario"]) | |
model = genai.GenerativeModel("gemini-1.5-flash") | |
response = model.generate_content(scenario, generation_config=genai.types.GenerationConfig(max_output_tokens=1050)) | |
generated_story: str = response.text | |
return generated_story | |
def generate_speech_from_text(message: str) -> str: | |
# Generate audio file using gTTS | |
tts = gTTS(text=message, lang='en') | |
audio_file = "generated_audio.mp3" | |
tts.save(audio_file) | |
return audio_file | |
def main() -> None: | |
st.set_page_config(page_title="IMAGE TO STORY CONVERTER", page_icon="🖼️") | |
st.markdown(css_code, unsafe_allow_html=True) | |
with st.sidebar: | |
st.image("images.jpg") | |
st.write("---") | |
st.write("AI StoryTeller @ Anjali Dhoundiyal") | |
st.header("Image-to-Story Converter") | |
uploaded_file: Any = st.file_uploader("Please choose a file to upload", type="jpg") | |
if uploaded_file is not None: | |
bytes_data: Any = uploaded_file.getvalue() | |
with open(uploaded_file.name, "wb") as file: | |
file.write(bytes_data) | |
st.image(uploaded_file, caption="Uploaded Image", use_column_width=True) | |
progress_bar(100) | |
scenario: str = generate_text_from_image(uploaded_file.name) | |
story: str = generate_story_from_text(scenario) | |
audio_file = generate_speech_from_text(story) | |
with st.expander("Generated Image scenario"): | |
st.write(scenario) | |
with st.expander("Generated short story"): | |
st.write(story) | |
st.audio(audio_file) # Play the generated audio file | |
if __name__ == "__main__": | |
main() | |