Ubuntu22.04DesktopでIOPaintのインストール記録

コンピュータ
IOPaintは画像の一部をいい感じに消去してくれるソフトでLama Cleanerの後継ソフトになります。
Ubuntu22.04DesktopでLama Cleanerのインストール記録
Lama Cleanerをインストールしたのでその作業ログを残しておきます。Lama Cleanerは画像の一部をいい感じに消去してくれるソフトです。adobeのPhotoShopのコンテンツに応じた塗りつぶしやGIMPのプラグインのスマー...

消去に使うモデルを複数から選ぶことが出来るので、画像に合わせて最適な消去方法を探すことが出来ます。

pythonの仮想環境を作成

cd ~/git
mkdir iopaint
cd iopaint
python3 -m venv venv

環境名をvenvにしました。
gitディレクトリの下にiopaintをディレクトリを作成していますが、venvディレクトリのみです。

仮想環境の開始

source ~/git/iopaint/venv/bin/activate

パッケージをインストール

python -m pip install --upgrade pip
python -m pip install -U --ignore-installed pip
pip3 install torch==2.1.2 torchvision==0.16.2 --index-url https://download.pytorch.org/whl/cu118
python -m pip install -U iopaint
python -m pip install -U rembg
python -m pip install -U realesrgan
python -m pip install -U gfpgan


変更:20240619
torchのcudaバージョンをcu121⇒cu118へ変更

実行用のシェルスクリプト

#!/bin/bash
cd ~
venvFile=`pwd`'/git/iopaint/venv/bin/activate'
source $venvFile
iopaint start --model=lama --device=cuda --port=8080
deactivate
cd ~

venvによる仮想環境の開始と終了を組み込んだシェルスクリプト。
終了は「Ctrl」+「C」

スクリプトを起動したらウェブブラウザで以下のアドレスにアクセス。

http://127.0.0.1:8080/

サンプル

ldmモデルで自動車を消してみる

Stable-Diffusionで山道を走る自動車を生成したところ以下の画像が出来上がりました。


自動車の部分をマスクして実行したところ、結構綺麗に消えたと思います。自動車に隠れている道が曲線を描きながら正しくつながったところと、道沿いの草が補完されているあたり、絵の構図を理解したうえで修正している感じがします。

lamaやldmなどのモデルは処理したい部分をマウスで塗りつぶし、マウスのボタンをリリースすると即座にフィルターが実行されます。Stable-Diffusion系のモデルの場合、処理したいマスクを塗りつぶした後、プロンプトを入力するフォームを入力し「Paint」ボタンを押すと処理が開始します。初めて使うモデルの場合モデルのダウンロード処理に入るため待ち時間が発生します。

感想

無料で使えるソフトでここまで高性能な処理が出来るのは大変ありがたいです。有償ソフトのphotoshopの生成塗りつぶしはもっと素晴らしいと思われますが、photoshopを所有していないで確認できないのが残念です。

追記:20240618

プラグイン

起動時にオプションを指定することにより有効化されるプラグインがあります。

オプションの確認方法

iopaint start --help

背景を透明化するrembgの動作を確認
Real-ESRGANとgfpganは動作させることが出来ませんでした。
追記:20240619
torchを別バージョンに入れ替えたところプラグイン類も動くようになりました。
使い方を確認中

バッチ処理(コマンドライン)

iopaintには複数の画像ファイルを一括処理する機能があります。

input用のディレクトリに処理したい画像を保存します。
次に元画像と同じ解像度で基本黒で修正したい部分を白抜きの画像を作成し元画像と同じファイル名でMask用のディレクトリに保存します。
その後コマンドを実行します。

iopaint run --model=lama --device=cuda \
--image=input_image_dir \
--mask=mask_image_dir \
--output=output_dir

多量の画像を処理したい場合に活用する機能だと思いますが、個人的にはMask用の画像をGIMPなどのペイントソフトでじっくり作成できる点が良いと思います。WebUIはよくできてはいると思うのですが(ほとんどデスクトップアプリケーション。どうやって作っているのだろう?)マスク部分の塗りつぶしで、ペン先のサイズ調整しながら行う繊細な作業は、自分には難易度が高い感じです。反面修正した結果を見て気に入らなければWebUIであれば即やり直すことが出来ますが、コマンドラインではそういうわけにもいかず、状況によって使い分けるのが良さそうです。

追記:20240621

lamaで消すコツ

・消去したい物体より少し大き目に選択しますが、消去後繋ぎたい線がある場合、選択範囲に線の端どうしも含まれるように意識すると良い感じに線をつなげてくれる場合があります。
・小さな物体は綺麗に修正してくれますが、修正範囲が大きくなると思った通り結果にならない場合が多い。(使っていると上手く消えそうな図形とそうで無い図形が感覚的にわかるようになる。)複数消したい物体がある場合は、まず綺麗に消えそうな小さな物体をlamaで消し、修正範囲が大きい部分は別なモデルを試す。それでもダメな場合はペイントソフト。(パッチ用の画像を用意しPaint-by-Exampleで修正する方法も思いつくのですが、今のところPaint-by-Exampleが上手く行ったためしがない。)
・その場に有るものを材料に消去していることを忘れない。(生成AI系のモデルであればその限りではない。)

追記:20240710
背景を透明化してくれるプラグインがあります。結構良い仕事をしてくれますが、背景と人物(前景)の境界が曖昧の場合、少し透けた感じになるのが、個人的には使いづらい。ぱっと見綺麗に自分物が切り抜けたと思っても、細かく見てみないと安心できない点が面倒に感じます。⇒透明度を100%又は0%にする2値化スクリプトを組む

コメント