CoolFace
Apppublic

khushalj/Image-Forgery_Detection

sourceHugging Faceupdated 4y agoView on Hugging Face
0likes
app.py171 linesDownload Raw Back to root
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