Rembgで画像から背景を削除


press
Rembgで画像から背景を削除

Rembgで画像から背景を削除

先日、SNSで見た画像の背景を削除して切り抜くPythonのライブラリを見つけたので早速試してみました。普段業務で画像の背景を処理することも多くソフトを使って背景を削除していたので、Pythonで背景を削除できたら自動化できそうだなと思いました。

試しに今回はルービックキューブと泡盛の瓶の背景を削除してみましたが、Photoshopなどの画像編集ソフトを使って背景を削除したのと変わらない(言われても分からない)クオリティで背景を削除できました。実行時間も一枚あたり数秒で完了するので、大量の画像を処理するときはソフトを使うよりもこのライブラリを使ったほうが大幅に時間短縮が可能です。

GitHubにあるサンプルコードは画像を指定して一度に一枚しか背景処理ができませんが、変更を加えてフォルダ内の全画像をまとめて背景を削除できるようにしました。その際に進捗が分かるようにtqdmで処理の進捗を表示させています。

ルービックキューブの背景処理

ルービックキューブ
ルービックキューブ(背景処理)

波照間島の幻の泡盛「泡波」の背景処理

泡波
泡波(背景処理)

開発環境

PC: MacBook Pro (14, 2021)
OS: macOS Monterey 12.0.1
Python: 3.9.1

背景削除のコード

import glob

from tqdm import tqdm
from rembg import remove
from PIL import Image

ORIGINAL_DIR = "original/"
OUTPUT_DIR = "convert/"

lst = glob.glob(ORIGINAL_DIR + "*")
for i, l in enumerate(tqdm(lst)):
    input = Image.open(l)
    output = remove(input)
    output.save(OUTPUT_DIR + l.split('/')[1])

解説

import glob
from tqdm import tqdm
from rembg import remove
from PIL import Image
ライブラリをインポート

ORIGINAL_DIR = "original/"
OUTPUT_DIR = "convert/"
背景を切り抜く画像を入れるフォルダと切り抜いた画像を保存するディレクトリ名を指定

lst = glob.glob(ORIGINAL_DIR + "*")
背景を切り抜く画像を取得(*でORIGINAL_DIR内の全ファイルを指定)

for i, l in enumerate(tqdm(lst)):
リストで取得した全データを一件づつ処理
tqdmで処理の進捗を表示

input = Image.open(l)
画像を開く

output = remove(input)
画像の背景を削除

output.save(OUTPUT_DIR + l.split('/')[1])
背景を削除した画像を保存(splitで/の後の画像名を保存する画像名に指定)


株式会社ファントムへのお問い合わせ

群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。




    Related Articles

    Django

    DjangoでQuerySetをpandasのDataFrameに変換する

    DjangoでQuerySetで取得したデータをそのままpandasのDataFrameに変換する方法です。データを成形する必要がないときや、とりあえず全件CSV化したいときなどに便利な方法です。

    Posted on by press
    Python

    PythonでYouTubeの動画をダウンロード

    PythonでYouTubeの動画をダウンロード YouTubeの動画をPythonでダウンロードします。今回使うyt-dlpはyoutube-dlのフォークで、youtube-dlよりもダウンロード速度が高速です。Py […]

    Posted on by press

    最新情報をお届けします!

    メーリングリストに登録するとファントムの最新情報をお届けします

    お客様のメールアドレスを共有することはありません