mieki256's diary



2025/02/22() [n年前の日記]

#1 [cg_tools][gimp] GIMPからsegment-anythingを呼び出して使う

GIMP 2.10.34 Portable から、segment-anything を呼び出して、セグメント分割(領域分割)ができるか試してみる。Windows10 x64 22H2 + Python 3.10.10 x64上で動作確認。


segment-anything のインストールは以下にメモしてある。

_segment-anythingをインストールしてみた - mieki256's diary

GIMPプラグインを入手 :

GIMPから呼び出すためのプラグイン(Python-Fuスクリプト)は、以下で公開されている。

_Shriinivas/gimpsegany: Gimp plugin for integration with Meta Segment Anything

gimpsegany-main.zip を入手して解凍。中に入っている以下の2つのファイルを任意のフォルダに置く。
seganybridge.py
seganyplugin.py

今回は D:\home\USERNAME\.gimp-2.10\plug-ins_2.10_segany\ に置いてみた。このフォルダは、後からGIMPの設定画面で、プラグインフォルダとして追加登録する予定。

Python仮想環境を有効にできるbatファイルを書く :

batファイルを書いて、仮想環境を有効にしてから python.exe を利用できるようにしてみる。X:\aiwork\segment-anything\ 以下で、python3.bat を書いてみた。
@echo off
@rem set GIMPSEGANYPATH=%CD%
set GIMPSEGANYPATH=D:\home\USERNAME\.gimp-2.10\plug-ins_2.10_segany
set SEGANYPATH=X:\aiwork\segment-anything\segment-anything
call %SEGANYPATH%\venv\Scripts\activate.bat
cd /d %GIMPSEGANYPATH%
@echo on
python.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
@rem pause
@echo off
deactivate

  • 変数 GIMPSEGANYPATH に、GIMPプラグイン関連ファイルが置いてあるフォルダを指定。
  • 変数 SEGANYPATH に、segment-anything 関連ファイルが置いてあるフォルダを指定。

seganybridge.pyが動作するか確認 :

GIMPのプラグイン関連ファイル、seganybridge.py が動作するのか確認する。コレが動作してくれないと、GIMPプラグインとして処理が行われないらしい。

seganybridge.py が置いてある場所をカレントディレクトリにして、以下を実行する。
X:\aiwork\segment-anything\python3.bat ./seganybridge.py vit_h X:\aiwork\segment-anything\segment-anything\pretrained_checkpoint\sam_vit_h_4b8939.pth

実行結果は以下。「Success!!」と表示されているので、問題無さそう。
(venv) D:\home\USERNAME\.gimp-2.10\plug-ins_2.10_segany> python.exe ./seganybridge.py vit_h X:\aiwork\segment-anything\segment-anything\pretrained_checkpoint\sam_vit_h_4b8939.pth
X:\aiwork\segment-anything\segment-anything\segment_anything\build_sam.py:105: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
  state_dict = torch.load(f)
Success!!

GIMPプラグインを追加登録 :

GIMP 2.10.34 Portable を起動して、segany\*.py があるフォルダを、プラグインフォルダ設定に追加登録する。

編集 → 設定 → フォルダ → プラグイン。D:\home\USERNAME\.gimp-2.10\plug-ins_2.10_segany\ を追加登録した。

GIMPを再起動。

GIMPで動作確認 :

動作確認してみる。

まずはGIMPで何かしらの画像を開く。今回は segment-anything に付属しているサンプル画像を動作確認に使った。
X:\aiwork\segment-anything\segment-anything\notebooks\images\*.jpg


画像 → Segment Anything Layers を選ぶ。DOS窓が開いて大量に警告メッセージが出てくるけれど、一応、プラグインのダイアログが表示された。

segany_gimp_ss01.jpg

  • Python3 Path : X:\aiwork\segment-anything\python3.bat を指定。
  • Checkpoint Type : vit_h を選択。
  • Checkpoint Path : X:\aiwork\segment-anything\segment-anything\pretrained_checkpoint\sam_vit_h_4b8939.pth を指定。
  • Segmentation Type : Auto を選択。
  • Random Mask Color にチェックを入れると、各領域をランダムな色で塗ってくれる。

OKボタンを押して実行すると処理が行われて、領域で分割された大量のレイヤーが追加される。

segany_gimp_ss02.jpg

処理は結構時間がかかる。groceries.jpg (800x534)の画像に対して、GPU: NVIDIA GeForce GTX 1060 6GB、CPU: AMD Ryzen 5 5600X、RAM: 32GB の環境で、50秒ほどかかった。出力されたレイヤー数は130枚以上。

領域分割されたレイヤーに対して、以下の操作をすれば選択範囲が作成できる。
  • レイヤー一覧ウインドウ内で、レイヤーを Alt+左クリックすれば不透明部分を選択できる。
  • あるいは、右クリックメニュー → 不透明部分を選択範囲に。
  • もしくは、使いたいレイヤーを選択した状態で、ファジー選択ツールを選んで、「見えている色で」のチェックを外して、領域を左クリック。ただ、この方法を使うと、連続しているピクセルしか選べないような気もする…。

余談。領域分割されたレイヤー群はレイヤーグループの中に入っているけれど、このレイヤーグループの透明度が50%に設定されているので、領域分割されたレイヤー群も50%の透明度で半透明表示されている。各レイヤーが実際に半透明で塗られているわけではない。

以上です。

過去ログ表示

Prev - 2025/02 - Next
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

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project