File size: 4,570 Bytes
6364b8e
 
063d7d0
436d80d
e452552
268e717
096bee8
 
 
 
 
 
436d80d
 
 
6364b8e
436d80d
759d503
 
53c3b30
a446974
e793dfb
a446974
e793dfb
387ecb3
6364b8e
387ecb3
b69e293
 
 
6364b8e
b69e293
436d80d
bec3144
e452552
6364b8e
5c55b9f
 
9a7bb33
a446974
88cf8f1
 
 
c0cd7e7
 
c9eb8a2
c0cd7e7
 
387ecb3
 
 
b69e293
 
 
387ecb3
cafb60e
88cf8f1
 
 
387ecb3
88cf8f1
 
9a7bb33
a446974
88cf8f1
 
 
dc236e4
 
 
 
 
387ecb3
391de58
387ecb3
b69e293
 
 
387ecb3
cafb60e
88cf8f1
 
 
387ecb3
88cf8f1
 
9a7bb33
a446974
88cf8f1
6fc4472
 
dc236e4
 
 
 
 
 
a446974
 
096bee8
 
 
 
a446974
539820e
 
 
a446974
6364b8e
a446974
 
 
 
 
 
 
f5d8deb
9a7bb33
 
 
a446974
9a7bb33
c9eb8a2
9a7bb33
a446974
9a7bb33
c9eb8a2
9a7bb33
a446974
9a7bb33
c9eb8a2
a446974
c0cd7e7
dc236e4
 
a446974
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import gradio as gr
import torch
from transformers import AutoFeatureExtractor, AutoModelForImageClassification, pipeline
from numpy import exp
import pandas as  pd
from PIL import Image
import urllib.request 
import uuid
uid=uuid.uuid4()



def softmax(vector):
 e = exp(vector)
 return e / e.sum()

    
models=[
    "Nahrawy/AIorNot",
    "umm-maybe/AI-image-detector",
    "arnolfokam/ai-generated-image-detector",

]
    
def aiornot0(image):    
    labels = ["Real", "AI"]
    mod=models[0]
    feature_extractor0 = AutoFeatureExtractor.from_pretrained(mod)
    model0 = AutoModelForImageClassification.from_pretrained(mod)
    input = feature_extractor0(image, return_tensors="pt")
    with torch.no_grad():
        outputs = model0(**input)
        logits = outputs.logits
        probability = softmax(logits)
        px = pd.DataFrame(probability.numpy())
    prediction = logits.argmax(-1).item()
    label = labels[prediction]
    html_out = f"""
    <h1>This image is likely: {label}</h1><br><h3>
 
    Probabilites:<br>
    Real: {px[0][0]}<br>
    AI: {px[1][0]}"""
    results = {}
    for idx,result in enumerate(px):
        results[labels[idx]] = px[idx][0]
    #results[labels['label']] = result['score']
    return gr.HTML.update(html_out),results
def aiornot1(image):    
    labels = ["Real", "AI"]
    mod=models[1]
    feature_extractor1 = AutoFeatureExtractor.from_pretrained(mod)
    model1 = AutoModelForImageClassification.from_pretrained(mod)
    input = feature_extractor1(image, return_tensors="pt")
    with torch.no_grad():
        outputs = model1(**input)
        logits = outputs.logits
        probability = softmax(logits)
        px = pd.DataFrame(probability.numpy())
    prediction = logits.argmax(-1).item()
    label = labels[prediction]
    html_out = f"""
    <h1>This image is likely: {label}</h1><br><h3>
  
    Probabilites:<br>
    Real: {px[0][0]}<br>
    AI: {px[1][0]}"""
    results = {}
    for idx,result in enumerate(px):
        results[labels[idx]] = px[idx][0]
    #results[labels['label']] = result['score']
    return gr.HTML.update(html_out),results    
def aiornot2(image):    
    labels = ["AI", "Real"]
    mod=models[2]
    feature_extractor2 = AutoFeatureExtractor.from_pretrained(mod)
    model2 = AutoModelForImageClassification.from_pretrained(mod)
    input = feature_extractor2(image, return_tensors="pt")
    with torch.no_grad():
        outputs = model2(**input)
        logits = outputs.logits
        probability = softmax(logits)
        px = pd.DataFrame(probability.numpy())
    prediction = logits.argmax(-1).item()
    label = labels[prediction]
    html_out = f"""
    <h1>This image is likely: {label}</h1><br><h3>
  
    Probabilites:<br>
    Real: {px[1][0]}<br>
    AI: {px[0][0]}"""

    results = {}
    for idx,result in enumerate(px):
        results[labels[idx]] = px[idx][0]
    #results[labels['label']] = result['score']
    return gr.HTML.update(html_out),results
def load_url(url):
    try:
        urllib.request.urlretrieve( 
            f'{url}', 
            f"{uid}tmp_im.png")         
        image = Image.open(f"{uid}tmp_im.png")
        mes = "Image Loaded"
    except Exception as e:
        image=None
        mes=f"Image not Found<br>Error: {e}"
    return image,mes
with gr.Blocks() as app:
    with gr.Row():
        with gr.Column():
            in_url=gr.Textbox(label="Image URL")
            with gr.Row():
                load_btn=gr.Button("Load URL")
                btn = gr.Button("Detect AI")
            mes = gr.HTML("""""")
        inp = gr.Pil()
    with gr.Group():        
        with gr.Row():
            with gr.Box():
                lab0 = gr.HTML(f"""<b>Testing on Model: <a href='https://huggingface.co/{models[0]}'>{models[0]}</a></b>""")
                outp0 = gr.HTML("""""")
                n_out0=gr.Label(label="Output")
            with gr.Box():
                lab1 = gr.HTML(f"""<b>Testing on Model: <a href='https://huggingface.co/{models[1]}'>{models[1]}</a></b>""")
                outp1 = gr.HTML("""""")
                n_out1=gr.Label(label="Output")
            with gr.Box():
                lab2 = gr.HTML(f"""<b>Testing on Model: <a href='https://huggingface.co/{models[2]}'>{models[2]}</a></b>""")
                outp2 = gr.HTML("""""")            
                n_out2=gr.Label(label="Output")
    load_btn.click(load_url,in_url,[inp,mes])
    btn.click(aiornot0,[inp],[outp0,n_out0])
    btn.click(aiornot1,[inp],[outp1,n_out1])
    btn.click(aiornot2,[inp],[outp2,n_out2])
app.launch(enable_queue=False)