「remove.bgレベルの背景透過ツールを無料で制限なく使いたい」
「プログラムで画像のトリミングを大量に実施したい」
このような場合には、Rembgがオススメです。
この記事では、Rembgについて解説しています。
本記事の内容
- Rembgとは?
- Rembgのシステム要件
- Rembgのインストール
- Rembgの動作確認
それでは、上記に沿って解説していきます。
Rembgとは?
Rembgは、画像の背景を削除するツールです。
画像の背景削除は、次のように表現されることがあります。
- 切り抜き
- 切り取り
- トリミング
- 透明化
- 背景透過
Rembgの公式では、次の画像が公開されています。
これらは、Rembgで行った画像の切り抜き成果ということでしょう。
「これが本当にできたら、スゴイ!!」
「でも、これはいい結果だけを出しているのでしょう?」
こんなふうに思った人もいるかもしれません。
私は、そのように思いました。
過去にこのようなトリミングツールは、何個も試してきました。
しかし、結果は微妙なモノばかりでした。
だから、システムによる自動切り取りなんて無理だと諦めているところがありました。
(※諦めて、ここ数年間はツールを探すことすらしてませんでした)
そんなところに知ったのが、Rembgです。
同時に、remove.bgというWebサービスも知りました。
remove.bgを本格的に利用するなら、有償となるようです。
Rembgは、このremove.bgと同じレベルの背景透過が実現できます。
いや、むしろ次の画像に関してはRembgの方が勝っているとも言えます。
左がRembgによる切り抜きです。
そして、右がremove.bgによる切り抜きになります。
影の部分に処理に関しては、Rembgの方が優れています。
無料でこれだけの品質であれば、Rembgで十分だと言えます。
こんなレベルの結果を見たら、AIは本当に人々の仕事を奪っていくのだと感じます。
それぐらいのインパクトをRembgから受けました。
以上、Rembgについての説明でした。
次は、Rembgのシステム要件を説明します。
Rembgのシステム要件
現時点(2022年8月末)でのRembgの最新バージョンは、2.0.24となります。
この最新バージョンは、2022年8月25日にリリースされています。
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
サポート対象となるPythonのバージョンは、以下となっています。
- Python 3.7
- Python 3.8
- Python 3.9
- Python 3.10
このサポート状況は、以下のPython公式開発サイクルに準じています。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月23日 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年10月4日 | 2026年10月 |
Python 3.6は、2021年末でサポート期限が切れていることに注意してください。
よって、Rembgの対応状況は適切と言えます。
あと、Rembgのシステム要件ではONNX Runtimeが最も重要になります。
ONNX Runtime次第でRembgの処理速度が変わってきます。
ONNX Runtimeには、CPU版とGPU版が存在します。
もちろん、GPU版の方が処理速度は圧倒的に高速です。
GPUを使える環境であれば、GPU版ONNX Runtimeの利用をオススメします。
ただ、GPU版ONNX Runtimeでは要件を整備するのが若干複雑です。
次の記事では、その複雑な手順をわかりやすいように解説しています。
ONNX Runtime(GPU版)が起動するところまで準備しましょう。
準備できたら、次はRembgのインストールを行います。
以上、Rembgのシステム要件を説明しました。
次は、Rembgのインストールを説明します。
Rembgのインストール
検証は、次のバージョンのPythonで行います。
> python -V Python 3.10.4
まずは、現状のインストール済みパッケージを確認しておきます。
事前にONNX Runtime(GPU版)をインストール済みです。
> pip list Package Version --------------- ------- coloredlogs 15.0.1 flatbuffers 2.0.7 humanfriendly 10.0 mpmath 1.2.1 numpy 1.23.2 onnxruntime-gpu 1.12.1 packaging 21.3 pip 22.2.2 protobuf 4.21.5 pyparsing 3.0.9 pyreadline3 3.4.1 setuptools 65.3.0 sympy 1.11 wheel 0.36.2
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、Rembgのインストールです。
Rembgのインストールは、以下のコマンドとなります。
pip install rembg
上記コマンドは、RembgのCPU版です。
GPU版Rembgをインストールするには、次のコマンドを用います。
(※ONNX Runtime(GPU版)をインストール済みなら、どっちでもいいですけどね)
pip install rembg[gpu]
Rembgのインストールは、少し時間がかかります。
終了したら、どんなパッケージがインストールされたのかを確認します。
> pip list Package Version ---------------------- ----------- aiohttp 3.8.1 aiosignal 1.2.0 anyio 3.6.1 async-timeout 4.0.2 asyncer 0.0.1 attrs 22.1.0 beautifulsoup4 4.11.1 certifi 2022.6.15 charset-normalizer 2.1.1 click 8.1.3 colorama 0.4.5 coloredlogs 15.0.1 fastapi 0.80.0 filelock 3.8.0 filetype 1.1.0 flatbuffers 2.0.7 frozenlist 1.3.1 gdown 4.5.1 h11 0.13.0 humanfriendly 10.0 idna 3.3 ImageHash 4.2.1 imageio 2.21.2 llvmlite 0.39.0 mpmath 1.2.1 multidict 6.0.2 networkx 2.8.6 numba 0.56.0 numpy 1.21.6 onnxruntime 1.12.1 onnxruntime-gpu 1.12.1 opencv-python-headless 4.6.0.66 packaging 21.3 Pillow 9.2.0 pip 22.2.2 protobuf 4.21.5 pydantic 1.10.0 PyMatting 1.1.8 pyparsing 3.0.9 pyreadline3 3.4.1 PySocks 1.7.1 python-multipart 0.0.5 PyWavelets 1.3.0 rembg 2.0.24 requests 2.28.1 scikit-image 0.19.3 scipy 1.7.3 setuptools 65.3.0 six 1.16.0 sniffio 1.2.0 soupsieve 2.3.2.post1 starlette 0.19.1 sympy 1.11 tifffile 2022.8.12 tqdm 4.64.0 typing_extensions 4.3.0 urllib3 1.26.12 uvicorn 0.18.3 watchdog 2.1.9 wheel 0.36.2 yarl 1.8.1
Rembgは、結構な数のパッケージに依存しています。
そのため、RembgはPython仮想環境へインストールすることを推奨しておきます。
以上、Rembgのインストールを説明しました。
次は、Rembgの設定を説明します。
Rembgの動作確認
Rembgの動作確認を行います。
Rembgは、次の方法で動作可能です。
- コマンドラインツール
- サーバー
- Python API(モジュール)
それぞれを以下で説明します。
コマンドラインツール
まずは、次のコマンドが動くことから確認しましょう。
> rembg --version rembg, version 2.0.24
Rembgのバージョンが表示されたら、OKです。
ヘルプを確認します。
> rembg --help Usage: rembg [OPTIONS] COMMAND [ARGS]... Options: --version Show the version and exit. --help Show this message and exit. Commands: i for a file as input p for a folder as input s for a http server
ヘルプを見ると、ファイル・フォルダ単位で処理が可能です。
ファイル単位
ファイルを指定して画像の背景削除を行う場合は、以下の形式となります。
rembg i path/to/input.png path/to/output.png
実際には、次のようなコマンドを実行します。
rembg i input/animal-1.jpg output/animal-1_out.png
animal-1.jpg
この画像から背景を削除した結果が、次の画像です。
animal-1_out.png
この結果は、驚きです。
ただ、元画像はサンプルとして用意されている画像になります。
Rembg公式(GitHub)
https://raw.githubusercontent.com/danielgatis/rembg/main/examples/animal-1.jpg
切り抜き易い画像が、用意されているだけの可能性があります。
そこで、次のフォルダ単位では適当に手に入れた画像で検証してみましょう。
フォルダ単位
フォルダを指定して画像の背景削除を行う場合は、以下の形式となります。
rembg p path/to/input path/to/output
実際には、次のようなコマンドを実行します。
rembg p inputs outputs
このとき、inputsには3つの画像が保存されています。
コマンドを実行した結果、outputs以下に画像が作成されます。
それぞれを比較した結果は、以下。
無料でこの品質の切り取りができるのは、スゴイの一言です。
サーバー
サーバーの起動は、コマンドラインから起動します。
rembgコマンドのヘルプで言えば、次のオプションです。
s for a http server
コマンドを実行すると、次のように表示されます。
> rembg s INFO: Started server process [15608] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:5000 (Press CTRL+C to quit)
ブラウザで次のURLにアクセスします。
http://localhost:5000/docs
表示されるページでは、ドキュメントを確認できます。
使い方としては、POST先を起動したサーバーのURLに設定するだけです。
<form action="http://localhost:5000" method="post" enctype="multipart/form-data" > <input type="file" name="file" /> <input type="submit" value="upload" /> </form>
Python API(モジュール)
公式では、次のパターンでのサンプルコードが公開されています。
- bytes
- PIL image
- NumPy配列
それぞれのコードが機能するか、確認します。
bytesとして処理する場合
from rembg import remove input_path = 'inputs/1.jpg' output_path = 'output/1_out.png' with open(input_path, 'rb') as i: with open(output_path, 'wb') as o: input = i.read() output = remove(input) o.write(output)
PIL imageとして処理する場合
from rembg import remove from PIL import Image input_path = 'inputs/2.jpg' output_path = 'output/2_out.png' input = Image.open(input_path) output = remove(input) output.save(output_path)
NumPy配列として処理する場合
from rembg import remove import cv2 input_path = 'inputs/3.jpg' output_path = 'output/3_out.png' input = cv2.imread(input_path) output = remove(input) cv2.imwrite(output_path, output)
すべて動きました。
コマンドラインツールでの結果と同じモノが出力されています。
以上、Rembgの動作確認を説明しました。