fizzah90 commited on
Commit
4fc3a6b
·
verified ·
1 Parent(s): d170539

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +79 -74
app.py CHANGED
@@ -1,74 +1,79 @@
1
- import gradio as gr
2
- import numpy as np
3
- from PIL import Image
4
- from ultralytics import YOLO
5
- import time
6
- import os
7
-
8
- # Reduce CPU overhead
9
- os.environ["OMP_NUM_THREADS"] = "1"
10
-
11
- MODEL_PATH = "best (1).pt"
12
-
13
- # Load model once
14
- model = YOLO(MODEL_PATH)
15
-
16
- CLASS_COLORS = {
17
- "good": "green",
18
- "bad": "red"
19
- }
20
-
21
- def predict(image):
22
- if image is None:
23
- return "No image provided"
24
-
25
- # Convert PIL → numpy
26
- img = np.array(image)
27
-
28
- start = time.time()
29
- result = model(img, verbose=False)[0]
30
- latency = (time.time() - start) * 1000
31
-
32
- probs = result.probs.data.cpu().numpy()
33
- class_id = int(np.argmax(probs))
34
- confidence = float(probs[class_id]) * 100
35
-
36
- label = result.names[class_id]
37
-
38
- color = CLASS_COLORS.get(label, "black")
39
-
40
- output = (
41
- f"<h2 style='color:{color}; text-align:center;'>"
42
- f"{label.upper()}</h2>"
43
- f"<p style='text-align:center;'>"
44
- f"Confidence: <b>{confidence:.2f}%</b><br>"
45
- f"Inference Time: {latency:.1f} ms"
46
- f"</p>"
47
- )
48
-
49
- return output
50
-
51
- with gr.Blocks() as demo:
52
- gr.Markdown("# 🔍 AI Simple Defect Classifier")
53
- gr.Markdown(
54
- "Upload or capture an image to classify an industrial part as **GOOD** or **BAD**."
55
- )
56
-
57
- with gr.Row():
58
- image_input = gr.Image(
59
- type="pil",
60
- label="Input Image",
61
- sources=["upload", "webcam"]
62
- )
63
-
64
- output = gr.HTML()
65
-
66
- classify_btn = gr.Button("Run Inspection")
67
-
68
- classify_btn.click(
69
- fn=predict,
70
- inputs=image_input,
71
- outputs=output
72
- )
73
-
74
- demo.launch(theme=gr.themes.Soft(), share=True)
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import numpy as np
3
+ from PIL import Image
4
+ import subprocess
5
+ import sys
6
+
7
+ subprocess.check_call([sys.executable, "-m", "pip", "install", "ultralytics"])
8
+
9
+ from ultralytics import YOLO
10
+ import time
11
+ import os
12
+
13
+ # Reduce CPU overhead
14
+ os.environ["OMP_NUM_THREADS"] = "1"
15
+
16
+ MODEL_PATH = "best (1).pt"
17
+
18
+ # Load model once
19
+ model = YOLO(MODEL_PATH)
20
+
21
+ CLASS_COLORS = {
22
+ "good": "green",
23
+ "bad": "red"
24
+ }
25
+
26
+ def predict(image):
27
+ if image is None:
28
+ return "No image provided"
29
+
30
+ # Convert PIL numpy
31
+ img = np.array(image)
32
+
33
+ start = time.time()
34
+ result = model(img, verbose=False)[0]
35
+ latency = (time.time() - start) * 1000
36
+
37
+ probs = result.probs.data.cpu().numpy()
38
+ class_id = int(np.argmax(probs))
39
+ confidence = float(probs[class_id]) * 100
40
+
41
+ label = result.names[class_id]
42
+
43
+ color = CLASS_COLORS.get(label, "black")
44
+
45
+ output = (
46
+ f"<h2 style='color:{color}; text-align:center;'>"
47
+ f"{label.upper()}</h2>"
48
+ f"<p style='text-align:center;'>"
49
+ f"Confidence: <b>{confidence:.2f}%</b><br>"
50
+ f"Inference Time: {latency:.1f} ms"
51
+ f"</p>"
52
+ )
53
+
54
+ return output
55
+
56
+ with gr.Blocks() as demo:
57
+ gr.Markdown("# 🔍 AI Simple Defect Classifier")
58
+ gr.Markdown(
59
+ "Upload or capture an image to classify an industrial part as **GOOD** or **BAD**."
60
+ )
61
+
62
+ with gr.Row():
63
+ image_input = gr.Image(
64
+ type="pil",
65
+ label="Input Image",
66
+ sources=["upload", "webcam"]
67
+ )
68
+
69
+ output = gr.HTML()
70
+
71
+ classify_btn = gr.Button("Run Inspection")
72
+
73
+ classify_btn.click(
74
+ fn=predict,
75
+ inputs=image_input,
76
+ outputs=output
77
+ )
78
+
79
+ demo.launch(theme=gr.themes.Soft(), share=True)