Spaces:
Sleeping
Sleeping
import gradio as gr | |
from PIL import Image | |
from vit_model_test import CustomModel | |
from vit_Training import Custom_VIT_Model | |
custom_css = """ | |
<style> | |
#submit_btn { | |
background-color: #4CAF50; /* Green */ | |
color: white; | |
width:47%; | |
margin-right: 3%; | |
} | |
#feedback_btn { | |
background-color: #f44336; /* Red */ | |
color: white; | |
width:47%; | |
margin-left: 3%; | |
} | |
#clear_btn { | |
background-color: #2196F3; /* Blue */ | |
color: white; | |
width: 25%; | |
float: left; | |
} | |
</style> | |
""" | |
# Initialize the model | |
model = CustomModel() | |
model_training = Custom_VIT_Model() | |
# Store the last prediction result | |
last_prediction = None | |
def predict(image: Image.Image): | |
global last_prediction | |
label, confidence = model.predict(image) | |
result = "AI image" if label == 1 else "Real image" | |
last_prediction = (image, label) # Store the image and label for feedback | |
return result, f"Confidence: {confidence:.2f}%" | |
def report_feedback(): | |
global last_prediction | |
if last_prediction is not None: | |
image, predicted_label = last_prediction | |
correct_label = 1 if predicted_label == 0 else 0 # Invert the label | |
print(f"Reporting feedback: predicted_label={predicted_label}, correct_label={correct_label}") # Debugging line | |
try: | |
model_training.add_data(image, correct_label) # Pass the incorrect prediction to the model | |
print("Feedback recorded successfully.") # Debugging line | |
return "Feedback recorded. Thank you!" | |
except Exception as e: | |
print(f"Error recording feedback: {e}") # Debugging line | |
return f"Error recording feedback: {e}" | |
else: | |
print("No prediction available to report.") # Debugging line | |
return "No prediction available to report." | |
# Define the Gradio blocks | |
with gr.Blocks(css=custom_css, theme=gr.themes.Soft()) as demo: | |
gr.Markdown("### Classify image of art as real or AI generated") | |
image_input = gr.Image(type="pil", label="Upload Image", height=365) | |
# Create a row for prediction and confidence outputs | |
with gr.Row(): | |
prediction_output = gr.Textbox(label="Prediction", interactive=False) | |
confidence_output = gr.Textbox(label="Confidence", interactive=False) | |
# Create a row for feedback_output | |
with gr.Row(): | |
feedback_output = gr.Textbox(label="Feedback Status", interactive=False, scale=0,min_width=730) | |
# Buttons | |
with gr.Row(): | |
submit_btn = gr.Button("Submit", variant="primary", elem_id="submit_btn") | |
feedback_btn = gr.Button("The model was wrong", variant="secondary", elem_id="feedback_btn") | |
gr.Markdown("<br>") | |
clear_btn = gr.Button("Clear", elem_id="clear_btn") | |
submit_btn.click(predict, inputs=image_input, outputs=[prediction_output, confidence_output]) | |
feedback_btn.click(report_feedback, outputs=feedback_output) | |
# Clear button | |
def clear_all(): | |
return None, "", "", "" | |
clear_btn.click(clear_all, outputs=[image_input, prediction_output, confidence_output, feedback_output]) | |
if __name__ == "__main__": | |
demo.launch(share=True) |