Spaces:
Runtime error
Runtime error
# %% | |
from keras.layers import * | |
from keras.models import * | |
from tensorflow.keras.models import Model | |
from tensorflow.keras.applications import ResNet50 | |
from tensorflow.keras.preprocessing import image | |
import numpy as np | |
from tensorflow.keras.applications.resnet50 import preprocess_input | |
import pickle | |
from tensorflow.keras.preprocessing.sequence import pad_sequences | |
from tensorflow.keras.utils import to_categorical | |
# %% | |
model=load_model('model_weights/model_19.h5') | |
# %% | |
model_temp=ResNet50(weights='imagenet',input_shape=(224,224,3)) | |
# %% | |
model_resnet=Model(model_temp.input,model_temp.layers[-2].output) | |
# %% | |
def preprocess_img(img): | |
img=image.load_img(img,target_size=(224,224)) | |
img=image.img_to_array(img) | |
img=np.expand_dims(img,axis=0) | |
img=preprocess_input(img) | |
return img | |
# %% | |
def encode_image(img): | |
img=preprocess_img(img) | |
feature_vector=model_resnet.predict(img) | |
feature_vector=feature_vector.reshape(1,feature_vector.shape[1]) | |
# print(feature_vector.shape) | |
return feature_vector | |
# %% | |
with open('storage/word_to_idx.pkl','rb') as w2i: | |
word_to_idx=pickle.load(w2i) | |
with open('storage/idx_to_word.pkl','rb') as i2w: | |
idx_to_word=pickle.load(i2w) | |
# %% | |
def predict_caption(photo): | |
max_len=35 | |
in_text = "startseq" | |
for i in range(max_len): | |
sequence = [word_to_idx[w] for w in in_text.split() if w in word_to_idx] | |
sequence = pad_sequences([sequence],maxlen=max_len,padding='post') | |
ypred = model.predict([photo,sequence]) | |
ypred = ypred.argmax() #WOrd with max prob always - Greedy Sampling | |
word = idx_to_word[ypred] | |
in_text += (' ' + word) | |
if word == "endseq": | |
break | |
final_caption = in_text.split()[1:-1] | |
final_caption = ' '.join(final_caption) | |
return final_caption | |
# %% | |
def caption_this_image(image): | |
enc=encode_image(image) | |
caption=predict_caption(enc) | |
return caption |