khushalj/Image-Forgery_Detection
0
1# -*- coding: utf-8 -*-2"""3"""4 5 6import streamlit as st7import matplotlib.pyplot as plt8from tensorflow.keras.utils import normalize9from tensorflow.keras.models import *10import numpy as np11import pickle as pkl12from PIL import *13import cv214 15 16#Function for ela 17def convert_to_ela_image(image, quality):18 temp_filename = 'temp_file.jpg'19 ela_filename = 'temp_ela_file.png'20 21 image.save(temp_filename, 'JPEG', quality = quality)22 temp_image = Image.open(temp_filename)23 24 ela_image = ImageChops.difference(image, temp_image)25 26 extrema = ela_image.getextrema()27 max_diff = max([ex[1] for ex in extrema])28 if max_diff == 0:29 max_diff = 130 scale = 255.0 / max_diff31 32 ela_image = ImageEnhance.Brightness(ela_image).enhance(scale)33 34 return ela_image35 36#Function for filters 37import numpy as np38q = [4.0, 12.0, 2.0]39filter1 = [[0, 0, 0, 0, 0],40 [0, -1, 2, -1, 0],41 [0, 2, -4, 2, 0],42 [0, -1, 2, -1, 0],43 [0, 0, 0, 0, 0]]44filter2 = [[-1, 2, -2, 2, -1],45 [2, -6, 8, -6, 2],46 [-2, 8, -12, 8, -2],47 [2, -6, 8, -6, 2],48 [-1, 2, -2, 2, -1]]49filter3 = [[0, 0, 0, 0, 0],50 [0, 0, 0, 0, 0],51 [0, 1, -2, 1, 0],52 [0, 0, 0, 0, 0],53 [0, 0, 0, 0, 0]]54 55 56filter1 = np.asarray(filter1, dtype=float) / q[0]57filter2 = np.asarray(filter2, dtype=float) / q[1]58filter3 = np.asarray(filter3, dtype=float) / q[2]59 60filters = filter1+filter2+filter361 62 63 64image_size = (128, 128)65 66def prepare_image(image_path):67 return np.array(convert_to_ela_image(image_path, 85).resize(image_size)).flatten() / 255.068 69 70 71#Load model 72json_file = open('v1model.json', 'r')73model_json = json_file.read()74json_file.close()75model = model_from_json(model_json)76# load weights into new model77model.load_weights("v1model.h5")78 79 80#Load model for phase 2 81# load json and create model82json_file2 = open('dunetm.json', 'r')83loaded_model_json = json_file2.read()84json_file2.close()85#load weights 86loaded_model = model_from_json(loaded_model_json)87loaded_model.load_weights("dunet.h5")88 89def predict(image,model) :90 im = Image.open(image)91 ela_img=prepare_image(im)92 ela_img=ela_img.reshape(1,128,128,3)93 prediction=model.predict(ela_img)94 95 return ela_img,prediction96 97 98def predict_region(img,model) :99 img=np.array(Image.open(img))100 temp_img_arr=cv2.resize(img,(512,512))101 temp_preprocess_img=cv2.filter2D(temp_img_arr,-1,filters)102 temp_preprocess_img=cv2.resize(temp_preprocess_img,(512,512))103 temp_img_arr=temp_img_arr.reshape(1,512,512,3)104 temp_preprocess_img=temp_preprocess_img.reshape(1,512,512,3)105 model_temp=model.predict([temp_img_arr,temp_preprocess_img])106 model_temp=model_temp[0].reshape(512,512)107 for i in range(model_temp.shape[0]) :108 for j in range(model_temp.shape[1]) :109 if model_temp[i][j]>0.75 :110 model_temp[i][j]=1.0111 else :112 model_temp[i][j]=0.0113 114 115 return model_temp116 117 118 119 120 121st.title("Image Forgery Detection (Copy-Move Forgery Detection)")122st.header("Upload a image to get whether image is forged or pristine")123# To View Uploaded Image124image_file = st.file_uploader("Upload Images", type=["png","jpg"])125# You don't have handy image 126if bool(image_file)==True :127 st.image(image_file)128 ela_img,pred=predict(image_file,model)129 st.text("ELA image for this image")130 st.image(ela_img)131 pred=pred[0]132 st.markdown("Probability of input image to be real is " + str(pred[0]))133 st.markdown("Probability of input image to be fake is " + str(1-pred[0]))134 135 if pred >= 0.5 :136 st.title("This is a pristine image")137 else :138 st.title("This is a fake image")139 predi=predict_region(image_file,loaded_model)140 st.image(predi)141 st.write("##### NOTE : Black region is part of image where original image may be tempered Please have a close look on these regions") 142 143 144else :145 ran_imageid=['Au_ani_00043','Au_sec_00040','Au_sec_30730','Tp_D_CRN_M_N_nat10129_cha00086_11522','Tp_D_CRN_S_N_cha10130_art00092_12187']146 st.text("")147 st.text("")148 st.text("")149 st.text("")150 if st.button('Generate a random image') :151 ran_num=np.random.randint(0,len(ran_imageid))152 img_static_path=str(ran_imageid[ran_num])+'.jpg'153 temp_img=Image.open(img_static_path)154 st.image(temp_img)155 predi=predict_region(img_static_path,loaded_model) 156 ela_img,pred=predict(img_static_path,model)157 st.text("ELA image for this image")158 st.image(ela_img)159 pred=pred[0]160 st.markdown("Probability of input image to be real is " + str(pred[0]))161 st.markdown("Probability of input image to be fake is " + str(1-pred[0]))162 if pred >= 0.5 :163 st.title("This is a pristine image")164 else :165 st.title("This is a fake image")166 st.image(predi)167 st.write("##### NOTE : Black region is part of image where original image may be tempered have a close look on these regions ") 168 169 170 171 