Spaces:
Paused
Paused
import streamlit as st | |
from PIL import Image | |
from torchvision import transforms | |
from transformers import AutoProcessor, BlipForConditionalGeneration | |
import google.generativeai as genai | |
# Define model | |
# Initialize the image to caption model - BLIP | |
blip_processor = AutoProcessor.\ | |
from_pretrained("Salesforce/blip-image-captioning-base") | |
blip_model = BlipForConditionalGeneration.\ | |
from_pretrained("Salesforce/blip-image-captioning-base") | |
# Initialize the caption to instagram post model - gemini | |
GOOGLE_API_KEY = 'AIzaSyDMeFOnOflzYJ-cjedJ8ky9AE-yThcNXFk' | |
genai.configure(api_key=GOOGLE_API_KEY) | |
gemini_model = genai.GenerativeModel('gemini-pro') | |
def import_and_predict(image_data): | |
"""Creates five possible Instagram captions for an image. | |
Args: | |
- image_data: Image data in RGB format. | |
Returns: | |
- response.text: The five Instagram captions in text format. | |
""" | |
transform = transforms.Compose([ | |
transforms.Resize((1080, 1080)) | |
]) | |
uploaded_image = transform(image_data) | |
# BLIP Description Generation | |
inputs = blip_processor(images=uploaded_image, return_tensors="pt") | |
generated_ids = blip_model.generate(**inputs, | |
max_new_tokens=100, | |
max_length=100) | |
caption = blip_processor.\ | |
batch_decode(generated_ids, skip_special_tokens=True)[0].strip() | |
# Gemini Caption Generation | |
prompt = f"""Given the provided photo caption, generate five distinct \ | |
and engaging Instagram captions. Each caption must include \ | |
at least one emoji and one hashtag. The captions should be \ | |
formatted with a preceding "Caption #", followed by the \ | |
caption text. Ensure each caption is seperated by a blank \ | |
line for readability. \ | |
Original Caption: {caption} | |
Please format your response as follows: | |
**Caption 1**: [caption text] \n | |
**Caption 2**: [caption text] \n | |
**Caption 3**: [caption text] \n | |
**Caption 4**: [caption text] \n | |
**Caption 5**: [caption text] \n | |
""" | |
response = gemini_model.generate_content(prompt) | |
return response.text | |
# Define streamlit configurations | |
# Set pre-defined page configurations | |
st.set_page_config(page_title="Instamuse", | |
page_icon=":camera:", | |
initial_sidebar_state='auto') | |
# Sidebar (left side of the page) | |
with st.sidebar: | |
st.image('insta.png') | |
st.title("InstaMuse") | |
st.subheader("Welcome to InstaMuse, the ultimate tool for turning your \ | |
snapshots into social media sensations!") | |
st.write("Start turning heads with your posts. Use InstaMuse now and \ | |
watch your likes soar! ") | |
# Main page text | |
st.write(""" | |
# InstaMuse 🌟📸 | |
Struggling to find the perfect words to match your pictures? Let \ | |
InstaMuse do the heavy lifting! With just a simple upload, our app \ | |
uses cutting-edge technology to analyze your image and generate a \ | |
witty, engaging, or inspiring caption that captures the essence of \ | |
your moment. \n \ | |
Whether you’re a selfie savant, a nature explorer, or a foodie fanatic\ | |
, InstaMuse is here to amplify your Instagram presence. Jazz up your \ | |
feed with tailored captions that resonate with your followers and \ | |
attract new eyes to your profile. It’s quick, easy, and fun! | |
**Drag your photo here and spark some caption magic!** ✨ | |
""" | |
) | |
# Upload image file and process image | |
file = st.file_uploader("", type=["jpg", "png"]) | |
if file is not None: | |
# Create two columns for the image and the captions | |
col1, col2 = st.columns(2) | |
with col1: | |
# Image column, left screen. | |
st.markdown("#### Photo:") | |
image = Image.open(file).convert('RGB') | |
image.thumbnail((400, 400)) | |
st.image(image, caption='Uploaded Image') | |
with col2: | |
# Caption column, right screen. | |
predictions = import_and_predict(image) | |
st.markdown("#### Captions:") | |
st.write(predictions) | |
else: | |
st.text("Please upload an image to generate captions.") |