Shlok0311's picture
Update app.py
082d039 verified
raw
history blame
2.37 kB
import gradio as gr
import numpy as np
import pandas as pd
import tensorflow as tf
import pickle
from PIL import Image
with open('tokenizer.pkl', 'rb') as handle:
tokenizer = pickle.load(handle)
feature_model=tf.keras.models.load_model('feature_model.keras')
model = tf.keras.models.load_model('best_model_inceptionv3.keras')
def idx_to_word(integer, tokenizer):
for word, index in tokenizer.word_index.items():
if index == integer:
return word
return None
def predict_caption(image):
in_text = 'startseq'
# iterate over the max length of sequence
for i in range(35):
# encode input sequence
sequence = tokenizer.texts_to_sequences([in_text])[0]
# pad the sequence
sequence = tf.keras.preprocessing.sequence.pad_sequences([sequence], 35, padding='post')
# predict next word
yhat = model.predict([image, sequence], verbose=0)
# get index with high probability
yhat = np.argmax(yhat)
# convert index to word
word = idx_to_word(yhat, tokenizer)
# stop if word not found
if word is None:
break
# append word as input for generating next word
in_text += " " + word
# stop if we reach end tag
if word == 'endseq':
break
return in_text
def generate_caption(image):
print(image)
# image = tf.keras.preprocessing.image.load_img(image_path, target_size=(299, 299))
# image = tf.keras.preprocessing.image.img_to_array(image)
# image = image.reshape((1, image.shape[0], image.shape[1], image.shape[2]))
image = image.resize((299, 299))
image_array = tf.keras.preprocessing.image.img_to_array(image)
image_array = image_array.reshape((1, 299, 299, 3))
image = tf.keras.applications.inception_v3.preprocess_input(image_array)
feature = feature_model.predict(image, verbose=0)
caption = predict_caption(feature)
return caption
gr.Interface(fn=generate_caption,
inputs=gr.Image(label='Upload a photo',type="pil"),
outputs=gr.Label(label='Caption Genrerated'),
examples=['1015584366.jpg','1028205764_7e8df9a2ea.jpg','1024138940_f1fefbdce1.jpg','108899015_bf36131a57.jpg'],
title='Image Caption Generator',
theme='dark'
).launch(share=True)