Spaces:
Running
Running
File size: 5,156 Bytes
eb5980a 8ccf878 eb5980a 8ccf878 1bf41f9 3a900c7 1bf41f9 eb5980a 1bf41f9 3a900c7 8ccf878 3a900c7 39d2064 8ccf878 f65b63f 8ccf878 da8bdb9 8ccf878 da8bdb9 8ccf878 f65b63f 8ccf878 da8bdb9 8ccf878 da8bdb9 8ccf878 1bf41f9 da8bdb9 1bf41f9 afb0c77 8ccf878 da8bdb9 afb0c77 8ccf878 afb0c77 eb5980a da8bdb9 8ccf878 afb0c77 8ccf878 afb0c77 8ccf878 da8bdb9 afb0c77 da8bdb9 eb5980a 8ccf878 eb5980a da8bdb9 eb5980a 71f9f81 8ccf878 3a900c7 a8e6217 eb5980a 8ccf878 da8bdb9 8ccf878 da8bdb9 8ccf878 eb5980a a3a4c65 da8bdb9 eb5980a da8bdb9 8ccf878 da8bdb9 f65b63f da8bdb9 f65b63f 8ccf878 3a900c7 eb5980a 8ccf878 1bf41f9 8ccf878 da8bdb9 71f9f81 da8bdb9 39d2064 8ccf878 da8bdb9 |
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 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# -*- coding: utf-8 -*-
"""myapp Widget"""
import argparse
#from datetime import datetime
import sys
from typing import Literal
import gradio as gr
import numpy as np
from . import PROGRAM_NAME
from src.reporter import log
from src.saliency import SaliencyMap, convert_colormap
from src.utils import Stopwatch, get_package_version
log.info("#アプリ起動中")
watch = Stopwatch.start_new()
def jet_tab_selected(image: np.ndarray):
"""
JETタブを選択時
"""
#print(f"{datetime.now()}#jet")
saliency = SaliencyMap("SpectralResidual")
success, saliency_map = saliency.compute(image)
if not success:
return image # エラーが発生した場合は入力画像を返します。
retval = convert_colormap(image, saliency_map, "jet")
#print(f"{datetime.now()}#jet")
return retval
def hot_tab_selected(image: np.ndarray):
"""
HOTタブを選択時
"""
#print(f"{datetime.now()}#hot")
saliency = SaliencyMap("SpectralResidual")
success, saliency_map = saliency.compute(image)
if not success:
return image # エラーが発生した場合は入力画像を返します。
retval = convert_colormap(image, saliency_map, "turbo")
#print(f"{datetime.now()}#hot")
return retval
def submit_clicked(image: np.ndarray, algorithm: Literal["SpectralResidual", "FineGrained"]):
"""
入力画像を元に顕著マップを計算します。
Parameters:
image: 入力画像
str: 顕著性マップのアルゴリズム
Returns:
np.ndarray: JET画像
np.ndarray: HOT画像
"""
sw = Stopwatch.start_new()
log.info(f"#submit_clicked({sw.elapsed:.3f}s)")
#
saliency = SaliencyMap(algorithm)
log.info(f"#SaliencyMap({sw.elapsed:.3f}s)")
success, saliency_map = saliency.compute(image)
log.info(f"#compute({sw.elapsed:.3f}s)")
if not success:
return image, image # エラーが発生した場合は入力画像を返します。
log.info(f"#jet({sw.elapsed:.3f}s)")
jet = convert_colormap(image, saliency_map, "jet")
# jet = None
log.info(f"#hot({sw.elapsed:.3f}s)")
hot = convert_colormap(image, saliency_map, "hot")
saliency = None
log.info(f"#submit_clicked({sw.elapsed:.3f}s)")
return jet, hot
def run_app(args: argparse.Namespace) -> 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} {get_package_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タブに表示します。
""")
algorithm_type = gr.Radio(
["SpectralResidual", "FineGrained"],
label="Saliency",
value="SpectralResidual",
interactive=True
)
submit_button = gr.Button("submit", variant="primary")
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(jet_tab_selected,
# inputs=[image_input],
# outputs=image_overlay_jet)
with gr.Tab("overlay(HOT)"):
image_overlay_hot = gr.Image(interactive=False)
# tab_hot.select(hot_tab_selected,
# inputs=[image_input],
# outputs=image_overlay_hot, api_name=False)
#
submit_button.click(
submit_clicked,
inputs=[image_input, algorithm_type],
outputs=[image_overlay_jet,
image_overlay_hot]
)
gr.Markdown(f"""
Python {sys.version}
App {get_package_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(
inbrowser=args.inbrowser,
share=args.share,
server_port=args.server_port,
max_file_size=args.max_file_size,
)
|