うみゅ commited on
Commit
eb5980a
·
unverified ·
1 Parent(s): 4998b0c
Files changed (6) hide show
  1. 01-installation.bat +10 -0
  2. README.md +26 -1
  3. requirements.txt +75 -0
  4. run.bat +7 -0
  5. src/__init__.py +0 -0
  6. src/app.py +71 -0
01-installation.bat ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ @echo on
2
+
3
+ cd %~dp0
4
+
5
+ python -m venv venv
6
+ call venv\Scripts\activate
7
+
8
+ pip install -r requirements.txt
9
+
10
+ TIMEOUT /T 10
README.md CHANGED
@@ -1 +1,26 @@
1
- # SaliencyMapDemo
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # saliencymap
2
+ ## Introduction
3
+ gradioを使って、opencv-contribパッケージのcv2.saliency.StaticSaliencySpectralResidualを呼び出すサンプルプログラムです。
4
+ 私は画像処理についてはまだ初心者ですが、興味を持っています。
5
+ 以下から導入方法です。
6
+
7
+ ## 1. 仮想環境(venv)に必要ライブラリのインストール
8
+ - リポジトリ直下にある以下のバッチを実行する。
9
+ ~~~
10
+ 01-installation.bat
11
+ ~~~
12
+ > **NOTE**
13
+ 仮想環境の名称は「venv」で作成します。
14
+
15
+ ## 2. 実行
16
+ - リポジトリ直下にある以下のバッチを実行する。
17
+ ~~~
18
+ run.bat
19
+ ~~~
20
+ > **NOTE**
21
+ > デフォルトポートは9999です。
22
+ > 他のポート番号例えば8888に変更したい場合は、run.bat内の以下の行を書き換えてください。
23
+ > python src\app.py --server_port 8888
24
+
25
+ ## Source code License.
26
+ [MIT License](LICENSE)
requirements.txt ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ aiofiles==23.2.1
2
+ altair==5.3.0
3
+ annotated-types==0.6.0
4
+ anyio==4.3.0
5
+ attrs==23.2.0
6
+ certifi==2024.2.2
7
+ charset-normalizer==3.3.2
8
+ click==8.1.7
9
+ colorama==0.4.6
10
+ contourpy==1.2.1
11
+ cycler==0.12.1
12
+ dnspython==2.6.1
13
+ email_validator==2.1.1
14
+ exceptiongroup==1.2.1
15
+ fastapi==0.111.0
16
+ fastapi-cli==0.0.2
17
+ ffmpy==0.3.2
18
+ filelock==3.14.0
19
+ fonttools==4.51.0
20
+ fsspec==2024.3.1
21
+ gradio==4.28.3
22
+ gradio_client==0.16.0
23
+ h11==0.14.0
24
+ httpcore==1.0.5
25
+ httptools==0.6.1
26
+ httpx==0.27.0
27
+ huggingface-hub==0.23.0
28
+ idna==3.7
29
+ importlib_resources==6.4.0
30
+ Jinja2==3.1.3
31
+ jsonschema==4.22.0
32
+ jsonschema-specifications==2023.12.1
33
+ kiwisolver==1.4.5
34
+ markdown-it-py==3.0.0
35
+ MarkupSafe==2.1.5
36
+ matplotlib==3.8.4
37
+ mdurl==0.1.2
38
+ numpy==1.26.4
39
+ opencv-python==4.9.0.80
40
+ opencv-contrib-python==4.9.0.80
41
+ orjson==3.10.2
42
+ packaging==24.0
43
+ pandas==2.2.2
44
+ pillow==10.3.0
45
+ pydantic==2.7.1
46
+ pydantic_core==2.18.2
47
+ pydub==0.25.1
48
+ Pygments==2.17.2
49
+ pyparsing==3.1.2
50
+ python-dateutil==2.9.0.post0
51
+ python-dotenv==1.0.1
52
+ python-multipart==0.0.9
53
+ pytz==2024.1
54
+ PyYAML==6.0.1
55
+ referencing==0.35.1
56
+ requests==2.31.0
57
+ rich==13.7.1
58
+ rpds-py==0.18.0
59
+ ruff==0.4.2
60
+ semantic-version==2.10.0
61
+ shellingham==1.5.4
62
+ six==1.16.0
63
+ sniffio==1.3.1
64
+ starlette==0.37.2
65
+ tomlkit==0.12.0
66
+ toolz==0.12.1
67
+ tqdm==4.66.4
68
+ typer==0.12.3
69
+ typing_extensions==4.11.0
70
+ tzdata==2024.1
71
+ ujson==5.9.0
72
+ urllib3==2.2.1
73
+ uvicorn==0.29.0
74
+ watchfiles==0.21.0
75
+ websockets==11.0.3
run.bat ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ @echo on
2
+
3
+ cd %~dp0
4
+ call venv\Scripts\activate
5
+ python src\app.py --server_port 9999
6
+
7
+ TIMEOUT /T 10
src/__init__.py ADDED
File without changes
src/app.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ SaliencyMapDemo
4
+ """
5
+ import argparse
6
+ import cv2
7
+ import gradio as gr
8
+ import numpy as np
9
+ import sys
10
+
11
+ PROGRAM_NAME = 'SaliencyMapDemo'
12
+ __version__ = '0.0.1'
13
+
14
+ def compute_saliency(image: np.ndarray):
15
+ # OpenCVのsaliencyを作成
16
+ saliency = cv2.saliency.StaticSaliencySpectralResidual_create()
17
+ # 画像の顕著性を計算
18
+ success, saliencyMap = saliency.computeSaliency(image)
19
+
20
+ if success:
21
+ # 顕著性マップをカラーマップに変換
22
+ saliencyMap = (saliencyMap * 255).astype("uint8")
23
+ saliencyMap = cv2.applyColorMap(saliencyMap, cv2.COLORMAP_JET)
24
+ # 元の画像とカラーマップを重ね合わせ
25
+ overlay = cv2.addWeighted(image, 0.5, saliencyMap, 0.5, 0)
26
+ return overlay
27
+ else:
28
+ return image # エラーが発生した場合は元の画像を返す
29
+
30
+ def main(args):
31
+ """
32
+ Entry Point
33
+ """
34
+ with gr.Blocks() as demo:
35
+ gr.Markdown(
36
+ """
37
+ # Saliency Map demo.
38
+ 1. inputタブで画像を選択します。
39
+ 2. Submitボタンを押します。※外部送信していません。ローカルで完結しています。
40
+ 3. 結果がoverlayタブに表示されます。
41
+ """)
42
+
43
+ submit_button = gr.Button("submit")
44
+
45
+ with gr.Row():
46
+ with gr.Tab("input"):
47
+ image_input = gr.Image()
48
+ with gr.Tab("overlay"):
49
+ image_overlay = gr.Image()
50
+
51
+
52
+ submit_button.click(compute_saliency, inputs=image_input, outputs=image_overlay)
53
+ sys.version
54
+ gr.Markdown(
55
+ f"""
56
+ Python {sys.version}
57
+ App {__version__}
58
+ """)
59
+ demo.queue(default_concurrency_limit=5).launch(max_file_size=args.max_file_size, server_port=args.server_port)
60
+
61
+ if __name__ == "__main__":
62
+ """
63
+ コマンドライン引数の解析
64
+ """
65
+ parser = argparse.ArgumentParser(prog=PROGRAM_NAME, description="SaliencyMapDemo")
66
+ parser.add_argument('--server_port', type=int, default=9999, help="Gradio server port")
67
+ parser.add_argument('--max_file_size', type=int, default=20 * gr.FileSize.MB, help="Gradio max file size")
68
+ parser.add_argument('--version', action='version', version='%(prog)s {0}'.format(__version__))
69
+
70
+ main(parser.parse_args())
71
+