|
|
|
|
|
|
|
|
""" |
|
|
------------------------------------------------- |
|
|
@File Name: app.py |
|
|
@Author: Luyao.zhang |
|
|
@Date: 2023/5/15 |
|
|
@Description: |
|
|
------------------------------------------------- |
|
|
""" |
|
|
from pathlib import Path |
|
|
from PIL import Image |
|
|
import streamlit as st |
|
|
|
|
|
import config |
|
|
from utils import load_model, infer_uploaded_image, infer_uploaded_video, infer_uploaded_webcam |
|
|
|
|
|
|
|
|
st.set_page_config( |
|
|
page_title="Interactive Interface for YOLOv8", |
|
|
page_icon="🤖", |
|
|
layout="wide", |
|
|
initial_sidebar_state="expanded" |
|
|
) |
|
|
|
|
|
|
|
|
st.title("Interactive Interface for YOLOv8") |
|
|
|
|
|
|
|
|
st.sidebar.header("DL Model Config") |
|
|
|
|
|
|
|
|
task_type = st.sidebar.selectbox( |
|
|
"Select Task", |
|
|
["Detection"] |
|
|
) |
|
|
|
|
|
model_type = None |
|
|
if task_type == "Detection": |
|
|
model_type = st.sidebar.selectbox( |
|
|
"Select Model", |
|
|
config.DETECTION_MODEL_LIST |
|
|
) |
|
|
else: |
|
|
st.error("Currently only 'Detection' function is implemented") |
|
|
|
|
|
confidence = float(st.sidebar.slider( |
|
|
"Select Model Confidence", 30, 100, 50)) / 100 |
|
|
|
|
|
model_path = "" |
|
|
if model_type: |
|
|
model_path = Path(config.DETECTION_MODEL_DIR, str(model_type)) |
|
|
else: |
|
|
st.error("Please Select Model in Sidebar") |
|
|
|
|
|
|
|
|
try: |
|
|
model = load_model(model_path) |
|
|
except Exception as e: |
|
|
st.error(f"Unable to load model. Please check the specified path: {model_path}") |
|
|
|
|
|
|
|
|
st.sidebar.header("Image/Video Config") |
|
|
source_selectbox = st.sidebar.selectbox( |
|
|
"Select Source", |
|
|
config.SOURCES_LIST |
|
|
) |
|
|
|
|
|
source_img = None |
|
|
if source_selectbox == config.SOURCES_LIST[0]: |
|
|
infer_uploaded_image(confidence, model) |
|
|
elif source_selectbox == config.SOURCES_LIST[1]: |
|
|
infer_uploaded_video(confidence, model) |
|
|
elif source_selectbox == config.SOURCES_LIST[2]: |
|
|
infer_uploaded_webcam(confidence, model) |
|
|
else: |
|
|
st.error("Currently only 'Image' and 'Video' source are implemented") |