LPX55 commited on
Commit
acf0228
·
1 Parent(s): 2be263d

feat: add image augmentation tool and update demo interface to include new functionality

Browse files
Files changed (1) hide show
  1. app.py +75 -42
app.py CHANGED
@@ -1,6 +1,6 @@
1
  import gradio as gr
2
  from gradio_client import Client, handle_file
3
- from PIL import Image
4
  import numpy as np
5
  import os
6
  import time
@@ -172,37 +172,37 @@ register_model_with_metadata(
172
  architecture="VIT", dataset="TBA"
173
  )
174
 
175
- def postprocess_simple_prediction(result, class_names):
176
- scores = {name: 0.0 for name in class_names}
177
- fake_prob = result.get("Fake Probability")
178
- if fake_prob is not None:
179
- # Assume class_names = ["AI", "REAL"]
180
- scores["AI"] = float(fake_prob)
181
- scores["REAL"] = 1.0 - float(fake_prob)
182
- return scores
183
-
184
- def simple_prediction(img):
185
- client = Client("aiwithoutborders-xyz/OpenSight-Community-Forensics-Preview")
186
- client.view_api()
187
- print(type(img))
188
- result = client.predict(
189
- handle_file(img),
190
- api_name="simple_predict"
191
- )
192
- return result
193
-
194
-
195
- register_model_with_metadata(
196
- model_id="simple_prediction",
197
- model=simple_prediction,
198
- preprocess=None,
199
- postprocess=postprocess_simple_prediction,
200
- class_names=["AI", "REAL"],
201
- display_name="Community Forensics",
202
- contributor="Jeongsoo Park",
203
- model_path="aiwithoutborders-xyz/CommunityForensics-DeepfakeDet-ViT",
204
- architecture="ViT", dataset="GOAT"
205
- )
206
  def infer(image: Image.Image, model_id: str, confidence_threshold: float = 0.75) -> dict:
207
  """Predict using a specific model.
208
 
@@ -453,20 +453,20 @@ detection_model_eval_playground = gr.Interface(
453
 
454
  community_forensics_preview = gr.Interface(
455
  fn=lambda: gr.load("aiwithoutborders-xyz/OpenSight-Community-Forensics-Preview", src="spaces"),
456
- inputs=None,
457
  outputs=gr.HTML(), # or gr.Markdown() if it's just text
458
  title="Quick and simple prediction by our strongest model.",
459
  description="No ensemble, no context, no agents, just a quick and simple prediction by our strongest model.",
460
  api_name="quick_predict"
461
  )
462
 
463
- leaderboard = gr.Interface(
464
- fn=lambda: "# AI Generated / Deepfake Detection Models Leaderboard: Soon™",
465
- inputs=None,
466
- outputs=gr.Markdown(),
467
- title="Leaderboard",
468
- api_name="leaderboard"
469
- )
470
 
471
  # simple_predict_interface = gr.Interface(
472
  # fn=simple_prediction,
@@ -544,6 +544,37 @@ minmax_processing_interface = gr.Interface(
544
  api_name="tool_minmax_processing"
545
  )
546
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
547
  demo = gr.TabbedInterface(
548
  [
549
  detection_model_eval_playground,
@@ -552,7 +583,8 @@ demo = gr.TabbedInterface(
552
  bit_plane_interface,
553
  ela_interface,
554
  gradient_processing_interface,
555
- minmax_processing_interface
 
556
  ],
557
  [
558
  "Run Ensemble Prediction",
@@ -561,7 +593,8 @@ demo = gr.TabbedInterface(
561
  "Bit Plane Values",
562
  "Error Level Analysis (ELA)",
563
  "Gradient Processing",
564
- "MinMax Processing"
 
565
  ],
566
  title="Deepfake Detection & Forensics Tools",
567
  theme=None,
 
1
  import gradio as gr
2
  from gradio_client import Client, handle_file
3
+ from PIL import Image, ImageFilter
4
  import numpy as np
5
  import os
6
  import time
 
172
  architecture="VIT", dataset="TBA"
173
  )
174
 
175
+ # def postprocess_simple_prediction(result, class_names):
176
+ # scores = {name: 0.0 for name in class_names}
177
+ # fake_prob = result.get("Fake Probability")
178
+ # if fake_prob is not None:
179
+ # # Assume class_names = ["AI", "REAL"]
180
+ # scores["AI"] = float(fake_prob)
181
+ # scores["REAL"] = 1.0 - float(fake_prob)
182
+ # return scores
183
+
184
+ # def simple_prediction(img):
185
+ # client = Client("aiwithoutborders-xyz/OpenSight-Community-Forensics-Preview")
186
+ # client.view_api()
187
+ # print(type(img))
188
+ # result = client.predict(
189
+ # handle_file(img),
190
+ # api_name="simple_predict"
191
+ # )
192
+ # return result
193
+
194
+
195
+ # register_model_with_metadata(
196
+ # model_id="simple_prediction",
197
+ # model=simple_prediction,
198
+ # preprocess=None,
199
+ # postprocess=postprocess_simple_prediction,
200
+ # class_names=["AI", "REAL"],
201
+ # display_name="Community Forensics",
202
+ # contributor="Jeongsoo Park",
203
+ # model_path="aiwithoutborders-xyz/CommunityForensics-DeepfakeDet-ViT",
204
+ # architecture="ViT", dataset="GOAT"
205
+ # )
206
  def infer(image: Image.Image, model_id: str, confidence_threshold: float = 0.75) -> dict:
207
  """Predict using a specific model.
208
 
 
453
 
454
  community_forensics_preview = gr.Interface(
455
  fn=lambda: gr.load("aiwithoutborders-xyz/OpenSight-Community-Forensics-Preview", src="spaces"),
456
+ inputs=gr.Image(type="filepath"),
457
  outputs=gr.HTML(), # or gr.Markdown() if it's just text
458
  title="Quick and simple prediction by our strongest model.",
459
  description="No ensemble, no context, no agents, just a quick and simple prediction by our strongest model.",
460
  api_name="quick_predict"
461
  )
462
 
463
+ # leaderboard = gr.Interface(
464
+ # fn=lambda: "# AI Generated / Deepfake Detection Models Leaderboard: Soon™",
465
+ # inputs=None,
466
+ # outputs=gr.Markdown(),
467
+ # title="Leaderboard",
468
+ # api_name="leaderboard"
469
+ # )
470
 
471
  # simple_predict_interface = gr.Interface(
472
  # fn=simple_prediction,
 
544
  api_name="tool_minmax_processing"
545
  )
546
 
547
+ def augment_image_interface(img, augment_methods, rotate_degrees, noise_level, sharpen_strength):
548
+ if img is None:
549
+ raise gr.Error("No image provided for augmentation. Please upload an image.")
550
+
551
+ # Ensure image is PIL Image and in RGB format
552
+ if not isinstance(img, Image.Image):
553
+ try:
554
+ img = Image.fromarray(img)
555
+ except Exception as e:
556
+ raise gr.Error(f"Could not convert input to PIL Image: {e}")
557
+ if img.mode != 'RGB':
558
+ img = img.convert('RGB')
559
+
560
+ augmented_img, _ = augment_image(img, augment_methods, rotate_degrees, noise_level, sharpen_strength)
561
+ return augmented_img
562
+
563
+ augmentation_tool_interface = gr.Interface(
564
+ fn=augment_image_interface,
565
+ inputs=[
566
+ gr.Image(label="Upload Image to Augment", sources=['upload', 'webcam'], type='pil'),
567
+ gr.CheckboxGroup(["rotate", "add_noise", "sharpen"], label="Augmentation Methods"),
568
+ gr.Slider(0, 360, value=0, step=1, label="Rotate Degrees", visible=True),
569
+ gr.Slider(0, 100, value=0, step=1, label="Noise Level", visible=True),
570
+ gr.Slider(0, 200, value=1, step=1, label="Sharpen Strength", visible=True)
571
+ ],
572
+ outputs=gr.Image(label="Augmented Image", type='pil'),
573
+ title="Image Augmentation Tool",
574
+ description="Apply various augmentation techniques to your image.",
575
+ api_name="augment_image"
576
+ )
577
+
578
  demo = gr.TabbedInterface(
579
  [
580
  detection_model_eval_playground,
 
583
  bit_plane_interface,
584
  ela_interface,
585
  gradient_processing_interface,
586
+ minmax_processing_interface,
587
+ augmentation_tool_interface
588
  ],
589
  [
590
  "Run Ensemble Prediction",
 
593
  "Bit Plane Values",
594
  "Error Level Analysis (ELA)",
595
  "Gradient Processing",
596
+ "MinMax Processing",
597
+ "Image Augmentation"
598
  ],
599
  title="Deepfake Detection & Forensics Tools",
600
  theme=None,