File size: 4,735 Bytes
49bceed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import numpy as np
import streamlit as st
from PIL import Image

from models.deep_learning import DeepLearningGradCAM, DeepLearningModel
from utils import configs
from utils.functional import (
    generate_empty_space,
    get_default_images,
    get_most_salient_object,
    set_page_config,
    set_seed,
)

# Set seed
set_seed()

# Set page config
set_page_config("HxH Character Anime Classification with Deep Learning", "πŸ€–")

# Sidebar
name_model = st.sidebar.selectbox("Select Model", tuple(configs.NAME_MODELS.keys()))
support_set_method = st.sidebar.selectbox(
    "Select Support Set Method", configs.SUPPORT_SET_METHODS
)
freeze_model = st.sidebar.checkbox("Freeze Model", value=True)
pretrained_model = st.sidebar.checkbox("Pretrained Model", value=True)


# Load Model
@st.cache_resource
def load_model(

    name_model: str, support_set_method: str, freeze_model: bool, pretrained_model: bool

):
    deep_learning_model = DeepLearningModel(
        name_model, freeze_model, pretrained_model, support_set_method
    )
    custom_grad_cam = DeepLearningGradCAM(
        name_model, freeze_model, pretrained_model, support_set_method
    )
    return deep_learning_model, custom_grad_cam


deep_learning_model, custom_grad_cam = load_model(
    name_model, support_set_method, freeze_model, pretrained_model
)

# Application Description
st.markdown("# ❓ Application Description")
st.write(
    f"""

    Welcome to our HxH Character Anime Classification with Deep Learning application! πŸ€–



This app is designed to help you classify your favorite HxH anime characters with the power of deep learning. Our state-of-the-art model allows for accurate and efficient identification of HxH characters from your favorite scenes. With an easy-to-use interface, even those with limited knowledge of deep learning can classify characters with ease.



Gone are the days of struggling to identify characters by memory or manual inspection. Our app does the hard work for you, freeing up your time to enjoy the show. Whether you're a hardcore HxH fan or just discovering the series, our app will enhance your viewing experience and make it more enjoyable.



Don't hesitate, give our HxH Character Anime Classification with Deep Learning app a try today and let us know what you think! 🦸



DISCLAIMER: The output of this app only {", ".join(configs.CLASS_CHARACTERS)}

    """
)

uploaded_file = st.file_uploader(
    "Upload image file", type=["jpg", "jpeg", "png", "bmp", "tiff"]
)
select_default_images = st.selectbox("Select default images", get_default_images())
st.caption("Default Images will be used if no image is uploaded.")
select_image_button = st.button("Select Image")
if select_image_button:
    st.success("Image selected")

if select_image_button and uploaded_file is not None:
    image = np.array(Image.open(uploaded_file).convert("RGB"))
    st.session_state["image"] = image
elif select_image_button and uploaded_file is None:
    image = np.array(Image.open(select_default_images).convert("RGB"))
    st.session_state["image"] = image

if st.session_state.get("image") is not None:
    image = st.session_state.get("image")
    col1, col2, col3 = st.columns(3)
    col2.write("## πŸ“Έ Preview Image")
    col2.image(image, use_column_width=True)
    predict_image_button = col2.button("Classify Image Character")
    generate_empty_space(2)
    if predict_image_button:
        with st.spinner("Classifying Image Character..."):
            result_class = deep_learning_model.predict(image)
            if result_class["character"] == configs.CLASS_CHARACTERS[-1]:
                result_grad_cam = custom_grad_cam.get_grad_cam(image)
            else:
                result_grad_cam = custom_grad_cam.get_grad_cam_with_output_target(
                    image, configs.CLASS_CHARACTERS.index(result_class["character"])
                )
            inference_time = result_class["inference_time"]
            col1, col2, col3 = st.columns(3)
            col1.write("### πŸ™‚ Source Image")
            col1.image(image, use_column_width=True)
            col2.write("### 😎 Grad CAM Image")
            col2.image(result_grad_cam, use_column_width=True)
            col3.write("### πŸ€” Most Salient Object")
            col3.image(get_most_salient_object(image), use_column_width=True)
            st.write("### πŸ“ Result")
            st.write(f"Predicted Character: {result_class['character'].title()}")
            st.write(f"Confidence Score: {result_class['confidence'] * 100:.2f}%")
            st.write(f"Inference Time: {inference_time:.2f} s")
            st.session_state["image"] = None