File size: 4,751 Bytes
43bf6e9
 
 
 
 
 
 
 
372dfad
 
43bf6e9
 
 
 
9f02801
 
 
7cdaae6
 
43bf6e9
9f02801
43bf6e9
9f02801
 
43bf6e9
 
 
372dfad
43bf6e9
 
 
 
 
 
 
372dfad
 
43bf6e9
 
372dfad
43bf6e9
5dfcd99
9f02801
372dfad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51911d0
 
9f02801
 
 
 
 
 
 
 
 
 
 
cdca63f
9f02801
cdca63f
9f02801
 
 
 
 
 
cdca63f
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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
from st_aggrid import GridOptionsBuilder, AgGrid, GridUpdateMode, DataReturnMode

def app():
    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 **(the explanation of the result from the detection and tutorial how to use the model
            is on the bottom of this page. Scroll down or [click here!](#explanation-of-the-ship-detection-result))**.

            ### For more information, please visit:

            - Check out [my github](https://github.com/bills1912)
            - Jump into YOLOv5 [documentation](https://docs.ultralytics.com/)

        """
        )
    ais = pd.read_csv("https://raw.githubusercontent.com/bills1912/marine-vessels-dataset/main/ais_dataV2.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[5]}\
                </br> Latitude: {i[10]} </br> Longitude: {i[11]}"
        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=1100, height=700)
    
    # gb = GridOptionsBuilder.from_dataframe(ais)
    # gb.configure_pagination(paginationAutoPageSize=True) #Add pagination
    # gb.configure_selection('multiple', use_checkbox=False) #Enable multi-row selection
    # gridOptions = gb.build()

    # grid_response = AgGrid(
    #     ais,
    #     gridOptions=gridOptions,
    #     data_return_mode='AS_INPUT', 
    #     update_mode='MODEL_CHANGED', 
    #     fit_columns_on_grid_load=False,
    #     theme='dark', #Add theme color to the table
    #     enable_enterprise_modules=True,
    #     height=350, 
    #     width='100%',
    #     reload_data=True
    # )

    # data = grid_response['data']
    # selected = grid_response['selected_rows'] 
    
    st.markdown(
        """
        ## Explanation of The Ship Detection Result
        <p align="center">
             <img src="https://huggingface.co/spaces/billsar1912/YOLOv5x6-marine-vessels-detection/resolve/main/apps/image/result.png" alt="Example of the result"/>
        </p>

        Here is the explanation of the result from the example on the image above:\

        - **box**, indicate the object that the model can detect;
        - **label of the box**, indicate the name of the object that the model detect;
        - **number beside the label**, indicate how much the confidence of the model detect the object;

         ## Tutorial How to Use Ship Detection Model
        Here is the step by step how to use the model on this dashboard:
        - first, **prepare the satellite imagery image** that you want to use. If you don't have the image, you can use this sample image, by clicking the **"Download Image"** on the end of this dashboard usage explanation;
        - then, **choose the model** that you want to use **(on the side bar)**, **YOLOv5x6 Model** to use the YOLOv5x6 model or **Fine-Tuning Model** to use the fine-tuning model (study case: Tanjung Priok Port);
        - to upload your image, **click the "Browse File"** button, then upload your image;
        - after the image is uploaded, **right click the image** and then **copy the image address** by clicking **"Copy image address"** button;
        - then **paste the image address** on the box below the image;
        - finally, **click the "Predict"** button to start the detection of the object inside your image. Wait untill the result appear.
        """, unsafe_allow_html=True
    )
    with open("apps/image/sample.jpg", "rb") as file:
        st.download_button(
            label="Download Sample Image",
            data=file,
            file_name="sample.jpg",
            mime="image/jpg"
        )