File size: 4,859 Bytes
6364b8e
 
063d7d0
436d80d
e452552
 
436d80d
 
 
6364b8e
436d80d
759d503
 
 
53c3b30
759d503
dc236e4
e793dfb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
dc236e4
e793dfb
387ecb3
6364b8e
387ecb3
b69e293
 
 
6364b8e
b69e293
436d80d
bec3144
e452552
6364b8e
5c55b9f
 
9a7bb33
88cf8f1
 
 
 
 
c0cd7e7
 
c9eb8a2
c0cd7e7
 
387ecb3
 
 
b69e293
 
 
387ecb3
cafb60e
88cf8f1
 
 
387ecb3
88cf8f1
 
9a7bb33
88cf8f1
 
 
 
 
dc236e4
 
 
 
 
387ecb3
391de58
387ecb3
b69e293
 
 
387ecb3
cafb60e
88cf8f1
 
 
387ecb3
88cf8f1
 
9a7bb33
88cf8f1
 
 
6fc4472
 
dc236e4
 
 
 
 
 
 
6364b8e
9a7bb33
f5d8deb
9a7bb33
 
 
 
c9eb8a2
9a7bb33
c9eb8a2
9a7bb33
c9eb8a2
9a7bb33
c9eb8a2
9a7bb33
c9eb8a2
9a7bb33
c9eb8a2
c0cd7e7
dc236e4
 
c0cd7e7
dc236e4
 
6364b8e
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
137
138
139
140
141
142
143
import gradio as gr
import torch
from transformers import AutoFeatureExtractor, AutoModelForImageClassification, pipeline
from numpy import exp
import pandas as  pd

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

    
models=[
    "Nahrawy/AIorNot",
    "arnolfokam/ai-generated-image-detector",
    "umm-maybe/AI-image-detector",
]
'''
pipe0 = pipeline("image-classification", f"{models[0]}")
pipe1 = pipeline("image-classification", f"{models[1]}")
pipe2 = pipeline("image-classification", f"{models[2]}")

def image_classifier0(image):
    outputs = pipe0(image)
    results = {}
    for result in outputs:
        results[result['label']] = result['score']
    return results
def image_classifier1(image):
    outputs = pipe1(image)
    results = {}
    for result in outputs:
        results[result['label']] = result['score']
    return results
def image_classifier2(image):
    outputs = pipe2(image)
    results = {}
    for result in outputs:
        results[result['label']] = result['score']
    return results
'''
    
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>
    Model used: <a href='https://huggingface.co/{mod}'>{mod}</a><br>    
    <br>    
    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>
    Model used: <a href='https://huggingface.co/{mod}'>{mod}</a><br>    
    <br>    
    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>
    Model used: <a href='https://huggingface.co/{mod}'>{mod}</a><br>    
    <br>    
    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
    
with gr.Blocks() as app:
    with gr.Column():
        inp = gr.Pil()
        btn = gr.Button()
    with gr.Group():        
        with gr.Row():
            with gr.Box():
                lab0 = gr.HTML(f"""<b>Testing on Model: {models[0]}</b>""")
                outp0 = gr.HTML("""""")
                n_out0=gr.Label(label="Output")
            with gr.Box():
                lab1 = gr.HTML(f"""<b>Testing on Model: {models[1]}</b>""")
                outp1 = gr.HTML("""""")
                n_out1=gr.Label(label="Output")
            with gr.Box():
                lab2 = gr.HTML(f"""<b>Testing on Model: {models[2]}</b>""")
                outp2 = gr.HTML("""""")            
                n_out2=gr.Label(label="Output")
    btn.click(aiornot0,[inp],[outp0,n_out0])
    btn.click(aiornot1,[inp],[outp1,n_out1])
    btn.click(aiornot2,[inp],[outp2,n_out2])
    #btn.click(image_classifier0,[inp],n_out0)
    #btn.click(image_classifier1,[inp],n_out1)
    #btn.click(image_classifier2,[inp],n_out2)    
app.launch()