Mohaddz commited on
Commit
3c0bacb
·
verified ·
1 Parent(s): 047c754

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -43
app.py CHANGED
@@ -1,46 +1,23 @@
1
  import gradio as gr
2
  import numpy as np
3
  from PIL import Image, ImageDraw
4
- from transformers import TFSegformerForSemanticSegmentation
5
- import tensorflow as tf
6
-
7
- # Load models from Hugging Face
8
- part_seg_model = TFSegformerForSemanticSegmentation.from_pretrained("Mohaddz/huggingCars")
9
- damage_seg_model = TFSegformerForSemanticSegmentation.from_pretrained("Mohaddz/DamageSegMohaddz/DamageSeg")
10
 
11
  # Define your labels
12
- part_labels = ["front-bumper", "fender", "hood", "door", "trunk", "cars-8I1q"] # Add all your part labels
13
- damage_labels = ["dent", "scratch", "misalignment", "crack", "etc"] # Add all your damage labels
14
-
15
- def preprocess_image(image):
16
- # Resize the image
17
- image = tf.image.resize(image, (512, 512))
18
- # Normalize the image
19
- image = tf.keras.applications.imagenet_utils.preprocess_input(image)
20
- return tf.expand_dims(image, 0) # Add batch dimension
21
-
22
- def inference_seg(model, image):
23
- outputs = model(image, training=False)
24
- logits = outputs.logits
25
- mask = tf.argmax(logits, axis=-1)
26
- return mask.numpy().squeeze()
27
-
28
- def inference_part_seg(image):
29
- preprocessed_image = preprocess_image(image)
30
- return inference_seg(part_seg_model, preprocessed_image)
31
 
32
- def inference_damage_seg(image):
33
- preprocessed_image = preprocess_image(image)
34
- return inference_seg(damage_seg_model, preprocessed_image)
 
 
 
 
35
 
36
  def combine_masks(part_mask, damage_mask):
37
  part_damage_pairs = []
38
  for part_id, part_name in enumerate(part_labels):
39
- if part_name == "cars-8I1q":
40
- continue
41
  for damage_id, damage_name in enumerate(damage_labels):
42
- if damage_name == "etc":
43
- continue
44
  part_binary = (part_mask == part_id)
45
  damage_binary = (damage_mask == damage_id)
46
  intersection = np.logical_and(part_binary, damage_binary)
@@ -59,22 +36,20 @@ def create_one_hot_vector(part_damage_pairs):
59
  return vector
60
 
61
  def visualize_results(image, part_mask, damage_mask):
62
- img = Image.fromarray((image * 255).astype('uint8'))
63
  draw = ImageDraw.Draw(img)
64
 
65
- for i in range(img.width):
66
- for j in range(img.height):
67
  part = part_labels[part_mask[j, i]]
68
  damage = damage_labels[damage_mask[j, i]]
69
- if part != "cars-8I1q" and damage != "etc":
70
- draw.point((i, j), fill="red")
71
 
72
  return img
73
 
74
  def process_image(image):
75
- # Perform inference
76
- part_mask = inference_part_seg(image)
77
- damage_mask = inference_damage_seg(image)
78
 
79
  # Combine masks
80
  part_damage_pairs = combine_masks(part_mask, damage_mask)
@@ -99,12 +74,12 @@ iface = gr.Interface(
99
  fn=gradio_interface,
100
  inputs=gr.Image(type="numpy"),
101
  outputs=[
102
- gr.Image(type="pil", label="Detected Damage"),
103
  gr.Textbox(label="Damage Description"),
104
  gr.Textbox(label="One-hot Encoded Vector")
105
  ],
106
- title="Car Damage Assessment",
107
- description="Upload an image of a damaged car to get an assessment of the damage."
108
  )
109
 
110
  iface.launch()
 
1
  import gradio as gr
2
  import numpy as np
3
  from PIL import Image, ImageDraw
 
 
 
 
 
 
4
 
5
  # Define your labels
6
+ part_labels = ["front-bumper", "fender", "hood", "door", "trunk"]
7
+ damage_labels = ["dent", "scratch", "misalignment", "crack"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
+ def mock_inference(image):
10
+ # This function mocks the segmentation model output
11
+ # It randomly assigns labels to different parts of the image
12
+ height, width = image.shape[:2]
13
+ part_mask = np.random.randint(0, len(part_labels), (height, width))
14
+ damage_mask = np.random.randint(0, len(damage_labels), (height, width))
15
+ return part_mask, damage_mask
16
 
17
  def combine_masks(part_mask, damage_mask):
18
  part_damage_pairs = []
19
  for part_id, part_name in enumerate(part_labels):
 
 
20
  for damage_id, damage_name in enumerate(damage_labels):
 
 
21
  part_binary = (part_mask == part_id)
22
  damage_binary = (damage_mask == damage_id)
23
  intersection = np.logical_and(part_binary, damage_binary)
 
36
  return vector
37
 
38
  def visualize_results(image, part_mask, damage_mask):
39
+ img = Image.fromarray(image)
40
  draw = ImageDraw.Draw(img)
41
 
42
+ for i in range(0, img.width, 10): # Sample every 10th pixel for efficiency
43
+ for j in range(0, img.height, 10):
44
  part = part_labels[part_mask[j, i]]
45
  damage = damage_labels[damage_mask[j, i]]
46
+ draw.point((i, j), fill="red")
 
47
 
48
  return img
49
 
50
  def process_image(image):
51
+ # Mock inference
52
+ part_mask, damage_mask = mock_inference(image)
 
53
 
54
  # Combine masks
55
  part_damage_pairs = combine_masks(part_mask, damage_mask)
 
74
  fn=gradio_interface,
75
  inputs=gr.Image(type="numpy"),
76
  outputs=[
77
+ gr.Image(type="pil", label="Detected Damage (Mocked)"),
78
  gr.Textbox(label="Damage Description"),
79
  gr.Textbox(label="One-hot Encoded Vector")
80
  ],
81
+ title="Car Damage Assessment (Demo)",
82
+ description="Upload an image of a damaged car to get a mocked assessment of the damage. Note: This is a demo using random predictions, not actual model inference."
83
  )
84
 
85
  iface.launch()