KN2024DockerFinal / pages /🔬 Scan.py
datnguyentien204's picture
Upload 338 files
8e0b903 verified
raw
history blame
2.72 kB
# Contents of ~/my_app/pages/🫁 LungCancerDetection.py
import streamlit as st
import cv2
import pydicom
import numpy as np
from PIL import Image
import os
import sys
from streamlit_image_zoom import image_zoom
st.markdown("<h1 style='text-align: center;'>Welcome to Scan Pages</h1>", unsafe_allow_html=True)
def convert_dcm_to_png(input_image_path, output_image_path='a.png'):
ds = pydicom.dcmread(input_image_path)
img = ds.pixel_array
img = cv2.normalize(img, None, 0, 255, cv2.NORM_MINMAX).astype(np.uint8)
cv2.imwrite(output_image_path, img)
with st.sidebar:
st.markdown("## Upload your scans")
uploaded_files = st.file_uploader("Choose scans...", type=["jpg", "jpeg", "png", "dicom"], accept_multiple_files=True)
with st.expander("Hướng dẫn"):
st.markdown("1. Tải lên ảnh Scan của bạn bằng cách ấn vào **Browse files** hoặc có thể **Kéo và thả** file ảnh của bạn vào phần browse files. Các định dạng cho phép bao gồm **DICOM, PNG, JPG, JPEG**, các định dạng khác cần phải chuyển về các định dạng được chấp nhận.")
st.markdown("2. Sau đó ảnh sẽ tự được mở lên")
st.markdown("3. Để phóng to ảnh, bạn chuyển chuột trái vào trong ảnh, dùng lăn chuột để thực hiện phóng to- thu nhỏ ảnh")
st.markdown("4. Để kéo xuống xem ảnh phía dưới, bạn di chuột ra ngoài vùng ảnh và dùng lăn chuột cuộn trang như bình thường.")
if uploaded_files:
for uploaded_file in uploaded_files:
file_type = uploaded_file.name.split('.')[-1].lower()
if file_type in ["jpg", "jpeg", "png"]:
img = Image.open(uploaded_file)
img.save('temp_image.png')
st.markdown("<div style='display: flex; justify-content: center;'>", unsafe_allow_html=True)
width, height = img.size
image_zoom(img, mode="both",size=(int(width/2),int(height/2)), keep_aspect_ratio=True, zoom_factor=4.0, increment=0.2)
st.markdown("</div>", unsafe_allow_html=True)
elif file_type in ["dicom", "dcm"]:
convert_dcm_to_png(uploaded_file)
img = Image.open('a.png').convert('RGB')
img.save('temp_image.png')
st.markdown("<div style='display: flex; justify-content: center;'>", unsafe_allow_html=True)
width, height = img.size
image_zoom(img, mode="both",size=(width//4, height//4), keep_aspect_ratio=True, zoom_factor=4.0, increment=0.2)
st.markdown("</div>", unsafe_allow_html=True)
else:
st.info("Please upload some scans to view them.")