David Fischinger
Initial Commit
a435037
raw
history blame
1.86 kB
from PIL import Image
import streamlit as st
import cv2
import numpy as np
import os
import tensorflow as tf
from IMVIP_Supplementary_Material.scripts import dfutils #methods used for DF-Net
DESCRIPTION = """# DF-Net
The Digital Forensics Network is designed and trained to detect and locate image manipulations.
More information can be found in this [publication](https://zenodo.org/record/8214996)
"""
IMG_SIZE=256
tf.experimental.numpy.experimental_enable_numpy_behavior()
#np.warnings.filterwarnings('error', category=np.VisibleDeprecationWarning)
def check_forgery_df(img):
shape_original = img.shape
img = cv2.resize(img, (IMG_SIZE,IMG_SIZE))
x = np.expand_dims( img.astype('float32')/255., axis=0 )
pred1 = model_M1.predict(x, verbose=0)
pred2= model_M2.predict(x, verbose=0)
pred = np.max([pred1,pred2], axis=0)
pred = dfutils.create_mask(pred)
pred = pred.reshape(pred.shape[-3:-1])
resized_image = cv2.resize(pred, (shape_original[1],shape_original[0]), interpolation=cv2.INTER_LINEAR)
return resized_image
def evaluate(img):
pre_t = check_forgery_df(img)
st.image(pre_t, caption="White area indicates potential image manipulations.")
st.markdown(DESCRIPTION)
uploaded_file = st.file_uploader("Please upload an image", type=["jpeg", "jpg", "png"])
if uploaded_file is not None:
#load models
model_M1 = tf.keras.models.load_model("IMVIP_Supplementary_Material/models/model1/")
model_M2 = tf.keras.models.load_model("IMVIP_Supplementary_Material/models/model2/")
# Convert the file to an opencv image.
file_bytes = np.asarray(bytearray(uploaded_file.read()), dtype=np.uint8)
opencv_image = cv2.imdecode(file_bytes, 1)
reversed_image = opencv_image[:, :, ::-1]
st.image(reversed_image, caption="Input Image")
evaluate(reversed_image)