|
import gradio as gr |
|
import os |
|
import csv |
|
from models import get_model |
|
import torch |
|
import torchvision.transforms as transforms |
|
import torch.utils.data |
|
import numpy as np |
|
import sys |
|
from PIL import Image |
|
|
|
|
|
MEAN = { |
|
"imagenet":[0.485, 0.456, 0.406], |
|
"clip":[0.48145466, 0.4578275, 0.40821073] |
|
} |
|
|
|
STD = { |
|
"imagenet":[0.229, 0.224, 0.225], |
|
"clip":[0.26862954, 0.26130258, 0.27577711] |
|
} |
|
|
|
|
|
def detect_one_image(model, image): |
|
|
|
""" |
|
model = get_model('CLIP:ViT-L/14') |
|
state_dict = torch.load(ckpt, map_location='cpu') |
|
model.fc.load_state_dict(state_dict) |
|
print ("Model loaded..") |
|
model.eval() |
|
model.cuda() |
|
""" |
|
|
|
""" |
|
if jpeg_quality is not None: |
|
img = png2jpg(img, jpeg_quality) |
|
""" |
|
transform = transforms.Compose([ |
|
transforms.ToTensor(), |
|
transforms.CenterCrop(224), |
|
transforms.Normalize( mean=MEAN['clip'], std=STD['clip'] ), |
|
]) |
|
img = transform(image) |
|
img = img.to('cuda:0') |
|
|
|
detection_output = model(img) |
|
output = torch.sigmoid(detection_output) |
|
|
|
return output |
|
|
|
def detect(image): |
|
|
|
model = get_model('CLIP:ViT-L/14') |
|
state_dict = torch.load('./pretrained_weights/fc_weights.pth', map_location='cpu') |
|
model.fc.load_state_dict(state_dict) |
|
|
|
|
|
model.eval() |
|
model.cuda() |
|
output_tensor = detect_one_image(model, image) |
|
ai_likelihood = (100*output_tensor).item() |
|
return "The image is " + str(ai_likelihood) + r" % likely to be AI-generated." |
|
|
|
demo = gr.Interface( |
|
fn=detect, |
|
inputs=["image"], |
|
outputs=["text"], |
|
) |
|
|
|
demo.launch() |
|
|