| import streamlit as st |
| from transformers import pipeline |
| from PIL import Image |
|
|
| |
| pipe = pipeline("image-classification", model="ALM-AHME/convnextv2-large-1k-224-finetuned-BreastCancer-Classification-BreakHis-AH-60-20-20") |
|
|
| |
| def classify_mammogram(img): |
| results = pipe(img) |
| predicted_label = results[0]['label'] |
| confidence = results[0]['score'] |
| |
| if predicted_label == "malignant": |
| if confidence >= 0.8: |
| classification = "Non-suspicious" |
| elif 0.6 <= confidence < 0.8: |
| classification = "High risk" |
| else: |
| classification = "Indeterminate" |
| else: |
| if confidence < 0.4: |
| classification = "Suspicious" |
| elif 0.4 <= confidence < 0.8: |
| classification = "Non-suspicious" |
| else: |
| classification = "No risk" |
|
|
| return f"Predicted Class: {predicted_label}\nClassification: {classification}\nConfidence: {confidence:.2f}" |
|
|
| |
| st.title("Breast Cancer Detection App") |
| st.write("Upload an image of a mammogram(an X-ray image of the breast), and the model will predict whether it is benign or malignant.") |
|
|
|
|
| uploaded_file = st.file_uploader("Upload an image...", type=["jpg", "jpeg", "png"]) |
|
|
| if uploaded_file is not None: |
| image = Image.open(uploaded_file) |
| st.image(image, caption='Uploaded Image.', use_column_width=True) |
| st.write("Classifying...") |
| |
| classification_result = classify_mammogram(image) |
| st.write(classification_result) |
|
|
| st.write( |
| """ |
| <div style='display: flex; justify-content: space-between;'> |
| <div style='width: 48%;'> |
| <p style='font-size: 18px; font-weight: bold;'>Malignant</p> |
| <p style='font-size: 16px;'> |
| Definition: very virulent or infectious. |
| Non-suspicious: The AI is confident that no suspicious signs are present.<br> |
| High risk: The AI is confident that the results are highly suspicious.<br> |
| Indeterminate: The AI is uncertain and not confident in making a definitive classification. |
| </p> |
| </div> |
| <div style='width: 48%;'> |
| <p style='font-size: 18px; font-weight: bold;'>Benign</p> |
| <p style='font-size: 16px;'> |
| Definition: Not harmful in effect |
| Suspicious: AI is not that confident. Further Supervision is needed.<br> |
| Non-Suspicious: AI is confident that there is nothing to worry about.<br> |
| No Risk: AI is confident. No direct supervision is needed. |
| </p> |
| </div> |
| </div> |
| """, |
| unsafe_allow_html=True |
| ) |
|
|
| |
| st.markdown("### Learn More About Breast Cancer") |
| st.markdown(""" |
| - [Breast Cancer Overview](https://www.who.int/news-room/fact-sheets/detail/breast-cancer) |
| - [Preventing Breast Cancer](https://www.cancer.gov/types/breast/patient/breast-prevention-pdq) |
| """) |
| |
| theme = st.get_option("theme.base") |
|
|
| |
| if theme == "light": |
| button_bg_color = "#2c2e35" |
| button_border_color = "1px solid black" |
| button_text_color = "black" |
| else: |
| button_bg_color = "#2c2e35" |
| button_border_color = "1px solid #fff" |
| button_text_color = "#fff" |
|
|
| |
| st.markdown(f""" |
| <style> |
| .rounded-button {{ |
| display: inline-block; |
| padding: 7px 15px; |
| font-size: 16px; |
| color: {button_text_color}; |
| background-color: {button_bg_color}; |
| border: {button_border_color}; |
| border-radius: 7px; |
| text-align: center; |
| text-decoration: none; |
| cursor: default; |
| }} |
| </style> |
| <div style="text-align: center;"> |
| <div class="rounded-button"> |
| Created by: Samuel Ameyaw |
| </div> |
| </div> |
| """, unsafe_allow_html=True) |
|
|