File size: 2,693 Bytes
eb5980a
 
 
 
 
1bf41f9
 
 
 
eb5980a
 
 
1bf41f9
 
eb5980a
 
1bf41f9
eb5980a
 
1bf41f9
 
 
eb5980a
 
 
 
 
 
 
 
 
1bf41f9
 
eb5980a
 
1bf41f9
eb5980a
 
 
 
1bf41f9
 
 
 
 
 
 
 
 
eb5980a
1bf41f9
eb5980a
1bf41f9
eb5980a
 
 
 
 
 
 
 
 
 
 
 
 
 
1bf41f9
eb5980a
 
 
1bf41f9
eb5980a
 
 
 
 
1bf41f9
 
 
 
 
 
 
 
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
# -*- coding: utf-8 -*-
"""

    SaliencyMapDemo

"""
import argparse
from datetime import datetime
import sys
from threading import Timer

import cv2
import gradio as gr
import numpy as np

import utils

PROGRAM_NAME = 'SaliencyMapDemo'
__version__ = utils.get_package_version()

def compute_saliency(image: np.ndarray):
    """

        顕著性MAP画像を作成します。

    """
    # OpenCVのsaliencyを作成
    saliency = cv2.saliency.StaticSaliencySpectralResidual_create()
    # 画像の顕著性を計算
    success, saliencyMap = saliency.computeSaliency(image)

    if success:
        # 顕著性マップをカラーマップに変換
        saliencyMap = (saliencyMap * 255).astype("uint8")
        saliencyMap = cv2.applyColorMap(saliencyMap, cv2.COLORMAP_JET)
        
        #overlay = saliencyMap
        # 元の画像とカラーマップを重ね合わせ
        overlay = cv2.addWeighted(image, 0.5, saliencyMap, 0.5, 0)
        
        return overlay
    else:
        return image  # エラーが発生した場合は元の画像を返す

def browser_worker(server_port: int) -> None:
	from webbrowser import open_new_tab
	open_new_tab(f"http://127.0.0.1:{server_port}")

def webbrowser_launch(args: argparse.Namespace) -> None:
	timer = Timer(1, browser_worker, args=[args.server_port])
	timer.start()

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

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

    """
    with gr.Blocks(title=f"{PROGRAM_NAME} {__version__}") as demo:
        gr.Markdown(
        """

        # Saliency Map demo.

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

        2. Submitボタンを押します。※外部送信していません。ローカルで完結しています。

        3. 結果がoverlayタブに表示されます。

        """)

        submit_button = gr.Button("submit")
        
        with gr.Row():
            with gr.Tab("input"):
                image_input = gr.Image()
            with gr.Tab("overlay"):
                image_overlay = gr.Image(interactive=False)

        
        submit_button.click(compute_saliency, inputs=image_input, outputs=image_overlay)

        gr.Markdown(
        f"""

        Python {sys.version}  

        App {__version__}  

        """)
        
        demo.queue(default_concurrency_limit=5)
        
        webbrowser_launch(args)
        
        print(f"{datetime.now()}:アプリ起動完了({watch.stop():.3f}s)")
        
        demo.launch(max_file_size=args.max_file_size, server_port=args.server_port)