Pythonで画像処理:背景の削除
はじめて、目次を載せてみる。
とても便利で、とくに何も考えなくて、リンクができてほんとありがたい。
今日は、画像処理のお試し回。
Twitterでみた面白いものを試したかったの備忘録がてらの記録。
画像から背景を消すものだ。
機械学習したものぽいが詳細は知らない。
画像の準備
それほど難しくないが、まずはともあれ、画像が必要である。
ということで、画像を集める。
ここでは、icrawlerを利用させてもらう。
from icrawler.builtin import BingImageCrawler
word = "pikmin"
word = "フェットチーネ"
crawler = BingImageCrawler(storage = {'root_dir' : f'./{word}'})
try:
crawler.crawl(keyword = word, max_num = 10)
except Exception as e:
print(e)
思いつく単語で、画像を集めてみた。
筆者の小技であるのだけど、
変数wordに対して、代入した文字列の履歴をのこしている。
この場合、最初に「pikmin」を試したのだと、後からもわかる。
もちろん、配列にして単語を羅列してもよい。
背景除去
続いて、肝心の背景を除去するコードだ。
先の収集したフォルダを指定して、画像を読み出して、
remove( )に渡すだけと至ってシンプルに実行できる。
from rembg import remove
from PIL import Image
import glob
folder = 'pikmin'
folder = 'フェットチーネ'
target = f'{folder}/*.jpg'
candidate = glob.glob(target)
print(candidate)
for item in candidate:
print(item)
input_path = item # 入力画像のパス
output_path = f'{item[:-4]}_remove.png' # 出力画像のパス
print(output_path)
input = Image.open(input_path) # 入力画像を開く
output = remove(input) # 背景を除去
output.save(output_path) # 出力画像を保存
特に、問題ないと思うが、先ほど集めた画像が出力されたフォルダを
指定して、画像ファイルのリストをループで順に処理している。
環境の整備
VisualStuioの再配布のランタイムが必要になる。
2024/12/1 現在、VS2022が出ているので、ダウンロードが必要だった。
【ダウンロード」
Visual Studio Tools のダウンロード - Windows、Mac、Linux 用の無料インストール
これが少し、紛らわしいのだけど、
スクロールして下のほうに移動してほしい。
すると、「その他のTools、・・・・」があるので、
そこを開いてみてほしい。
自身の環境に応じて、
ダウンロードすると以下の実行ファイルが保存される。
Windows11ユーザの場合、通常、「x64」でいいはずだ。
当該ファイル: VC_redist.x64.exe
pipするもの:必要なライブラリ
あと、参照したサイト等には言及がなかったが、
pipするべきは、二つあった。
当然、背景を削除するためのライブラリである「rembg」だけでいいと
考えてたけど、違った。
これだけでは、動かず、「onnxruntime」も必要になった。
pip install rembg
pip install onnxruntime
注意点
これは環境依存なのか、検証はしてないが、
なぜか、実行するとフリーズする現象に見舞われた。
このrembgのモデルファイルのフリーズは、他の人はどうなんだろうか・・・
数回ためすもかわらないので、結局、止まる前の出力をキャプチャして
ダウンロード先を特定した。
その後、ブラウザで直接ダウンロードして、
キャプチャから参照したパス(ユーザディレクトリ)にファイルを配置した。
GitHubhttps://github.com/danielgatis/rembg/releases/download/v0.0.0/u2net.onnx
機械学習系のモデルは、初回は自動でダウンロードされて、
以降は、そのファイルがないかをチェックして、ダウンロードがスキップされる。お馴染みの便利処理である。今回は、176MBと大したサイズでないので、なぜ、フリーズするのかは検討がつかない。
LLMのモデルファイルは数ギガにおよぶので、途中でとまると難儀だ。
お試しの結果
ちょっと横着して、エクスプローラーの画像をそのままで失礼する。
仕事だと、ちゃんとHTMLファイルに出力するんだけど、ご愛敬。
マスク画像で学習したのか、なかなかうまく背景が削除できている。
考察
少し前にメタ社が出して、
話題になったSAMを利用したのかもしれないと推測している。
これは領域検出、いわゆるセグメンテーションしてくれる。
とても精度が高く、関心したのを覚えている。
マスク画像も出力できて、学習画像にもなりえる。
ちょっと選んだ素材が微妙で、簡単そうな写真が多いが、
サラダぽいフィットチーネの画像はさすがに苦戦して、
パプリカしか抜けてないな。
とはいえ、これはこれですごくいい。
いろいろ使えそうだ。
適用事例
よくCMとかであるエフェクトで、画面全体を白黒にして、
商品だけをカラーにするものがある。
そんな合成画像も、この背景削除を使えば簡単に作成できる。