File size: 1,890 Bytes
a326b94
f0f1078
7b58439
0000f4a
 
 
f0f1078
0000f4a
005d8cf
 
f0f1078
b5fbdeb
 
 
d7739b8
b5fbdeb
0000f4a
f0f1078
0000f4a
 
 
 
3cabc2b
d7739b8
f0f1078
 
 
 
0000f4a
3cabc2b
 
f0f1078
 
 
 
 
 
 
3cabc2b
f5a9b22
 
 
 
3cabc2b
b5fbdeb
3cabc2b
f5a9b22
3cabc2b
f0f1078
f5a9b22
3cabc2b
b5fbdeb
3cabc2b
f0f1078
3cabc2b
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
import streamlit as st
from transformers import pipeline
from PIL import Image
import numpy as np
import cv2

st.set_page_config(page_title="Détection de fractures osseuses")
st.title("Détection de fractures osseuses par rayons X")

@st.cache_resource
def load_model():
    return pipeline(
        "object-detection",
        model="anirban22/detr-resnet-50-med_fracture",
        threshold=0.1
    )

model = load_model()

uploaded_file = st.file_uploader("Téléchargez une image radiographique", type=["jpg", "jpeg", "png"])

if uploaded_file:
    # Convert uploaded file to PIL Image
    image = Image.open(uploaded_file).convert('RGB')
    if image.size[0] > 800:
        ratio = 800.0 / image.size[0]
        size = (800, int(image.size[1] * ratio))
        image = image.resize(size, Image.Resampling.LANCZOS)
    
    # Pass PIL Image directly to model
    predictions = model(image)
    
    col1, col2 = st.columns(2)
    
    with col1:
        st.image(image, caption="Image originale", use_container_width=True)
    
    with col2:
        img_array = np.array(image)
        for pred in predictions:
            box = pred['box']
            score = pred['score']
            x1, y1, x2, y2 = [int(i) for i in [box['xmin'], box['ymin'], box['xmax'], box['ymax']]]
            cv2.rectangle(img_array, (x1, y1), (x2, y2), (255, 0, 0), 3)
            text = f"Fracture: {score:.2f}"
            cv2.putText(img_array, text, (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 0), 2)
        
        st.image(img_array, caption="Détection des fractures", use_container_width=True)
    
    if predictions:
        st.subheader(f"🚨 {len(predictions)} fractures détectées:")
        for idx, pred in enumerate(predictions, 1):
            st.warning(f"Fracture {idx}: Confiance {pred['score']*100:.1f}%")
    else:
        st.warning("⚠️ Aucune fracture détectée")