・画像中の人物の切り抜きをしたい方
・コラ画像素材を作りたい方
など
背景を簡単に削除する方法を調べていると
RembgというPythonライブラリを見つけてしまったので紹介させていただきます。
RembgはPythonで書かれたオープンソースの画像処理ライブラリであり、画像から背景を削除するための機能を提供しています。
本記事では、Rembgの使い方や機能について詳しく説明し、実際に画像背景削除を行う手順を紹介します。
インストール
Rembg は Python 3.8~3.10のバージョンのみ対応しているので注意してください。
インストールはpipでインストールします。
CPU対応とGPU対応があるのですが、CPU対応は
pip install rembg
でインストールできます。
GPUもonnxruntime-gpuに対応していれば
pip install rembg[gpu]
で使えるそうです。
私のPCはMacでCPU対応しかなかったのですが、GPU対応の方が計算スピード速くなりそう。
背景を透明にする画像
photoACさんからフリー画像としてとして、以下の女性の画像を使わせてもらいました。
名前はinput.jpgとして保存しました。
サンプルプログラム
input.jpgと以下のPythonファイルを同じディレクトリに置いて、Pythonを実行します。
from rembg import remove
import cv2
def main():
input_path = 'input.jpg'
output_path = 'output.jpg'
input = cv2.imread(input_path)
output = remove(input)
cv2.imwrite(output_path, output)
if __name__ == "__main__":
main()
このコードを実行すると、同じディレクトリに背景が削除されたoutput.jpgが出力されます。
実行結果
output.jpgはこんな感じになります。
綺麗に切り抜きすぎていて、私が手作業で切り抜いたと思われるかもしれませんが
こちら本当に、Rembgの上のコードで実行した結果になります。
最初私は凄すぎて
「ふえ! ふえあ!」
と謎の奇声をあげてしまいました。
それくらい綺麗に切り抜きができます。
使われている技術
このライブラリでは画像系ディープラーニングのSaliency Object Detection(SOD)というジャンルの中のU2-Netというモデルが使用されております。
まずSaliency Object Detection(SOD)とは、画像内で注目すべき領域を自動的に検出する技術のことを指します。
U2-Netは2020年に論文で発表されたモデルだそうです。
名前からして、セマンティックセグメンテーションの手法のU-Netの進化系なんだろうなという感じですが
実際そうらしいです。
このあたりの話は、色々なサイト様が紹介されておりますし、
もっと勉強されたい方は元論文を是非ご参照ください。
おわりに
ここまで読んでいただき、ありがとうございました。
最近だとiphoneなども、こうした切り抜き技術を搭載してますよね。
CPUでもかなり高速に、切り抜きができるので最近のディープラーニングの技術凄すぎると感動しております。
私が学生だったときはU-netのようなセマンティックセグメンテーションがよくディープラーニングの教科書にも載っておりましたね。その時は自動運転に使われるんだという話が載っておりました。
それがまさか進化して切り抜きに使われるのは、ちょっと面白いです。