Spaces:
Sleeping
Sleeping
File size: 1,728 Bytes
4fc3a6b |
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 |
import gradio as gr
import numpy as np
from PIL import Image
import subprocess
import sys
subprocess.check_call([sys.executable, "-m", "pip", "install", "ultralytics"])
from ultralytics import YOLO
import time
import os
# Reduce CPU overhead
os.environ["OMP_NUM_THREADS"] = "1"
MODEL_PATH = "best (1).pt"
# Load model once
model = YOLO(MODEL_PATH)
CLASS_COLORS = {
"good": "green",
"bad": "red"
}
def predict(image):
if image is None:
return "No image provided"
# Convert PIL → numpy
img = np.array(image)
start = time.time()
result = model(img, verbose=False)[0]
latency = (time.time() - start) * 1000
probs = result.probs.data.cpu().numpy()
class_id = int(np.argmax(probs))
confidence = float(probs[class_id]) * 100
label = result.names[class_id]
color = CLASS_COLORS.get(label, "black")
output = (
f"<h2 style='color:{color}; text-align:center;'>"
f"{label.upper()}</h2>"
f"<p style='text-align:center;'>"
f"Confidence: <b>{confidence:.2f}%</b><br>"
f"Inference Time: {latency:.1f} ms"
f"</p>"
)
return output
with gr.Blocks() as demo:
gr.Markdown("# 🔍 AI Simple Defect Classifier")
gr.Markdown(
"Upload or capture an image to classify an industrial part as **GOOD** or **BAD**."
)
with gr.Row():
image_input = gr.Image(
type="pil",
label="Input Image",
sources=["upload", "webcam"]
)
output = gr.HTML()
classify_btn = gr.Button("Run Inspection")
classify_btn.click(
fn=predict,
inputs=image_input,
outputs=output
)
demo.launch(theme=gr.themes.Soft(), share=True)
|