写真に関してオンライン ツールを信頼するのはやめて、代わりにこの Python 背景リムーバーを構築してください

in tech

背景を削除するために写真をアップロードしたときに、その写真がどこに保存され、後でどうなるのか疑問に思ったことはありませんか?オンラインの背景除去ツールは使いやすいですが、利便性と制御性がトレードオフになることがよくあります。そこで、見知らぬ人のサーバーに写真をアップロードする代わりに、完全に自分のコンピュータ上で動作する背景除去ツールを構築しましょう。

私たちが構築しているもの

次のような小さなデスクトップ アプリケーションを構築します。

  • 画像を選択できます

  • AIを使って背景を除去

  • 透過PNGを保存します

  • 完全にオフラインで実行

すべてはマシン上でローカルに行われます。このプロジェクトでは、以下を使用します。

  • Python プログラミング言語 (バージョン 3.11、3.12、または 3.13)

  • 背景除去用のrembg

  • GUI 用の Tkinter

rembg は、ディープラーニングを使用して画像の背景を自動的に削除する、オープンソースの Python ライブラリおよびコマンドライン ツールです。これは、前景の対象 (人や物体など) を背景から分離できる、訓練されたニューラル ネットワークをラップします。

セットアップは最小限にとどめます。まだお持ちでない場合は、python.org から最新バージョンの Python をインストールします。ターミナルでこれを実行すると、インストールを確認できます。

python --version

次にプロジェクトフォルダーを作成します。ターミナル (PowerShell、または macOS/Linux のターミナル) を開き、次を実行します。

mkdir background-remover
cd background-remover

プロジェクト フォルダー内に Python 仮想環境を作成し、アクティブ化する必要があります。完了したら、このプロジェクトに必要なパッケージをインストールします。

pip install rembg(cpu) pillow

rembg は背景除去エンジンとなり、Pillow は画像の処理に役立ちます。これで初期設定は完了です。次に、コードの作成に進みます。

最もシンプルな背景除去ツール

内部に新しいファイルを作成します background-remover フォルダ。それを呼びましょう app.py。エディターで開き、これを追加します。

from rembg import remove
from PIL import Image

input_path = "input.jpg"
output_path = "output.png"

with Image.open(input_path) as img:
    result = remove(img)
    result.save(output_path)

これが背景除去ツール全体です。何が起こっているのか理解しましょう。

まず、インストールした 2 つのライブラリをインポートします。次に、画像ファイル名を含む入力パスと出力パスを定義します。この場合、それは現在のディレクトリにあります。という名前の画像を置きます input.jpg スクリプトと同じフォルダーにあります。

結果を次のように保存しましょう output.png PNG ファイルは透明度をサポートしているためです。 JPEG にはありません。背景が削除されると、透明なピクセルを含む画像が残ります。これは PNG でのみ適切に機能します。

次の部分では、次の 3 つのことを行います。

  1. 画像を開きます。

  2. 背景除去モデルを通じて送信します。

  3. 加工した画像を保存します。

with ステートメントにより、処理後にファイルが適切に閉じられることが保証されます。それはただ良い練習です。

今度はスクリプトを実行します。ターミナルで次のように入力します。

python app.py

初めて実行するときは、 rembg そのモデルをダウンロードします。少し時間がかかるかもしれません。その後、処理は高速かつ完全にローカルになります。すべてがうまくいけば、表示されるでしょう output.png 背景が削除された状態でフォルダーに表示されます。

ぼやけた Python コードの背景に Python のロゴが表示され、その下に黄色で「Python」という文字が書かれています。

「秘密の」Python スイッチ: 1 つのフラグでスクリプトの実行が高速になる方法

Python -O はすべてのスクリプトを魔法のように高速化するわけではありませんが、適切なワークロードでは効果が得られます。安全にテストする方法は次のとおりです。

現時点では、スクリプトは機能しますが、柔軟性がありません。 「input.jpg」のみを処理し、常に「output.png」を出力します。デモではこれで問題ありませんが、実際のツールはユーザーからの入力を受け入れます。アップグレードしましょう。を更新してください app.py これに:

import sys
import os
from rembg import remove
from PIL import Image

if len(sys.argv) < 2:
    print("Usage: python app.py ")
    sys.exit(1)

input_path = sys.argv(1)

if not os.path.exists(input_path):
    print("Error: File does not exist.")
    sys.exit(1)

filename, _ = os.path.splitext(input_path)
output_path = f"{filename}_no_bg.png"

with Image.open(input_path) as img:
    result = remove(img)
    result.save(output_path)

print(f"Background removed successfully: {output_path}")

すべて説明しますので、コードを怖がる必要はありません。まず、 sys.argv(1)。これにより、その後に入力した内容が読み取られます python app.py。たとえば、次のように実行すると、

python app.py my_image.jpg

それから sys.argv(1) になる my_image.jpg。次に、いくつかの基本的な検証を行います。の長さを判断することで、ユーザーがコマンドライン引数を渡したかどうかを確認します。 sys.argv。次に、ユーザーが渡した引数が正しいかどうかも確認します。パスまたはファイル名が間違っている場合は、ユーザーに警告します。

最後に、入力ファイル名に「_no_bg.png」を追加し、背景を削除した後に出力ファイルとして保存する自動命名システムがあります。プログラムを再度実行します。ただし、今回はファイル名を引数として渡します。

python app.py your_image.jpg
ファイル名のユーザー入力をサポートする Python 背景除去プログラム。

Python のロゴを棒グラフ、円グラフ、折れ線グラフで囲んだ様式化されたイラスト。

あなたをより優れたプログラマーにする 5 つの強力な Python ワンライナー

10 行のコードを書く必要があるのに、なぜ 10 行も書く必要があるのでしょうか。魔法の変数スワップから高速データカウントまで、これらの Python スニペットはコードを変換します。

本物のデスクトップアプリに変える

コマンドラインバージョンは強力です。しかし、誰もがターミナルを開いてコマンドを入力したいわけではありません。 Tkinter を使用して、これをグラフィカル Python アプリに変換してみましょう。

Tkinter は Python に同梱されているため、新しい依存関係は必要ありません。同じ背景削除ロジックを再利用し、その上にビジュアル レイヤーを追加します。

という名前の新しいファイルを作成しましょう gui_app.py。単純なウィンドウを作成します。

import tkinter as tk

root = tk.Tk()
root.title("Background Remover")
root.geometry("400x400")

root.mainloop()

実行してみます。

python gui_app.py

小さな空のウィンドウが表示されます。それが私たちの拠点です。次に、ユーザーがファイル ピッカーを使用して画像を選択できるようにしましょう。ファイルを更新します。

import tkinter as tk
from tkinter import filedialog, messagebox
from rembg import remove
from PIL import Image, ImageTk
import os

selected_file = None

def select_file():
    global selected_file
    file_path = filedialog.askopenfilename(
        filetypes=(("Image Files", "*.jpg *.jpeg *.png *.webp"))
    )
    if file_path:
        selected_file = file_path
        status_label.config(text=f"Selected: {os.path.basename(file_path)}")
        
        img = Image.open(file_path)
        img.thumbnail((250, 250)) 
        tk_img = ImageTk.PhotoImage(img)
        preview_label.config(image=tk_img)
        preview_label.image = tk_img

root = tk.Tk()
root.title("Background Remover")
root.geometry("400x400")

select_button = tk.Button(root, text="Select Image", command=select_file)
select_button.pack(pady=10)

status_label = tk.Label(root, text="No file selected")
status_label.pack()

# Create a label specifically for the image preview
preview_label = tk.Label(root)
preview_label.pack(pady=10)

root.mainloop()

ボタンをクリックして画像を選択できるようになりました。ファイル名がウィンドウに表示され、適切なプレビューが表示されます。では、実際の処理を接続してみましょう。この関数を上に追加します root.mainloop():

def remove_background():
    if not selected_file:
        messagebox.showerror("Error", "Please select an image first.")
        return

    filename, _ = os.path.splitext(selected_file)
    output_path = f"{filename}_no_bg.png"

    try:
        with Image.open(selected_file) as img:
            result = remove(img)
            result.save(output_path)

        messagebox.showinfo("Success", f"Saved to:\n{output_path}")
    except Exception as e:
        messagebox.showerror("Error", str(e))

次にボタンを追加します。

remove_button = tk.Button(root, text="Remove Background", command=remove_background)
remove_button.pack(pady=10)

上記関数の後に配置します。次にプログラムを実行します。画像を選択します。 「背景を削除」ボタンを押します。出力は同じフォルダーに保存されます。

GUI を備えた Python 背景削除ツール。

それでおしまい。スクリプトをデスクトップ アプリケーションに変換しました。

その他のアップグレード方法

最小限に抑えようとしました。必要に応じて、これを磨き上げる方法は無限にあります。まず、結果のプレビューを表示して、同じウィンドウに並べて表示することもできます。バッチ処理を追加すると、複数の画像の背景を一度に削除できます。プログレスバーなどの視覚的な機能を追加したり、ユーザーの利便性を高めるためにドラッグ アンド ドロップを追加したりすることもできます。

このプロジェクトのもう 1 つの素晴らしいアイデアは、PyInstaller を使用してプロジェクトをスタンドアロンの実行可能ファイルに変えることです。こうすることで、コマンド ラインからプログラムを再度実行する必要がなくなります。通常のソフトウェアと同様に、アプリをダブルクリックするだけで実行できます。


次回、画像の背景を簡単に削除する必要がある場合は、画像をサードパーティのサイトにアップロードしたり、無料枠の制限に達したりすることを心配する必要はありません。なぜなら、あなたは今、独自のツールを持っているからです。最終的に洗練されたバージョンは、私の GitHub で見つけることができます。

関連記事

前の投稿
実際に使いたい、見過ごされがちな 4 つの Linux シェル
次の投稿
体重を減らすのに最適な運動の種類