Да, это все о Streamlit, пользовательском интерфейсе, который написан исключительно на чистом коде Python и позволяет вам видеть результат прямо в веб-браузере, а не в консоли IDE. Изюминкой является то, что он поддерживает все широко используемые визуализации данных, такие как Matplotlib, Altair, Vega-lite и другие. Более того, сообщество Streamlit очень открыто для обсуждения новых функций и поддержки. Наконец, развернуть окончательный вариант продукта довольно просто, поскольку он коррелирует с репозиторием вашего проекта на GitHub.
Эта статья содержит пошаговое руководство по созданию простого приложения для распознавания тем Streamlit ML и несколько полезных советов по настройке его дизайна.
Шаг 1. Начало работы
Во-первых, вам нужно установить библиотеку.
pip install streamlit
Затем вы создаете каталог my_streamlit_app (или любое другое имя) и добавляете файл My_app.py, куда вы импортируете все необходимые библиотеки. Наше приложение предсказывает тему.
import streamlit as st import topic_recognition
Я уже обучил свой классификатор Multi-label с помощью Scikit-learn и векторизатора tfidf. Вот - аналогичная проблема подробно объяснена. У меня есть три отдельных файла: один для создания и подгонки модели; один для предварительной обработки входящего текста и прогнозирования темы, и еще один с моим приложением Streamlit. В приложении я импортировал файл, в котором будет предсказываться тема для текста, вводимого пользователем. Набор данных, обученная модель, словарь и бинаризатор сохраняются в каталоге my_streamlit_app.
Шаг 2. Создайте приложение
from PIL import Image st.title("Topic recognition app :memo:") img = Image.open("Image.jpg") st.image(img) st.subheader("This tool can predict the topic of your text.")
Синтаксис Streamlit довольно прост. Он поддерживает уценку, можно вставлять смайлы и включать вполне стандартные для таких библиотек виджеты, как слайдер, переключатели, флажки, поля выбора, а также видео и аудио. Полное руководство по интерактивным функциям можно найти в его документации.
Теперь нам нужно добавить текстовую область для ввода текста пользователем и кнопку «Отправить».
text_input = st.text_input(label='Your text') submit_button = st.button(label='Submit', value="Type here...")
Вот что увидит пользователь:
Кроме того, вы можете загрузить текст пользователя, используя опцию загрузки файла.
pip install PyMuPDF
После того, как вы установили пакеты для чтения файла pdf, откройте и прочтите его в своем приложении.
import fitz uploaded_pdf = st.file_uploader("Load your pdf file: ", type=['pdf']) if uploaded_pdf is not None: with fitz.open(stream=uploaded_pdf.read(), filetype="pdf") as doc: text_input = "" for page in doc: text_input += page.getText() st.write(text_input) doc.close() else: st.write("File not found")
Результат будет таким:
Если вы хотите настроить фон, вы можете добавить эти функции и загрузить свое изображение.
import base64 @st.cache( allow_output_mutation=True ) def get_base64_of_bin_file(bin_file): with open( bin_file, 'rb' ) as f: data = f.read() return base64.b64encode( data ).decode() def set_png_as_page_bg(png_file): bin_str = get_base64_of_bin_file(png_file) page_bg_img = ''' <style> body { background-image: url("data:image/png;base64,%s"); background-size: cover; } </style> '''% bin_str st.markdown(page_bg_img, unsafe_allow_html=True) return set_png_as_page_bg('background.png')
Вы также можете выбрать одну из тем оформления или индивидуальную. Больше информации в блоге Streamlit.
Шаг 3. Добавьте свою модель
Просто добавьте одну строчку кода:
st.write('Predicted topic: {topic}.'.format(topic= topic_recognition.predict_topic(text_input)))
Мы также можем добавить некоторые функции редактирования, чтобы сделать наши результаты более читабельными.
- Markdown
st.write('Predicted topic: **{topic}**.'.format(topic= topic_recognition.predict_topic(text_input)))
2. Текстовая аннотация
from __init__ import annotated_text def annotation(text): topics = topic_recognition.predict_topic(text) text_with_annotations = [] for i in range(0,len(topics)): topic = topics[i] text_with_annotations.append((topic, "", "#8ef")) annotated_text(50,"Predicted topic: ", *text_with_annotations) annotation(text_input)
Полное руководство по работе с аннотированным текстом можно найти здесь. Streamlit работает с компонентами JavaScript и HTML, как мы могли видеть, и которые могут отображаться в ваших приложениях.
Шаг 4. Запуск приложения
Чтобы запустить приложение в браузере, просто введите в терминале:
streamlit run app.py
и ваше приложение будет запускаться на http: // localhost: 8501.
Шаг 5. Развертывание
После того, как вы добавили все необходимые функции, вы можете развернуть свое приложение. Для этого вам нужно щелкнуть мышью в правом верхнем углу и выбрать «Развернуть это приложение».
После того, как вы ее нажмете, вы перейдете на https://share.streamlit.io/, где вы можете авторизоваться, используя свою учетную запись GitHub, и выбрать имя репозитория или вставить ссылку в свой файл app.py. Чтобы развернуть приложение, вам нужен файл requirements.txt со списком всех библиотек, которые необходимо установить. В моем случае этот файл выглядит так:
О том, как установить требования к дальнейшей упаковке, вы можете прочитать здесь.
Вы также можете развернуть свое приложение с помощью Docker и Heroku.
Вывод:
Плюсы использования Streamlit:
- довольно простой интуитивно понятный синтаксис
- поддержка компонентов HTML и JavaScript
- активное сообщество
- быстрое добавление новых функций
- покрывают большинство виджетов пользовательского интерфейса
- поддерживать несколько интерактивных визуализаций
Минусы:
- невозможность встраивать собственные куски кода, следовательно, невозможно уйти далеко от стандартного интерфейса Streamlit
- В моем приложении было несколько моделей, и я мог развернуть его как через docker, так и через git, однако модели в общей версии ничего не предсказывали. Я хотел бы дополнительно изучить этот вопрос и буду рад услышать предложения.
В общем, большое спасибо за чтение. Пожалуйста, оставляйте комментарии, если у вас есть какие-либо вопросы, и аплодируйте, если вам понравилась эта история.