witchEverly's picture
Update app_utils.py
cf6bcfb verified
"""
Utility functions for the Instagram Caption Generator app.
"""
import os
from pathlib import Path
from dotenv import load_dotenv
import pandas as pd
import streamlit as st
from transformers import AutoProcessor, Blip2ForConditionalGeneration
def get_gemini_api_key():
"""
The api key is stored in as a private environment variable,
the purpose of this function is to retrieve the Google API key
for accessing the Generative AI API.
:return: str - The Google API key.
"""
load_dotenv()
google_api_key = os.getenv("GOOGLE_API_KEY")
return google_api_key
@st.cache_resource()
def init_model():
"""
Initializes the BLIP-2 model and processor for image captioning.
The cache_resource decorator is used to cache the model and processor.
The streamlit app can call this function to load the model and processor
without reinitializing it.
:param init_model_required: bool - Flag to indicate if the model needs to be initialized.
:returns: AutoProcessor, Blip2ForConditionalGeneration, bool - Model processor, BLIP-2 model, and flag.
"""
try:
processor = AutoProcessor.from_pretrained("Salesforce/blip2-opt-2.7b")
blip2_model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-opt-2.7b")
return processor, blip2_model
except Exception as e:
st.error(f"Error occurred during model initialization: {e}")
# # Function to store the user data to a CSV file
# def save_user_data(first_name, last_name, email, phone):
# """
# Function to store the user data to a CSV file
# :param first_name: str - First name of the user
# :param last_name: str - Last name of the user
# :param email: str - Email of the user
# :param phone: str - Phone number of the user
# :return: None
# """
# csv_file = Path("./user_data/user_data.csv")
# # Check if the file exists and create a DataFrame accordingly
# if csv_file.exists():
# df = pd.read_csv(csv_file)
# else:
# df = pd.DataFrame(columns=["First Name", "Last Name", "Email", "Phone Number"])
# new_data = {"First Name": first_name, "Last Name": last_name, "Email": email, "Phone Number": phone}
# df = df.append(new_data, ignore_index=True)
# df.to_csv(csv_file, index=False)
# return None
def save_user_data(first_name, last_name, email, phone):
"""
Function to store the user data to a CSV file
:param first_name: str - First name of the user
:param last_name: str - Last name of the user
:param email: str - Email of the user
:param phone: str - Phone number of the user
:return: None
"""
csv_file = Path("./user_data/user_data.csv")
# Check if the file exists and create a DataFrame accordingly
if csv_file.exists():
df = pd.read_csv(csv_file)
else:
df = pd.DataFrame(columns=["First Name", "Last Name",
"Email", "Phone Number"])
# Add and save new user data.
new_data = pd.DataFrame({"First Name": [first_name],
"Last Name": [last_name],
"Email": [email],
"Phone Number": [phone]})
df = pd.concat([df, new_data], ignore_index=True)
df.to_csv(csv_file, index=False)
return None
def get_gif(path):
"""
Function to get the GIF image from the specified path.
:param path: str - Path to the GIF image
:return: bytes - The GIF image
"""
with open(path, "rb") as file:
gif = file.read()
return gif
# Blip-2 does most of the standard image processing needed for image captioning.
def process_image():
"""
Unused function for image processing,
not needed for the current implementation.
"""
pass