В этом блоге я расскажу, как я создаю веб-сайт обнаружения рака легких с помощью Streamlit с использованием сверточных нейронных сетей.
Что такое стримлит?
- Streamlit — это бесплатная платформа с открытым исходным кодом для быстрого создания красивых веб-приложений для машинного обучения и обработки данных и обмена ими. Это библиотека на основе Python, специально разработанная для инженеров по машинному обучению.
- Исследователи данных или инженеры по машинному обучению не являются веб-разработчиками, и они не заинтересованы в том, чтобы тратить недели на изучение использования этих фреймворков для создания веб-приложений.
Как использовать Стримлит
- Установите Anaconda и создайте свою среду
- Откройте терминал
- Введите эту команду в терминале, чтобы установить Streamlit:
pip install streamlit
Streamlit Предоставляет простые в использовании компоненты, которым можно легко следовать, прочитав их Документацию.
Как запустить код Streamlit
streamlit run file_name.py
Сверточная нейронная сеть
Архитектура CNN основана на слоях свертки. Слои свертки получают входные данные, преобразуют данные из изображения и передают их в качестве входных данных следующему слою. Преобразование известно как операция свертки. Нам нужно определить количество фильтров для каждого слоя свертки.
Примечание: – Вы можете узнать о том, как я обучал свою модель машинного обучения, в следующем посте на среднем уровне [Обучение модели]
Работаем над файлом app.py для Streamlit
Как упоминалось выше, мы закончили обучение модели, и следующим шагом будет использование этой модели для нашего веб-приложения.
Мы должны воссоздать все шаги предварительной обработки данных здесь после импорта изображения, как мы делали ранее, чтобы передать тестовый набор в модель для получения прогноза. Для предварительной обработки нам нужно импортировать класс tensorflow.keras.preprocessing.image
.
- Импортируйте изображение и задайте размеры как
(500,500)
, а цветовой канал — как оттенки серого. - Преобразуйте изображение в массив, масштабируйте его, разделив на 255, и увеличьте измерение по оси = 0, так как наша модель принимает 4 измерения, как показано ранее.
- Наконец, давайте предскажем случай!
Давайте проведем полевые испытания нашей модели с моими изображениями компьютерной томографии
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
- Войдите в свою учетную запись Streamlit, используя свои учетные данные github.
- Отправьте файлы приложения на github и сохраните репозиторий общедоступным.
3. Нажмите «Развернуть». Развертывание вашего приложения в облаке займет несколько минут.
Вы можете обратиться к моему репозиторию github, если у вас возникнут какие-либо проблемы, связанные с проектом.
Ссылка на развертывание моего приложения, чтобы вы могли поиграть
https://vedantkadam-lung-cancer-cnn-app-1hwc8w.streamlit.app/
Надеюсь, вам понравился проект, вы можете сделать несколько проектов, подобных этому, используя базовые концепции и добавляя свое собственное творчество 🧑💻🤖.