bills
Add new package
89ed248
raw
history blame
3.13 kB
import time
from turtle import width
import torch
import folium
import numpy as np
import pandas as pd
import streamlit as st
from folium.plugins import MarkerCluster
from streamlit_folium import folium_static
st.set_page_config(
page_title="Ship Detection using YOLOv5 Medium Model",
page_icon=":ship:",
layout="wide"
)
st.write("# Welcome to Ship Detection Application! :satellite:")
st.markdown(
"""
This application is build based on YOLOv5 with extral large model. User just
upload an image, and press the 'Predict' button to make a prediction base on
a training model before.
### For more information, please visit:
- Check out [my github](https://github.com/bills1912)
- Jump into YOLOv5 [documentation](https://docs.ultralytics.com/)
"""
)
st.write("## Ship Imagery Prediction")
map_col1, map_col2, map_col3 = st.columns(3)
ais = pd.read_csv("https://raw.githubusercontent.com/bills1912/marin-vessels-detection/main/data/MarineTraffic_VesselExport_2022-11-25.csv")
ais_jakarta = ais[ais['Destination Port'] == 'JAKARTA']
ais_list = ais_jakarta.values.tolist()
f = folium.Figure(width=1000, height=500)
jakarta_vessels = folium.Map(location=[-5.626954250925966, 106.70735731868719], zoom_start=8).add_to(f)
ais_data = folium.FeatureGroup(name="marine_vessels")
mCluster = MarkerCluster(name="Marine Vessels")
for i in ais_list:
html = f"<h3>{i[1]}</h3> Vessel Type: {i[8]} </br> Destination Port: {i[2]} </br> Reported Destination: {i[4]} </br> Current Port: {i[6]}\
</br> Latitude: {i[9]} </br> Longitude: {i[10]}"
iframe = folium.IFrame(html)
popup = folium.Popup(iframe, min_width=250, max_width=300)
ais_data.add_child(mCluster.add_child(folium.Marker(location=[i[10], i[11]], popup=popup, icon=folium.Icon(color="black", icon="ship", prefix="fa"))))
jakarta_vessels.add_child(ais_data)
folium_static(jakarta_vessels, width=1370, height=700)
st.write("### Model evaluation:")
eval_col1, eval_col2, eval_col3, eval_col4 = st.columns(spec=4)
eval_col1.metric("Precision", "89.52%")
eval_col2.metric("Recall", "83.54%")
eval_col3.metric("mAP 0.5", "85.39%")
eval_col4.metric("mAP 0.5:0.95", "62.63%")
st.write('Input the folder path of image')
uploaded_file = st.file_uploader("Choose a ship imagery")
if uploaded_file is not None:
st.image(uploaded_file, caption='Image to predict')
st.write(uploaded_file.name)
prediction = st.button("Predict")
if prediction:
ship_model = torch.hub.load('ultralytics/yolov5', 'custom', path="supercomputer/best.pt", force_reload=True)
# results = ship_model(f"C:/Users/bilva/YOLOv5/ship_test/{uploaded_file.name}")
results = ship_model(f"{folder_path}/{uploaded_file.name}")
with st.spinner("Loading..."):
time.sleep(3.5)
st.success("Done!")
st.image(np.squeeze(results.render()))
results.print()
# with st.echo():
# st.text(f"results.print()")
# st.markdown(results.print())
# for percent_progress in range (100):
# time.sleep(0.1)
# progress.progress(percent_progress + 1)