Как развернуть модель Roboflow в Streamlit
Во Части 2 нашей серии руководств мы познакомили вас с Roboflow для обучения модели с вашими собственными изображениями. Теперь давайте двигаться дальше:
Создание веб-приложения Streamlit для обнаружения объектов изображения с помощью модели Roboflow
Streamlit — платформа приложений с открытым исходным кодом для групп машинного обучения и обработки данных. Создавайте красивые веб-приложения за считанные минуты. Приложения Streamlit — это скрипты Python, которые выполняются сверху вниз. Каждый раз, когда пользователь открывает вкладку браузера, указывающую на ваше приложение, сценарий выполняется повторно. По мере выполнения скрипта Streamlit выводит результат в реальном времени в браузере.
Создайте приложение, используя основные функции Streamlit для извлечения и кэширования данных, рисования диаграмм, отображения информации на карте и использования интерактивных виджетов, например ползунка, для фильтрации результатов.
Давайте подготовим виртуальную среду для приложения Streamlit. Сначала давайте создадим виртуальную среду и после ее создания активируем ее (Windows).
python -m venv env env\Scripts\activate
Затем нам нужно установить PyTorch, Ultralytics и Streamlit. Попробуйте установить в следующем порядке.
pip install torch pip install ultralytics pip install streamlit
После этого мы готовы попробовать hello world в Streamlit, чтобы убедиться, что все установлено правильно. Создайте файл с именем app.py и поместите следующие строки кода, используя вашу любимую IDE:
import streamlit as st st.write("Hello, World!")
Затем запустите его из терминала в cmd и, если все работает нормально, откроется браузер.
streamlit run app.py
Затем, чтобы создать инструмент для загрузки наших изображений и использования модели, нам нужно открыть редактор кода, и давайте начнем с замены предыдущего файла и создания нового с именем app.py
. Но нам также нужна папка с именем weights
и на данный момент это все. Теперь давайте перейдем к следующему шагу.
Создайте загрузку изображения в веб-приложении Streamlit
Мы будем использовать Streamlit, чтобы пользователи могли загружать изображения. После успешной загрузки изображения он готов запустить обнаружение объектов на загруженном изображении с помощью YOLOv8. Этот шаг включает в себя загрузку модели YOLOv8 и передачу загруженного изображения через модель для идентификации объектов, присутствующих на изображении.
Мы также визуализируем вывод модели с выделенными на изображении идентифицированными объектами. Перейдем к коду.
Во Части 2 этой серии мы обсудили, как загрузить предварительно обученный файл веса модели Yolov8. скачал файл best.pt
и сохранил его в нашем каталоге weights
. Мы будем использовать тот же файл веса. В созданный файл с именем app.py
пишем следующие строки кода:
# Import required libraries import PIL import streamlit as st from ultralytics import YOLO # Replace the relative path to your weight file model_path = 'weights/best.pt' # Setting page layout st.set_page_config( page_title="Object Detection", # Setting page title page_icon="🤖", # Setting page icon layout="wide", # Setting layout to wide initial_sidebar_state="expanded", # Expanding sidebar by default ) # Creating sidebar with st.sidebar: st.header("Image Config") # Adding header to sidebar # Adding file uploader to sidebar for selecting images source_img = st.file_uploader( "Upload an image...", type=("jpg", "jpeg", "png", 'bmp', 'webp')) # Model Options confidence = float(st.slider( "Select Model Confidence", 25, 100, 40)) / 100 # Creating main page heading st.title("Object Detection") st.caption('Updload a photo with this :blue[hand signals]: :+1:, :hand:, :i_love_you_hand_sign:, and :spock-hand:.') st.caption('Then click the :blue[Detect Objects] button and check the result.') # Creating two columns on the main page col1, col2 = st.columns(2) # Adding image to the first column if image is uploaded with col1: if source_img: # Opening the uploaded image uploaded_image = PIL.Image.open(source_img) # Adding the uploaded image to the page with a caption st.image(source_img, caption="Uploaded Image", use_column_width=True ) try: model = YOLO(model_path) except Exception as ex: st.error( f"Unable to load model. Check the specified path: {model_path}") st.error(ex) if st.sidebar.button('Detect Objects'): res = model.predict(uploaded_image, conf=confidence ) boxes = res[0].boxes res_plotted = res[0].plot()[:, :, ::-1] with col2: st.image(res_plotted, caption='Detected Image', use_column_width=True ) try: with st.expander("Detection Results"): for box in boxes: st.write(box.xywh) except Exception as ex: st.write("No image is uploaded yet!")
Вы можете изменить текст приложения в кодах строк st.caption так, как вы предпочитаете для своего проекта. Теперь давайте запустим приложение в терминале:
streamlit run app.py
Это развернет наше приложение в веб-браузере, который мы используем в настоящее время, загрузим изображение и проверим, что идентифицирует объекты:
Если все работает правильно, выполните следующую команду, чтобы получить требования:
pip freeze > requirements.txt
Также нам нужно создать файл с именем packages.txt
в папке с кодом и поместить в него эту строку:
libgl1
Теперь мы можем создать репозиторий на Github, чтобы поместить наше приложение в streamlit.io, но перед этим обязательно удалите все в требованиях, кроме трех вещей:
torch==2.0.1 ultralytics==8.0.142 streamlit==1.25.0
Streamlit.io позволяет загружать только 1 ГБ. Установки занимают большую часть места, поэтому, чтобы избежать этого, мы оставляем три обязательные библиотеки для нашего приложения. Проверьте мой репозиторий и как его нужно загрузить.
Отсюда мы готовы перейти к streamlit.io и развернуть наше приложение. Создайте учетную запись, а затем появится следующее окно, нажмите в новом приложении.
Подключите учетную запись Streamlit к Github, а затем выберите репозиторий, в котором находится ваше приложение. затем выберите ветку и измените путь к основному файлу:
Теперь выберите версию Python и сохраните изменения, после чего мы можем нажать кнопку развертывания.
Затем появится следующее окно, показывающее все установки. Проверьте, есть ли ошибки.
Затем вы можете попробовать свое приложение и проверить, правильно ли оно работает.
Заключение
Я надеюсь, что это руководство будет полезно для ваших проектов. Сочетание Roboflow и Streamlit позволяет разрабатывать приложения с удобным интерфейсом. Этот подход упрощает обнаружение и отслеживание объектов в режиме реального времени, позволяя использовать широкий спектр вариантов использования не только моделей обнаружения объектов для других проектов по науке о данных и машинному обучению.
Следите за мной. Я добавил одну дополнительную часть для активного обучения из Windows и Colab, Активное обучение Raspberry и развертывание Raspberry Pi, обязательно ознакомьтесь с дополнительными сообщениями 4, 5 и 6. Если вы обнаружите ошибки после этого или отзывы об этом руководстве, дайте мне знаете в комментариях, спасибо за внимание к этому сообщению. Удачи в ваших проектах.