Spaces:
Sleeping
Sleeping
import streamlit as st | |
from PIL import Image | |
import tensorflow as tf | |
import numpy as np | |
import pickle | |
# Load the pre-trained model | |
def load_model(): | |
model = tf.keras.models.load_model('./caption_model.h5') | |
return model | |
# Load the tokenizer | |
def load_tokenizer(): | |
with open('tokenizer.pkl', 'rb') as handle: | |
tokenizer = pickle.load(handle) | |
return tokenizer | |
model = load_model() | |
tokenizer = load_tokenizer() | |
# Function to preprocess the image | |
def preprocess_image(image): | |
image = image.resize((299, 299)) # Resize to the input size of the model | |
image = np.array(image) / 255.0 # Normalize | |
image = np.expand_dims(image, axis=0) # Add batch dimension | |
return image | |
# Function to generate caption | |
def generate_caption(image): | |
image = preprocess_image(image) | |
predictions = model.predict(image) | |
predicted_caption = tokenizer.sequences_to_texts(predictions.argmax(axis=-1)) | |
return predicted_caption[0] | |
# Streamlit app | |
st.title("Image Captioning App") | |
st.write("Upload an image to generate a caption") | |
uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "png", "jpeg"]) | |
if uploaded_file is not None: | |
image = Image.open(uploaded_file) | |
st.image(image, caption='Uploaded Image.', use_column_width=True) | |
st.write("") | |
st.write("Generating caption...") | |
caption = generate_caption(image) | |
st.write(caption) | |