うみゅ
0.0.2
1bf41f9 unverified
raw
history blame
2.69 kB
# -*- 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)