| | 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() |
| |
|