import streamlit as st import numpy as np import joblib import easyocr from transformers import pipeline from keras.utils import load_img from keras.utils import img_to_array from PIL import Image import io from tempfile import NamedTemporaryFile st.set_option('deprecation.showfileUploaderEncoding', False) def load_image(image_file): img = Image.open(image_file) return img def get_img_prediction(imgpath): img = load_img(imgpath,target_size=(128,128,3)) img = img_to_array(img) img = img/255 X_pred_image = np.array(img) X_pred_imaged = X_pred_image.reshape(1,128*128*3) y_pred_pro = loaded_lgbm.predict_proba(X_pred_imaged) return y_pred_pro[0].tolist() def get_text_prediction(imgpath): result = reader.readtext(imgpath,paragraph="False") text = [] for i in result: text.append(i[1]) text = " ".join(text) st.write(text) t_pred = get_inference(text) t_pred_c = [] for c in t_pred: for a in c.values(): if a not in ['NEGATIVE','POSITIVE']: t_pred_c.append(a) return t_pred_c[::-1] def pred_label_mean(i_pred,t_pred): ensemble_pro = [(g + h) / 2 for g, h in zip(i_pred, t_pred)] return ensemble_pro def get_inference(input_text): return bert(input_text) loaded_lgbm = joblib.load('lgbm_v (2).sav') bert = pipeline("text-classification", return_all_scores=True) reader = easyocr.Reader(['en']) st.title('Hateful Memes Classification') image_file = st.file_uploader("Upload Images", type=["png","jpg","jpeg"]) temp_file = NamedTemporaryFile(delete=False) if image_file is not None: # To View Uploaded Image st.write('Meme Image:') temp_file.write(image_file.getvalue()) imgu = load_img(temp_file.name) st.image(imgu) with st.spinner('Predicting Label..'): i_pred = get_img_prediction(temp_file.name) t_pred = get_text_prediction(temp_file.name) y_pred_both = pred_label_mean(i_pred,t_pred) y_pred = y_pred_both.index(max(y_pred_both)) st.write(np.round(np.array(y_pred_both),4)) if y_pred == 0: st.success('Predicted Label: non-hateful meme') if y_pred == 1: st.success('Predicted Label: hateful meme')