abspython/hate-meme-detect
0
1import streamlit as st2import numpy as np3import joblib4import easyocr5from transformers import pipeline6from keras.utils import load_img7from keras.utils import img_to_array8from PIL import Image9import io10 11from tempfile import NamedTemporaryFile12 13st.set_option('deprecation.showfileUploaderEncoding', False)14 15def load_image(image_file):16 img = Image.open(image_file)17 return img18 19def get_img_prediction(imgpath): 20 img = load_img(imgpath,target_size=(128,128,3))21 img = img_to_array(img)22 img = img/25523 24 X_pred_image = np.array(img)25 26 X_pred_imaged = X_pred_image.reshape(1,128*128*3)27 y_pred_pro = loaded_lgbm.predict_proba(X_pred_imaged)28 return y_pred_pro[0].tolist()29 30 31def get_text_prediction(imgpath):32 result = reader.readtext(imgpath,paragraph="False")33 text = []34 for i in result:35 text.append(i[1])36 text = " ".join(text)37 st.write(text)38 t_pred = get_inference(text)39 t_pred_c = []40 for c in t_pred:41 for a in c.values():42 if a not in ['NEGATIVE','POSITIVE']:43 t_pred_c.append(a)44 return t_pred_c[::-1]45 46 47def pred_label_mean(i_pred,t_pred):48 ensemble_pro = [(g + h) / 2 for g, h in zip(i_pred, t_pred)]49 return ensemble_pro50 51def get_inference(input_text):52 return bert(input_text)53 54 55loaded_lgbm = joblib.load('lgbm_v (2).sav')56 57bert = pipeline("text-classification", return_all_scores=True)58reader = easyocr.Reader(['en'])59st.title('Hateful Memes Classification')60 61image_file = st.file_uploader("Upload Images", type=["png","jpg","jpeg"])62temp_file = NamedTemporaryFile(delete=False)63 64if image_file is not None:65 # To View Uploaded Image66 st.write('Meme Image:')67 temp_file.write(image_file.getvalue())68 imgu = load_img(temp_file.name)69 st.image(imgu)70 71 with st.spinner('Predicting Label..'):72 i_pred = get_img_prediction(temp_file.name)73 t_pred = get_text_prediction(temp_file.name)74 y_pred_both = pred_label_mean(i_pred,t_pred)75 y_pred = y_pred_both.index(max(y_pred_both))76 77 st.write(np.round(np.array(y_pred_both),4))78 if y_pred == 0:79 st.success('Predicted Label: non-hateful meme')80 if y_pred == 1:81 st.success('Predicted Label: hateful meme')82 