В этом блоге я расскажу, как я создаю веб-сайт обнаружения рака легких с помощью Streamlit с использованием сверточных нейронных сетей.

Что такое стримлит?

  • Streamlit — это бесплатная платформа с открытым исходным кодом для быстрого создания красивых веб-приложений для машинного обучения и обработки данных и обмена ими. Это библиотека на основе Python, специально разработанная для инженеров по машинному обучению.
  • Исследователи данных или инженеры по машинному обучению не являются веб-разработчиками, и они не заинтересованы в том, чтобы тратить недели на изучение использования этих фреймворков для создания веб-приложений.

Как использовать Стримлит

  1. Установите Anaconda и создайте свою среду
  2. Откройте терминал
  3. Введите эту команду в терминале, чтобы установить Streamlit:
pip install streamlit

Streamlit Предоставляет простые в использовании компоненты, которым можно легко следовать, прочитав их Документацию.

Как запустить код Streamlit

streamlit run file_name.py

Сверточная нейронная сеть

Архитектура CNN основана на слоях свертки. Слои свертки получают входные данные, преобразуют данные из изображения и передают их в качестве входных данных следующему слою. Преобразование известно как операция свертки. Нам нужно определить количество фильтров для каждого слоя свертки.

Примечание: – Вы можете узнать о том, как я обучал свою модель машинного обучения, в следующем посте на среднем уровне [Обучение модели]

Работаем над файлом app.py для Streamlit

Как упоминалось выше, мы закончили обучение модели, и следующим шагом будет использование этой модели для нашего веб-приложения.

Скачать модель здесь

Мы должны воссоздать все шаги предварительной обработки данных здесь после импорта изображения, как мы делали ранее, чтобы передать тестовый набор в модель для получения прогноза. Для предварительной обработки нам нужно импортировать класс tensorflow.keras.preprocessing.image.

  1. Импортируйте изображение и задайте размеры как (500,500), а цветовой канал — как оттенки серого.
  2. Преобразуйте изображение в массив, масштабируйте его, разделив на 255, и увеличьте измерение по оси = 0, так как наша модель принимает 4 измерения, как показано ранее.
  3. Наконец, давайте предскажем случай!

Давайте проведем полевые испытания нашей модели с моими изображениями компьютерной томографии

import pickle
import streamlit as st
import numpy as np
import pyparsing
import pandas as pd
import matplotlib as plt
import seaborn as sns
from PIL import Image 
import tensorflow
from tensorflow.keras.models import load_model
import tensorflow as tf
from tempfile import NamedTemporaryFile
from tensorflow.keras.preprocessing import image 
from streamlit_option_menu import option_menu

st.set_page_config(page_title='Lung Cancer Detection')

st.set_option('deprecation.showfileUploaderEncoding', False)
@st.cache(allow_output_mutation=True)

def loading_model():
    fp = "models/keras_model.h5"
    model_loader = load_model(fp)
    return model_loader

cnn = loading_model()
st.write("""
# Lung Cancer Detection using CNN and CT-Scan Images
""")



temp = st.file_uploader("Upload CT-Scan Image",type=['png','jpeg','jpg'])
if temp is not None:
    file_details = {"FileName":temp.name,"FileType":temp.type,"FileSize":temp.size}
    st.write(file_details)
    #temp = temp.decode()

buffer = temp
temp_file = NamedTemporaryFile(delete=False)
if buffer:
    temp_file.write(buffer.getvalue())
    st.write(image.load_img(temp_file.name))


if buffer is None:
    st.text("Oops! that doesn't look like an image. Try again.")

else:
    ved_img = image.load_img(temp_file.name, target_size=(224, 224))

    # Preprocessing the image
    pp_ved_img = image.img_to_array(ved_img)
    pp_ved_img = pp_ved_img/255
    pp_ved_img = np.expand_dims(pp_ved_img, axis=0)

    #predict
    hardik_preds= cnn.predict(pp_ved_img)
    print(hardik_preds[0])

    if hardik_preds[0][0]>= 0.5:
        out = ('I am {:.2%} percent confirmed that this is a Normal Case'.format(hardik_preds[0][0]))
        st.balloons()
        st.success(out)

    else: 
        out = ('I am {:.2%} percent confirmed that this is a Lung Cancer Case'.format(1-hardik_preds[0][0]))
        st.error(out)



    image = Image.open(temp)
    st.image(image,use_column_width=True)

hide_st_style = """
            <style>
            #MainMenu {visibility: hidden;}
            footer {visibility: hidden;}
            header {visibility: hidden;}
            </style>
            """
st.markdown(hide_st_style, unsafe_allow_html=True)  

Вывод скриншотов:-

Развертывание веб-сайта в облаке Streamlit

  1. Войдите в свою учетную запись Streamlit, используя свои учетные данные github.
  2. Отправьте файлы приложения на github и сохраните репозиторий общедоступным.

3. Нажмите «Развернуть». Развертывание вашего приложения в облаке займет несколько минут.

Вы можете обратиться к моему репозиторию github, если у вас возникнут какие-либо проблемы, связанные с проектом.

[Ссылка на гитхаб]

Ссылка на развертывание моего приложения, чтобы вы могли поиграть

https://vedantkadam-lung-cancer-cnn-app-1hwc8w.streamlit.app/

Надеюсь, вам понравился проект, вы можете сделать несколько проектов, подобных этому, используя базовые концепции и добавляя свое собственное творчество 🧑‍💻🤖.