Zkone's picture
Update app.py
f407189 verified
Raw
History Blame Contribute Delete
1.74 kB
import torch
import torch.nn as nn
from torchvision import transforms, models
from PIL import Image
import gradio as gr
# ── Charger le modèle ──
device = torch.device("cpu")
model = models.efficientnet_b0()
model.classifier = nn.Sequential(nn.Dropout(0.2), nn.Linear(1280, 2))
model.load_state_dict(torch.load("efficientnet_mines_V1.pth", map_location=device))
model.to(device)
model.eval()
classes = ['extractions_illegales', 'pas_extraction_illegale']
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]),
])
def predire(image):
image = Image.fromarray(image).convert("RGB")
tenseur = transform(image).unsqueeze(0).to(device)
with torch.no_grad():
output = model(tenseur)
proba = torch.softmax(output, dim=1)
prediction = proba.argmax(1).item()
confiance = proba[0][prediction].item() * 100
if confiance < 70:
return {
"Classe": "INDETERMINE",
"Confiance": f"{confiance:.1f}%",
"Detail": "Image non reconnue. Veuillez uploader une image de site minier."
}
classe = classes[prediction]
resultat = "ILLEGALE" if "illegale" in classe.lower() else "LEGALE"
return {
"Classe": resultat,
"Confiance": f"{confiance:.1f}%",
"Detail": classe
}
interface = gr.Interface(
fn=predire,
inputs=gr.Image(label="Uploader une image de mine"),
outputs=gr.JSON(label="Résultat"),
title="Detection de Mines Illegales",
description="Uploadez une image pour savoir si c'est une extraction illegale ou non."
)
interface.launch()