File size: 4,607 Bytes
eb5980a
39d2064
 
eb5980a
1bf41f9
 
 
eb5980a
 
1bf41f9
39d2064
 
 
 
eb5980a
1bf41f9
da8bdb9
39d2064
da8bdb9
 
 
 
 
 
 
 
 
 
 
 
 
39d2064
da8bdb9
 
 
 
 
1bf41f9
da8bdb9
 
 
 
 
 
 
 
1bf41f9
0186f79
da8bdb9
 
 
eb5980a
0186f79
eb5980a
da8bdb9
 
 
0186f79
da8bdb9
 
0186f79
 
da8bdb9
 
0186f79
39d2064
da8bdb9
eb5980a
39d2064
eb5980a
da8bdb9
 
 
 
 
eb5980a
71f9f81
 
 
a8e6217
 
 
 
 
 
71f9f81
eb5980a
 
 
 
da8bdb9
 
 
 
 
 
 
 
 
 
eb5980a
 
da8bdb9
eb5980a
da8bdb9
eb5980a
da8bdb9
 
 
 
 
 
 
eb5980a
da8bdb9
1bf41f9
eb5980a
 
 
 
 
1bf41f9
 
 
da8bdb9
71f9f81
39d2064
da8bdb9
 
 
39d2064
 
da8bdb9
39d2064
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# -*- coding: utf-8 -*-
from typing import Literal

import argparse
from datetime import datetime
import sys

import gradio as gr
import numpy as np

import src.utils as utils
from src.saliency import SaliencyMap, convertColorMap
from src.reporter import get_current_reporter

PROGRAM_NAME = 'SaliencyMapDemo'
__version__ = utils.get_package_version()
log = get_current_reporter()
    
def jetTab_Selected(image: np.ndarray):
    #print(f"{datetime.now()}#jet")
    saliency = SaliencyMap("SpectralResidual")
    success, saliencyMap = saliency.computeSaliency(image)
    retval = convertColorMap(image, saliencyMap, "jet")
    #print(f"{datetime.now()}#jet")
    
    return retval
    
def hotTab_Selected(image: np.ndarray):
    #print(f"{datetime.now()}#hot")
    saliency = SaliencyMap("SpectralResidual")
    success, saliencyMap = saliency.computeSaliency(image)
    retval = convertColorMap(image, saliencyMap, "turbo")
    #print(f"{datetime.now()}#hot")
    
    return retval

def submit_Clicked(image: np.ndarray, algorithm: str):
    """

    入力画像を元に顕著マップを計算します。



    Parameters:

        image: 入力画像

        str: 顕著性マップのアルゴリズム

    Returns:

        np.ndarray: JET画像

        np.ndarray: HOT画像

    """
    #log.info(f"#submit_Clicked")
    watch = utils.Stopwatch.startNew()
    
    saliency = SaliencyMap(algorithm)
    success, saliencyMap = saliency.computeSaliency(image)
    #log.info(f"#SaliencyMap computeSaliency()")

    if not success:
        return image, image # エラーが発生した場合は入力画像を返します。

    #log.info(f"#jet")        
    jet = convertColorMap(image, saliencyMap, "jet")
    #jet = None
    #log.info(f"#hot")
    hot = convertColorMap(image, saliencyMap, "hot")
    
    saliency = None
    #log.info(f"#submit_Clicked End{watch.stop():.3f}")
    
    return jet, hot

def runApp(args: argparse.Namespace, watch: utils.Stopwatch) -> None:
    """

    アプリの画面を作成し、Gradioサービスを起動します。



    Parameters:

        args: コマンドライン引数

        watch: 起動したスタート時間

    """
    # analytics_enabled=False
    # https://github.com/gradio-app/gradio/issues/4226
    with gr.Blocks(analytics_enabled=False, \
        title=f"{PROGRAM_NAME} {__version__}", \
        head="""

        <meta name="format-detection" content="telephone=no">

        <meta name="robots" content="noindex, nofollow, noarchive">

        <meta name="referrer" content="no-referrer" />

        """) as demo:
    	
        gr.Markdown(
        """

        # Saliency Map demo.

        """)
        with gr.Accordion("取り扱い説明書", open=False):
            gr.Markdown(
            """

            1. inputタブで画像を選択します。

            2. Submitボタンを押します。

               ※画像は外部送信していません。ローカルで処理が完結します。

            3. 結果は、JETタブとHOTタブに表示します。  

            """)

        algorithmType = gr.Radio(["SpectralResidual", "FineGrained"], label="Saliency", value="SpectralResidual", interactive=True)

        submit_button = gr.Button("submit")

        with gr.Row():
            with gr.Tab("input", id="input"):

                image_input = gr.Image(sources = ["upload", "clipboard"], interactive=True)
            with gr.Tab("overlay(JET)"):
                image_overlay_jet = gr.Image(interactive=False)
                #tab_jet.select(jetTab_Selected, inputs=[image_input], outputs=image_overlay_jet)
            with gr.Tab("overlay(HOT)"):
                image_overlay_hot = gr.Image(interactive=False)
                #tab_hot.select(hotTab_Selected, inputs=[image_input], outputs=image_overlay_hot, api_name=False)
        
        submit_button.click(submit_Clicked, inputs=[image_input, algorithmType], outputs=[image_overlay_jet, image_overlay_hot])

        gr.Markdown(
        f"""

        Python {sys.version}  

        App {__version__}  

        """)
        
        demo.queue(default_concurrency_limit=5)
        
        log.info(f"#アプリ起動完了({watch.stop():.3f}s)")
        # https://www.gradio.app/docs/gradio/blocks#blocks-launch
        
        demo.launch(
            max_file_size=args.max_file_size,
            server_port=args.server_port,
            inbrowser=args.inbrowser,
            share=args.share,
        )