Spaces:
Runtime error
Runtime error
| from fastai.vision.all import * | |
| from io import BytesIO | |
| from PIL import Image | |
| from utils.cam import grad_cam | |
| from utils.tfms import AlbTransform, get_augs | |
| import requests | |
| import streamlit as st | |
| """ | |
| # Histopathologic Cancer Detection | |
| ## Is this an cancerous cell? | |
| this is a web app to predict whether a cell is cancerous or not. | |
| """ | |
| # List of example image image paths | |
| images = { | |
| "Image 1": "example/c2a8ef295e49b8012e5bc83917a305057eaa1932.tif", | |
| "Image 2": "example/87aed2dd32c7fe17c3af56878abd62eb5f37f925.tif", | |
| "Image 3": "example/4ba0d1c62230781533c2df1d95e5b4c8f5b650a3.tif", | |
| "Image 4": "example/a24ce148f6ffa7ef8eefb4efb12ebffe8dd700da.tif", | |
| "Image 5": "example/d2dd0de8e583a5475a07c2f92fa3f06c7fabcd42.tif", | |
| # add more images as needed | |
| } | |
| def predict(learn, img): | |
| img = PILImage.create(img) | |
| pred, key, probs = learn.predict(img) | |
| grad_img = grad_cam(learn, img, pred) | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| st.image(img, caption='Original Image', use_column_width=True) | |
| with col2: | |
| st.image(grad_img, caption='Grad-CAM Image', use_column_width=True) | |
| # st.write(learn_inf.predict(img)) | |
| f""" | |
| ## This **{'is ' if pred == '1' else 'is not'}** an cancerous cell. | |
| ### Rediction result: {pred} | |
| ### Probability of {pred}: {probs[key].item()*100: .2f}% | |
| """ | |
| path = "./" | |
| learn_inf = load_learner(path + "resnet50.pkl") | |
| option = st.radio("", ["Upload Image", "Image URL", "Download Example Image", "Example"]) | |
| if option == "Upload Image": | |
| uploaded_file = st.file_uploader("Please upload an image.") | |
| if uploaded_file is not None: | |
| predict(learn_inf, uploaded_file) | |
| elif option == "Image URL": | |
| url = st.text_input("Please input a url.") | |
| if url != "": | |
| try: | |
| response = requests.get(url) | |
| pil_img = PILImage.create(BytesIO(response.content)) | |
| predict(learn_inf, pil_img) | |
| except: | |
| st.text("Problem reading image from", url) | |
| elif option == "Download Example Image": | |
| # Create columns for the images | |
| cols = st.columns(len(images)) | |
| # Initialize selected_image in session state if it doesn't exist | |
| if 'selected_image' not in st.session_state: | |
| st.session_state['selected_image'] = None | |
| for i, (img_name, img_path) in enumerate(images.items()): | |
| # Open the image file | |
| img = Image.open(img_path) | |
| # Display the image in a column | |
| cols[i].image(img, caption=img_name, use_column_width=True) | |
| # Create a button for selecting the image | |
| if cols[i].button(f"Select {img_name}", key=img_name): | |
| st.session_state['selected_image'] = img_path | |
| # If an image has been selected, show the download button | |
| if st.session_state['selected_image'] is not None: | |
| # Open the selected image file | |
| img = Image.open(st.session_state['selected_image']) | |
| # Convert the image to a byte array | |
| img_byte_arr = io.BytesIO() | |
| img.save(img_byte_arr, format='PNG') | |
| img_byte_arr = img_byte_arr.getvalue() | |
| # Create the download button for the selected image | |
| st.download_button( | |
| label="Download selected image", | |
| data=img_byte_arr, | |
| file_name="selected_image.png", | |
| mime="image/png", | |
| ) | |
| else: | |
| option_1 = st.selectbox( | |
| 'Example Prediction', | |
| ('Positive Image', 'Negative Image')) | |
| if option_1 == 'Positive Image': | |
| predict(learn_inf, img='example/c2a8ef295e49b8012e5bc83917a305057eaa1932.tif') | |
| elif option_1 == 'Negative Image': | |
| predict(learn_inf, img='example/87aed2dd32c7fe17c3af56878abd62eb5f37f925.tif') | |