Spaces:
Running
Running
うみゅ
commited on
Release
Browse files- 01-installation.bat +10 -0
- README.md +26 -1
- requirements.txt +75 -0
- run.bat +7 -0
- src/__init__.py +0 -0
- 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 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
+
|