Spaces:
Sleeping
Sleeping
# -*- coding: utf-8 -*- | |
""" | |
SaliencyMapDemo | |
""" | |
import argparse | |
import cv2 | |
import gradio as gr | |
import numpy as np | |
import sys | |
PROGRAM_NAME = 'SaliencyMapDemo' | |
__version__ = '0.0.1' | |
def compute_saliency(image: np.ndarray): | |
# 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 = cv2.addWeighted(image, 0.5, saliencyMap, 0.5, 0) | |
return overlay | |
else: | |
return image # エラーが発生した場合は元の画像を返す | |
def main(args): | |
""" | |
Entry Point | |
""" | |
with gr.Blocks() 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() | |
submit_button.click(compute_saliency, inputs=image_input, outputs=image_overlay) | |
sys.version | |
gr.Markdown( | |
f""" | |
Python {sys.version} | |
App {__version__} | |
""") | |
demo.queue(default_concurrency_limit=5).launch(max_file_size=args.max_file_size, server_port=args.server_port) | |
if __name__ == "__main__": | |
""" | |
コマンドライン引数の解析 | |
""" | |
parser = argparse.ArgumentParser(prog=PROGRAM_NAME, description="SaliencyMapDemo") | |
parser.add_argument('--server_port', type=int, default=9999, help="Gradio server port") | |
parser.add_argument('--max_file_size', type=int, default=20 * gr.FileSize.MB, help="Gradio max file size") | |
parser.add_argument('--version', action='version', version='%(prog)s {0}'.format(__version__)) | |
main(parser.parse_args()) | |