{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "fa37d83b-2543-4b97-a6dd-f54fc56bfd9a", "metadata": {}, "outputs": [], "source": [ "import streamlit as st\n", "import torch\n", "from PIL import Image\n", "import numpy as np\n", "import torch.nn.functional as F" ] }, { "cell_type": "code", "execution_count": 2, "id": "cfa28009-cc5a-42bf-a5a9-b1cbaeb09fa2", "metadata": {}, "outputs": [], "source": [ "# Import custom modules\n", "from models.resnet_model import MalariaResNet50\n", "from gradcam import visualize_gradcam" ] }, { "cell_type": "code", "execution_count": 3, "id": "4dbb399f-01b7-4143-97d0-0fc4b1a33148", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2025-05-28 22:57:39.942 WARNING streamlit.runtime.scriptrunner_utils.script_run_context: Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n", "2025-05-28 22:57:39.948 WARNING streamlit.runtime.scriptrunner_utils.script_run_context: Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n", "2025-05-28 22:57:41.270 \n", " \u001b[33m\u001b[1mWarning:\u001b[0m to view this Streamlit app on a browser, run it with the following\n", " command:\n", "\n", " streamlit run C:\\Users\\HP\\miniconda3\\envs\\pytorch_env\\lib\\site-packages\\ipykernel_launcher.py [ARGUMENTS]\n", "2025-05-28 22:57:41.272 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n", "2025-05-28 22:57:41.274 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n", "2025-05-28 22:57:41.275 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n" ] } ], "source": [ "st.set_page_config(page_title=\"🧬 Malaria Cell Classifier\", layout=\"wide\")\n", "st.title(\"🧬 Malaria Cell Classifier with Grad-CAM\")\n", "st.write(\"Upload a blood smear image and the model will classify it as infected or uninfected, and highlight key regions using Grad-CAM.\")" ] }, { "cell_type": "code", "execution_count": 4, "id": "cfba0e0a-094e-491f-8d7b-abe0643344dc", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2025-05-28 22:57:41.317 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n", "2025-05-28 22:57:41.319 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n", "2025-05-28 22:57:41.320 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n", "2025-05-28 22:57:41.833 Thread 'Thread-3': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n", "2025-05-28 22:57:41.840 Thread 'Thread-3': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Downloading: \"https://download.pytorch.org/models/resnet50-11ad3fa6.pth\" to C:\\Users\\HP/.cache\\torch\\hub\\checkpoints\\resnet50-11ad3fa6.pth\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|█████████████████████████████████████████████████████████████████████████████| 97.8M/97.8M [00:09<00:00, 11.2MB/s]\n", "2025-05-28 22:57:53.490 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n", "2025-05-28 22:57:53.497 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n" ] } ], "source": [ "# Load Model\n", "@st.cache_resource\n", "def load_model():\n", " model = MalariaResNet50(num_classes=2)\n", " model.load_state_dict(torch.load(\"models/malaria_model.pth\", map_location=torch.device('cpu')))\n", " model.eval()\n", " return model\n", "\n", "model = load_model()" ] }, { "cell_type": "code", "execution_count": 5, "id": "11f5d404-6c4c-4484-a11a-acede1e5ab7d", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2025-05-28 22:57:53.586 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n", "2025-05-28 22:57:53.592 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n", "2025-05-28 22:57:53.594 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n", "2025-05-28 22:57:53.600 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n", "2025-05-28 22:57:53.606 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n" ] } ], "source": [ "# Upload Image\n", "uploaded_file = st.file_uploader(\"Choose an image...\", type=[\"jpg\", \"png\", \"jpeg\"])\n", "\n", "if uploaded_file is not None:\n", " # Save uploaded image temporarily\n", " temp_image_path = f\"temp_{uploaded_file.name}\"\n", " with open(temp_image_path, \"wb\") as f:\n", " f.write(uploaded_file.getbuffer())\n", "\n", " # Display original image\n", " image = Image.open(uploaded_file).convert(\"RGB\")\n", " st.image(image, caption=\"Uploaded Image\", use_column_width=True)\n", "\n", " # Predict button\n", " if st.button(\"Predict\"):\n", " with st.spinner(\"Classifying...\"):\n", " # Run prediction and show Grad-CAM\n", " pred_label, confidence = model.predict(temp_image_path, device='cpu', show_image=False)\n", " \n", " st.success(f\"✅ Prediction: **{pred_label}** | Confidence: **{confidence:.2%}**\")\n", "\n", " # Show Grad-CAM\n", " st.subheader(\"🔍 Grad-CAM Visualization\")\n", " visualize_gradcam(model, temp_image_path)" ] }, { "cell_type": "code", "execution_count": null, "id": "8fa9705e-7775-489a-ad09-27e96793dcc3", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.17" } }, "nbformat": 4, "nbformat_minor": 5 }