File size: 2,912 Bytes
a326b94 3bb1400 6ea5ee2 3bb1400 0000f4a 3bb1400 005d8cf f0f1078 3bb1400 0000f4a 3bb1400 0000f4a 3bb1400 0000f4a 3bb1400 6ea5ee2 3bb1400 6ea5ee2 3bb1400 6ea5ee2 3bb1400 |
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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
import streamlit as st
from transformers import pipeline
import torch
from PIL import Image, ImageDraw
import io
st.set_page_config(page_title="Détection de Fractures Osseuses", layout="wide")
@st.cache_resource
def load_model():
return pipeline("object-detection", model="D3STRON/bone-fracture-detr")
def draw_boxes(image, predictions):
draw = ImageDraw.Draw(image)
for pred in predictions:
box = pred['box']
label = f"{pred['label']} ({pred['score']:.2%})"
# Draw bounding box
draw.rectangle(
[(box['xmin'], box['ymin']), (box['xmax'], box['ymax'])],
outline="red",
width=3
)
# Draw label background
text_bbox = draw.textbbox((box['xmin'], box['ymin']), label)
draw.rectangle(text_bbox, fill="red")
# Draw label text
draw.text(
(box['xmin'], box['ymin']),
label,
fill="white"
)
return image
def main():
st.title("🦴 Détecteur de Fractures Osseuses")
st.write("Téléchargez une radiographie pour détecter les fractures osseuses.")
pipe = load_model()
uploaded_file = st.file_uploader(
"Choisissez une image de radiographie",
type=['png', 'jpg', 'jpeg']
)
conf_threshold = st.slider(
"Seuil de confiance",
min_value=0.0,
max_value=1.0,
value=0.5,
step=0.05
)
if uploaded_file:
col1, col2 = st.columns(2)
# Original image
image = Image.open(uploaded_file)
col1.header("Image originale")
col1.image(image)
# Process image
with st.spinner("Analyse en cours..."):
predictions = pipe(image)
# Filter predictions based on confidence threshold
filtered_preds = [
pred for pred in predictions
if pred['score'] >= conf_threshold
]
# Draw boxes on a copy of the image
result_image = image.copy()
result_image = draw_boxes(result_image, filtered_preds)
# Display results
col2.header("Résultats de la détection")
col2.image(result_image)
# Display detailed predictions
if filtered_preds:
st.subheader("Détails des détections")
for pred in filtered_preds:
st.write(
f"• Type: {pred['label']} - "
f"Confiance: {pred['score']:.2%}"
)
else:
st.warning(
"Aucune fracture détectée avec le seuil de confiance actuel. "
"Essayez de baisser le seuil pour plus de résultats."
)
if __name__ == "__main__":
main() |