import matplotlib.pyplot as plt import streamlit as st from PIL import Image import numpy as np import torch import cv2 @st.cache_resource def load_model(): model = torch.hub.load( 'ultralytics/yolov5', 'custom', path='best.pt' ) return model model = load_model() def make_prediction(img_path): img = Image.open(img_path).convert('RGB') open_cv_image = np.array(img) open_cv_image = open_cv_image[:, :, ::-1].copy() results = model([open_cv_image]) return open_cv_image, results def show_bounding_boxes(img, results, cls): df = results.pandas().xyxy[0] df = df[df['name'] == cls] list_of_rows = [list(row) for row in df.values] for each_row in list_of_rows: cv2.rectangle(img, (int(each_row[0]), int(each_row[1])), (int(each_row[2]), int(each_row[3])), (255, 0, 0), 2 ) return img st.title("RandomLayNet (Layout Detection) :tea: :coffee:") upload = st.file_uploader(label= "Upload an image : ", type = ["png","jpg","jpeg"]) if upload: print(upload) img, results = make_prediction(upload) bounded_img = show_bounding_boxes(img, results, 'Table') fig = plt.figure(figsize=(12,12)) ax = fig.add_subplot(111) plt.imshow(bounded_img) plt.xticks([],[]) plt.yticks([],[]) ax.spines[["top","bottom","right","left"]].set_visible(False) st.pyplot(fig,use_container_width=True)