本ページはプロモーションが含まれています

【GIMP2/3対応】GIMPのAI画像背景削除プラグインで超時短&微調整が可能に!!

gimp-ai-background-remove-plugin-python-fu-eye-catch 解説
スポンサーリンク
スポンサーリンク

近年AI登場によって、画像の背景削除がかなり簡単にできるようになりました。

Web上で無料利用できるとか、すごすぎ!!

しかし、意図に反して必要な部分が削除されたり、不要な部分が残ったりした経験、一度や二度はあるのではないでしょうか?

「もう少し削除範囲を調整したい」
「背景だけをキレイに残したい」
「背景削除以外の画像加工をしたい」

本記事では、そういった悩みを解決します。

無料ソフト「GIMP」に「AI背景削除プラグイン」を導入し、背景を削除する方法を詳しく解説していきます。

さらに、AI背景削除プラグインも配布しています。
※海外の有識者の方が作成したものをベースに、改良したものになります。

図をたくさん使用して説明していますので、初めての方でもわかりやすいかと思います。

それでは一緒にやっていきましょう!

このページでわかること
  • GIMPプラグイン「AI背景削除」の機能説明
  • プラグイン配布
    ※GIMP2/3の両バージョン対応
  • ソースコード
  • 導入方法
  • 使用方法

GIMPプラグイン「ガイド一括生成プラグイン」も公開しています。興味のある方はぜひ、ご活用ください。

スポンサーリンク

GIMP本体

GIMP本体が必要な場合は、こちらからダウンロードしてください。

GIMP2
※最終安定バージョンは、GIMP 2.10.38です。

GIMP3

スポンサーリンク

AI画像背景削除 for GIMP

概要

Pythonライブラリ「Rembg」というAI背景削除ツールを、GIMP上で呼び出して使いやすくするプラグインとなります。

作成の際、こちらのサイトを参考にさせて頂きました。ありがとうございます。この場をお借りして、心より感謝いたします。

使いやすくするように、オリジナルから以下の内容を改良しています。

英語→日本語表記
レイヤー名が学習モデル名になるよう変更
学習モデル(太文字)を追加
  u2net / u2netp / u2net_human_seg
  u2net_cloth_seg / silueta / isnet-general-use
  isnet-anime /
sam / birefnet-general
  birefnet-general-lite / birefnet-portrait
  birefnet-dis / birefnet-hrsod
  birefnet-cod / birefnet-massive

機能

編集したい画像を自動で分析し、背景を自動で削除します。さらに削除範囲をマスク(選択範囲)として保存します。

選択範囲として残しておける機能が、かなり便利!!もうWeb版のAI背景削除には戻れなくなります!!

ダウンロード

GIMP2と3では、仕様がまったく別物のため、プラグインを共通化できません。

そのため、ご利用のGIMPバージョンにあわせて、プラグインをダウンロードしてください。
※セキュリティ面を考慮して、Google Driveにファイルを保管しています。

導入方法

プラグインを動作させるために、色々と下準備が必要となります。詳しくはこちらを参考にしてください。

Pythonのインストール
rembgのインストール
GIMPのAI背景削除プラグインの導入

注意事項

ダウンロードファイルを解凍後、フォルダごとGIMPのプラグインフォルダに設置してください。詳しくは、こちらで解説しています。

GIMP3のプラグイン設置の注意事項

以下のルールを守らないと、プラグインが読み込みません。

Plug-insフォルダの直下にフォルダを用意し、その中にプラグインファイルの配置が必要。
Plug-insフォルダ直下にプラグインファイルを直接置くことができない。
フォルダ名は、プラグインファイルと同名にしなければならない。

フォルダとプラグインが違う名前になっていて、読み込まないことに気づかず、無駄な時間を過ごしました…。注意されたし!!

ソースコード

ソースコードも掲載しておきます。
ぜひ、自分色にアレンジしてみてください。

  • GIMP2以前
  • GIMP3以降
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 原作者:James Huang <elastic192@gmail.com>
#         https://elastic192.blogspot.com/

from gimpfu import *
import os, sys, string, tempfile
import platform
import subprocess

def Rembg(image, drawable, asMask, selModel, AlphaMatting, aeValue):

	#ユーザー設定部分
	#rembg.exeのアドレスを指定する
	aiExe = r"C:\Users\■■■\AppData\Local\Programs\Python\Python■■■\Scripts\rembg.exe"
	#初期値:aiExe = r"C:\Users\■■■\AppData\Local\Programs\Python\Python■■■\Scripts\rembg.exe"

	#画像処理をするアドレスを指定する
	tdir = tempfile.gettempdir()
	#初期値:tdir = tempfile.gettempdir()

	#学習モデル
	tupleModel = ("u2net","u2net_human_seg","u2net_cloth_seg","u2netp","silueta","isnet-general-use",\
"isnet-anime","sam","birefnet-general","birefnet-general-lite","birefnet-portrait",\
"birefnet-dis","birefnet-hrsod","birefnet-cod","birefnet-massive")

	removeTmpFile = True
	OutputMessage = False
	osName = platform.system()
	exportSep = str(os.sep)
	if OutputMessage:
		pdb.gimp_message(tdir)
	jpgFile = "%s%sTemp-gimp-0000.jpg" % (tdir, exportSep)
	pngFile = "%s%sTemp-gimp-0000.png" % (tdir, exportSep)
	errFile = "%s%sErrMsg.txt" % (tdir, exportSep)
	x1 = 0
	y1 = 0
	option = ""

	image.undo_group_start()
	curLayer = pdb.gimp_image_get_active_layer(image)
	x1, y1 = curLayer.offsets

	gimp.progress_init("AI背景除去を実行中...")
	gimp.progress_update(0.1)

	if pdb.gimp_selection_is_empty(image):
		pdb.file_jpeg_save(image, drawable, jpgFile, jpgFile, 0.95, 0, 1, 0, "", 0, 1, 0, 0)
	else:
		pdb.gimp_edit_copy(drawable)
		non_empty, x1, y1, x2, y2 = pdb.gimp_selection_bounds(image)
		tmpImage = gimp.Image(x2-x1, y2-y1, 0)
		tmpDrawable = gimp.Layer(tmpImage, "Temp", tmpImage.width, tmpImage.height, RGB_IMAGE, 100, NORMAL_MODE)
		pdb.gimp_image_add_layer(tmpImage, tmpDrawable, 0)
		pat = pdb.gimp_context_get_pattern()
		pdb.gimp_context_set_pattern("Leopard")
		pdb.gimp_drawable_fill(tmpDrawable, 4)
		pdb.gimp_context_set_pattern(pat)
		pdb.gimp_floating_sel_anchor(pdb.gimp_edit_paste(tmpDrawable,TRUE))
		pdb.file_jpeg_save(tmpImage, tmpDrawable, jpgFile, jpgFile, 0.95, 0, 1, 0, "", 0, 1, 0, 0)
		pdb.gimp_image_delete(tmpImage)

#Rembg操作
	if OutputMessage:
		pdb.gimp_message(aiExe)
	if AlphaMatting:
		option = "-a -ae %d" % (aeValue)
	cmd_list = [aiExe, "i", "-m", tupleModel[selModel]]
	if option:
		cmd_list.extend(option.split())
	cmd_list.extend([jpgFile, pngFile])

	creationflags = 0

	process = subprocess.Popen(cmd_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

	while process.poll() is None:
		gimp.progress_update(0.7)
		gimp.displays_flush()
		import time
		time.sleep(0.1)

	stdout, stderr = process.communicate()

	if OutputMessage:
		pdb.gimp_message(str(stderr.decode('cp950', errors='ignore')))
		if os.path.exists(errFile):
			with open(errFile, "r", encoding='cp950') as fp:
				output = fp.read()
				if len(output) > 0:
					unicodestr = output.encode('utf-8')
					if OutputMessage:
						pdb.gimp_message(unicodestr)
			os.remove(errFile)
			if len(output) > 0 and not OutputMessage:
				pdb.gimp_message(unicodestr)

	gimp.progress_update(0.8)

#GIMP操作


	#GIMPに追加されるレイヤー名
	layer_name = str(tupleModel[selModel])
	if asMask:
		layer_name =layer_name + "-mask"
	if AlphaMatting:
		layer_name =layer_name + "-am-" + str(aeValue)

	file_exists = os.path.exists(pngFile)
	if file_exists:
		newlayer = pdb.gimp_file_load_layer(image, pngFile)
   		image.add_layer(newlayer, -1)
		pdb.gimp_layer_set_name(newlayer, layer_name)
   		pdb.gimp_layer_set_offsets(newlayer, x1, y1)
   		if asMask:
   			pdb.gimp_image_select_item(image, CHANNEL_OP_REPLACE, newlayer)
   			image.remove_layer(newlayer)
			copyLayer = pdb.gimp_layer_copy(curLayer, TRUE)
			image.add_layer(copyLayer, -1)
			pdb.gimp_layer_set_name(copyLayer, layer_name)
			mask=copyLayer.create_mask(ADD_SELECTION_MASK)
			copyLayer.add_mask(mask)
			pdb.gimp_selection_none(image)

	gimp.progress_update(0.9)
	image.undo_group_end()
	gimp.displays_flush()

	if removeTmpFile:
		if osName == "Windows":
			del_command = "del \"%s%sTemp-gimp-0000.*\"" % (tdir, exportSep)
		else:
			del_command = "rm %s%sTemp-gimp-0000.*" % (tdir, exportSep)
		os.system(del_command)

register(
    "Rembg",
    "AI背景除去",
    "AI背景除去",
    "JamesH, <elastic192@gmail.com>",
    "JamesH, https://elastic192.blogspot.com",
    "2022/6/4",
    "<Image>/プラグイン/AI背景除去(Rembg)",
    "RGB*",
    [
       (PF_TOGGLE, "asMask", ("レイヤーマスクを作成する"), True),
       (PF_OPTION,"selModel","学習モデル", 0, tupleModel),
       (PF_TOGGLE, "AlphaMatting", ("アルファマット"), False),
       (PF_SPINNER,"aeValue", ("アルファマット侵食サイズ"), 15, (1,100,1))
    ],
    [],
    Rembg,
    domain=("gimp20-python", gimp.locale_directory))

main()
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 原作者:James Huang <elastic192@gmail.com>
#         https://elastic192.blogspot.com/

import sys
import os, string, tempfile
import platform
import subprocess
import gi
gi.require_version('Gimp', '3.0')
from gi.repository import Gimp
gi.require_version('GimpUi', '3.0')
from gi.repository import GimpUi
from gi.repository import GLib
from gi.repository import GObject
from gi.repository import Gio
import time


def N_(message): return message
def _(message): return GLib.dgettext(None, message)

#学習モデル一覧
tupleModel = ("u2net","u2net_human_seg", "u2net_cloth_seg", "u2netp", "silueta", "isnet-general-use", "isnet-anime",
              "birefnet-general","birefnet-general-lite","birefnet-portrait","birefnet-dis","birefnet-hrsod","birefnet-cod","birefnet-massive")

#ユーザー設定部分

#rembg.exeのアドレスを指定する
aiExe = r"C:\Users\■■■\AppData\Local\Programs\Python\Python■■■\Scripts\rembg.exe"
#初期値:aiExe = r"C:\Users\■■■\AppData\Local\Programs\Python\Python■■■\Scripts\rembg.exe"

#画像処理をするアドレスを指定する
tdir = tempfile.gettempdir()
#初期値:tdir = tempfile.gettempdir()

def pdbCall(procedureName, args):
    pdb_proc   = Gimp.get_pdb().lookup_procedure(procedureName)
    pdb_config = pdb_proc.create_config()
    for x in args:
        pdb_config.set_property(x, args[x])
    return pdb_proc.run(pdb_config)

def store_layer_png(image, drawable, path):
    interlace, compression = 0, 2

    _, x, y = drawable.get_offsets()
    width, height = drawable.get_width(), drawable.get_height()
    tmp_img = Gimp.Image.new(width, height, image.get_base_type())
    drawable.set_offsets(0, 0)
    tmp_layer = Gimp.Layer.new_from_drawable (drawable, tmp_img)
    tmp_img.insert_layer (tmp_layer, None, 0)
    drawable.set_offsets(x, y)
    
    args = {
      "run-mode": Gimp.RunMode.NONINTERACTIVE,
      "image": tmp_img,
      "file": Gio.File.new_for_path(path),
      "options": None,
      "interlaced": interlace,
      "compression": compression,
      "bkgd": True,
      "offs": False,
      "phys": True,
      "time": True,
      "save-transparent": True
    }
    pdbCall('file-png-export', args);

    tmp_img.delete()
    
def store_layer_jpg(image, drawable, path):
    _, x, y = drawable.get_offsets()
    width, height = drawable.get_width(), drawable.get_height()
    tmp_img = Gimp.Image.new(width, height, image.get_base_type())
    drawable.set_offsets(0, 0)
    tmp_layer = Gimp.Layer.new_from_drawable (drawable, tmp_img)
    tmp_img.insert_layer (tmp_layer, None, 0)
    drawable.set_offsets(x, y)
    
    args = {
      "run-mode": Gimp.RunMode.NONINTERACTIVE,
      "image": tmp_img,
      "file": Gio.File.new_for_path(path),
      "options": None,
      "quality": 0.95,
      "smoothing": 0,
      "optimize": True
    }
    pdbCall('file-jpeg-export', args);
    
    tmp_img.delete()

def RemoveBG(procedure, run_mode, image, drawables, config, data):
    if run_mode == Gimp.RunMode.INTERACTIVE:
        GimpUi.init('plug-in-RemoveBG-python')
        dialog = GimpUi.ProcedureDialog(procedure=procedure, config=config)
        dialog.fill(["asMask"])
        dialog.fill(["AlphaMatting"])
        dialog.fill(["aeValue"])
        dialog.get_int_combo("selModel", GimpUi.IntStore.new (tupleModel))
        dialog.fill(["selModel"])
        if not dialog.run():
            return procedure.new_return_values(Gimp.PDBStatusType.CANCEL, GLib.Error())
            
    removeTmpFile = True
    OutputMessage = False
    osName = platform.system()
    exportSep = str(os.sep)
    
    if OutputMessage:
        Gimp.message(tdir)
    jpgFile = os.path.join(tdir, "Temp-gimp-0000.jpg")
    pngFile = os.path.join(tdir, "Temp-gimp-0000.png")
    errFile = os.path.join(tdir, "ErrMsg.txt")
    x1 = 0
    y1 = 0
    option = ""
    
    Gimp.progress_init("AI背景削除中")
    Gimp.progress_update(0.0)
            
    
    asMask       = config.get_property('asMask')
    AlphaMatting = config.get_property('AlphaMatting')
    aeValue      = config.get_property('aeValue')
    selModel     = config.get_property('selModel')
    
    if OutputMessage:
        msg = "data: %s %s %d %s" % (asMask, AlphaMatting, aeValue, tupleModel[selModel])
        Gimp.message(msg)

    if OutputMessage:
        Gimp.message(aiExe)

    if AlphaMatting:
        option = "-a -ae %d" % (aeValue)
  
    command_args = [
    aiExe,
    "i",
    "-m",
    tupleModel[selModel]
    ]

    if option:
        command_args.extend(option.split()) 

    command_args.append(jpgFile)
    command_args.append(pngFile)

    if OutputMessage:
        Gimp.message("構築されたコマンド(リスト形式):" + str(command_args))
 
    Gimp.progress_update(0.1)

    Gimp.context_push()
    image.undo_group_start()
    
    drawable = drawables[0]
    curLayer = drawable
    _, x1, y1 = drawable.get_offsets()
    Gimp.progress_update(0.2)
    
    store_layer_jpg(image, drawable, jpgFile)
    Gimp.progress_update(0.4)
    
    max_attempts = 10
    wait_interval = 0.2 

    file_ready = False
    for i in range(max_attempts):

        if os.path.exists(jpgFile) and os.path.getsize(jpgFile) > 0:
            file_ready = True
            break
        time.sleep(wait_interval)
        Gimp.message(f"一時ファイル '{jpgFile}' の準備を待機中... ({i+1}/{max_attempts}回目)")
    
    if not file_ready:
        Gimp.message(f"エラー: 一時ファイル '{jpgFile}' が時間内に生成されませんでした。処理を中止します。")
        image.undo_group_end() # エラーで終了する場合もundoを閉じる
        Gimp.context_pop()
        Gimp.progress_end()
        return procedure.new_return_values(Gimp.PDBStatusType.FAIL, GLib.Error())

    try:

        result = subprocess.run(
            command_args,
            check=True,
            capture_output=True,
            text=True,
            shell=False
        )

        if OutputMessage and result.stdout:
            Gimp.message("rembg.exe 標準出力:\n" + result.stdout)
        if OutputMessage and result.stderr:
            Gimp.message("rembg.exe 標準エラー:\n" + result.stderr)


    except subprocess.CalledProcessError as e:

        error_message = f"rembg.exe の実行エラー:\n"
        error_message += f"コマンド: {e.cmd}\n"
        error_message += f"戻り値: {e.returncode}\n"
        if e.stdout:
            error_message += f"標準出力:\n{e.stdout}\n"
        if e.stderr:
            error_message += f"標準エラー:\n{e.stderr}"
        Gimp.message(error_message)
        
        image.undo_group_end()
        Gimp.context_pop()
        Gimp.progress_end()
        return procedure.new_return_values(Gimp.PDBStatusType.FAIL, GLib.Error())


    except FileNotFoundError:
        Gimp.message(f"エラー: rembg.exe が見つかりません。\nパス: {aiExe} を確認してください。")
        image.undo_group_end()
        Gimp.context_pop()
        Gimp.progress_end()
        return procedure.new_return_values(Gimp.PDBStatusType.FAIL, GLib.Error())

    except Exception as e:
        Gimp.message(f"不明なエラーが発生しました: {e}")
        image.undo_group_end()
        Gimp.context_pop()
        Gimp.progress_end()
        return procedure.new_return_values(Gimp.PDBStatusType.FAIL, GLib.Error())

    Gimp.progress_update(0.8)

    Gimp.progress_update(0.9)
    file_exists = os.path.exists(pngFile)
    if file_exists:
        args = {
          "run-mode": Gimp.RunMode.NONINTERACTIVE,
          "image": image,
          "file": Gio.File.new_for_path(pngFile)
        }
        result = pdbCall('gimp-file-load-layer', args);
        if (result.index(0) == Gimp.PDBStatusType.SUCCESS):
            gimp_layer = result.index(1)

            gimp_layer.set_offsets(x1, y1)
            image.insert_layer(gimp_layer, drawable.get_parent(),
                               image.get_item_position(drawable))
            if asMask:
                image.select_item(2, gimp_layer)
                image.remove_layer(gimp_layer)
                copyLayer = Gimp.Layer.copy(curLayer)
                image.insert_layer(copyLayer, drawable.get_parent(),
                               image.get_item_position(drawable))

            layer_name = str(tupleModel[selModel])
            if asMask:
            	layer_name =layer_name + "-mask"
            if AlphaMatting:
            	layer_name =layer_name + "-am-" + str(aeValue)

            copyLayer.set_name(layer_name)
            mask=copyLayer.create_mask(4)
            copyLayer.add_mask(mask)
            Gimp.Selection.none(image)
        else:
            print("Error loading layer from openraster image.")
    
    Gimp.displays_flush()
    image.undo_group_end()
    Gimp.context_pop()
    
    if removeTmpFile:
        if osName == "Windows":
            del_command = f"del \"{os.path.join(tdir, 'Temp-gimp-0000.*')}\""
        else:
            del_command = f"rm {os.path.join(tdir, 'Temp-gimp-0000.*')}"
        os.system(del_command)

    Gimp.progress_update(1.0)
    Gimp.progress_end()
    
    return procedure.new_return_values(Gimp.PDBStatusType.SUCCESS, GLib.Error())

class AIRemoveBG (Gimp.PlugIn):
    def do_query_procedures(self):
        return [ "plug-in-RemoveBG-python" ]

    def do_set_i18n (self, name):
        return False

    def do_create_procedure(self, name):
        procedure = Gimp.ImageProcedure.new(self, name,
                                             Gimp.PDBProcType.PLUGIN,
                                             RemoveBG, None)

        procedure.set_image_types("*")

        procedure.set_menu_label("AI背景削除")
        procedure.add_menu_path('<Image>/プラグイン/')

        procedure.set_documentation("AI背景削除",
                                     "AI背景削除",
                                     name)
        procedure.set_attribution("JamesH", "JamesH", "2023")
        
        procedure.add_boolean_argument ("asMask", _("_レイヤーマスクを作成"), _("レイヤーマスクを作成"),
                                         True, GObject.ParamFlags.READWRITE)
        procedure.add_boolean_argument ("AlphaMatting", _("_アルファマット"), _("アルファマット"),
                                         False, GObject.ParamFlags.READWRITE)
        procedure.add_int_argument ("aeValue", _("アルファ_マット侵食サイズ"), _("アルファマット侵食サイズ"),
                                         1, 100, 15, GObject.ParamFlags.READWRITE)
        procedure.add_int_argument ("selModel", _("学習_モデル"), _("学習モデル"),
                                         0, len(tupleModel), 0, GObject.ParamFlags.READWRITE)

        return procedure

Gimp.main(AIRemoveBG.__gtype__, sys.argv)
スポンサーリンク

プラグインの導入方法

Pythonのインストール

Pythonとは?
プログラミング言語の一つ。C言語などと比較した場合、シンプルで読みやすいコードで動作するため、初心者でも学習しやすい言語として、非常に人気があります。

今回のプラグインは、Pythonが動作できる環境を用意する必要があります。

  • 1
  • 2
    セットアップファイルをダウンロードする
  • 3
    Pythonをインストールする

    セットアップファイルを実行し、インストールを進めていきます。

    ②の「Add python.exe to PATH」は必ずチェックを入れてください。

    環境変数に「python.exe」の場所を追加することで、コマンドプロンプトやPowershellで、Pythonを簡単に実行することができるようになります。

  • 4
    コマンドプロンプトを「管理者権限」で起動する

    Win+Rを押すか、スタートメニューから起動してください。

    cmd」と入力後、Ctrl+Shift+Enterを押してください。

  • 5
    Pythonが正常に動作するか確認する

    コードをコピーします。

    python -V

    コマンドプロンプトに右クリックで貼り付けて、実行してください。

    正常にPythonがインストールされている場合は、図のようにPythonのバージョンが表示されます。

rembgのインストール

先ほどインストールした「Python」に、rembgをインストールしていきます。

rembgには「CPU版」と「GPU版」が存在しますが、「GPU版」を導入してもGIMP上ではCPUで処理されてしまいます。そのため導入の簡単な「CPU版」で解説を進めていきます。

  • 1
    コマンドプロンプトを「管理者権限」で起動する

    ※Pythonインストール後にコマンドプロンプトを閉じていなければ、この作業は不要です。

    Win+Rを押すか、スタートメニューから起動してください。

    cmd」と入力後、Ctrl+Shift+Enterを押してください。

  • 2
    「rembg」と関連ライブラリをインストールする

    以下のコードをコピーします。

    pip install rembg onnxruntime click filetype watchdog aiohttp gradio asyncer

    公式サイトに記載の「rembg」と「onnxruntime」だけでは不足のライブラリがあるため、追記しています。

    コマンドプロンプトに右クリックで貼り付けて、実行してください。

    インストール完了後は、「C:\Windows\System32>」と表示されます。

  • 3
    デスクトップに画像を用意する

    「test.jpg」というファイル名の画像を用意し、デスクトップに置いてください。

    「rembg」の動作確認に必要な作業となります

    ※画像の用意が難しい場合は、以下の画像を「右クリック」→「名前をつけて保存」でデスクトップに保存してください。

    rembg動作確認用画像
  • 4
    「rembg」を実行する

    以下のコードをコピーします。

    rembg i "C:\Users\%USERNAME%\Desktop\test.jpg" "C:\Users\%USERNAME%\Desktop\test-a.jpg"

    コマンドプロンプトに右クリックで貼り付けて、実行してください。

  • 5
    出力された「test-a.jpg」の背景がないことを確認する

    図のように、背景が削除されていればOKです。

    もしエラーが出た場合は、図のように不足のライブラリをインストールしてください。

    コピー用のコードを置いておきます。
    ※●●●●には不足のライブラリ名を入力してください。

    pip install ●●●●

    rembgのインストールは、以上となります。

GIMPプラグインの導入

下準備が完了したので、あとはGIMPプラグインを導入するだけ完了です。

もう少しなのでがんばりましょう!

  • 1
    プラグインをダウンロードする

    本記事では、GIMP3に導入する手順で進めていきます。
    ※GIMP2はダウンロードするファイルが異なりますが、導入方法は変わりません。参考にしてください。

    プラグインはこちらからダウンロードしてください。

  • 2
    ダウンロードしたファイルを解凍する
  • 3
    Pythonファイルを編集する

    先ほどインストールした「rembg」の場所を指定する必要があります。

    手順が多くてややこしいですが、頑張りましょう!!

    メモ帳でPythonファイルを開きます。

    次に「Python」フォルダにアクセスします。

    C:\%USERPROFILE%\AppData\Local\Programs\Python\

    「rembg.exe」まで移動します。

    AppData フォルダは通常「隠しフォルダ」になっていて見えません。表示したい場合は、適当なフォルダから図のように「隠しファイル」にチェックを入れてください。

    「rembg.exe」のアドレスをコピーします。

    先ほど開いたPythonファイル内の「aiExe」のアドレス部分を上書きします。

    Pythonファイルを保存します。

    Pythonファイルの設定は、以上となります。

  • 4
    GIMPのプラグインフォルダを確認する

    GIMPを起動し、「編集」→「設定」にアクセスしてください。

    「フォルダ」→「プラグイン」から、フォルダアドレスを選択後、右上のアイコンをクリックしてください。

    初期状態では、以下の2ヶ所がプラグインフォルダとなっています。違いは以下のとおりです。どちらにプラグインを設置するか使い分けてください。

    コンピュータ全体に適用する場合

    GIMP2
    C:\Program Files\GIMP 2\lib\gimp\2.0\plug-ins
    GIMP3
    C:\Program Files\GIMP 3\lib\gimp\3.0\plug-ins

    ユーザー毎に適用する場合

    GIMP2
    C:\Users\%USERNAME%\AppData\Roaming\GIMP\2.10\plug-ins
    GIMP3
    C:\Users\%USERNAME%\AppData\Roaming\GIMP\3.0\plug-ins

  • 5
    プラグインをフォルダごと移動させる

    開いたプラグインフォルダに、先程解凍したファイルを「RemoveBG」フォルダごと移動させてください。

    以下のようになればOKです。

    これで、プラグインが使えるようになりました。

プラグインの使い方

  • 1
    GIMPを起動し、編集したい画像を開く
  • 2
    プラグインを起動する

    メニューバーの「プラグイン」→「AI背景削除」の順にアクセスします。

    「プラグイン」メニューは、本プラグインが正常に動作している場合に表示されます。このメニューが見つからない場合は、プラグインが正しく読み込まれていない可能性があります。

  • 3
    背景削除の設定をする

    プラグイン(rembg)の設定が必要なので、各パラメーターについて解説します。

    レイヤーマスクを作成

    チェックを入れると、削除範囲をマスク(選択範囲)として残しておきます。

    選択範囲の微調整に必要なので、基本的にはチェックを入れておきましょう。

    アルファマットの作成とサイズ

    アルファマットとは「対象物」と「背景」の境界線のあいまいな部分の透明度のことです。

    「0~100」の間で調整が可能で、数字が大きいほど境界線の透明度の範囲が大きくなります。

    アルファマット - サイズ15

    アルファマット - サイズ100

    学習モデル

    背景削除するときに使用する計算モデルです。選択するモデルによって、対象物と背景の境界線の認識が変わります。

    色々と試してみて、きれいに背景の削除ができる最適なモデルを探してください。

    参考までに、同じ写真でモデルを変更した例を掲載しておきます。

    u2net
    一般向けモデル

    u2netp
    u2netの軽量版

    u2netp

    u2net_human_seg
    人物に特化したモデル

    u2net_human_seg

    u2net_cloth_seg
    衣類を「上半身」「下半身」「全身」に分類

    u2net_cloth_seg

    silueta
    u2netのサイズ縮小版

    silueta

    isnet-general-use
    一般向けの新モデル

    isnet-general-use

    isnet-anime
    アニメキャラ特化モデル

    isnet-anime

    sam
    万能モデル

    sam

    birefnet-general
    一般向けモデル

    birefnet-general

    birefnet-general-lite
    一般向け軽量モデル

    birefnet-general-lite

    birefnet-portrait
    人間(写真)特化モデル

    birefnet-portrait

    birefnet-dis
    細部切り抜き(DIS)モデル

    birefnet-dis

    birefnet-hrsod
    HRSODモデル

    birefnet-hrsod

    birefnet-cod
    CODモデル

    birefnet-cod

    birefnet-massive
    大規模データモデル

    birefnet-massive

    rembgのパラメーターの詳細については、公式サイト(英語)に詳しく記載されています。

  • 4
    プラグインを実行して、背景を削除する

    図の設定がオススメ設定となります。とはいえ写真によって異なりますので、過信は禁物です。

    背景の削除は、以上となります。

スポンサーリンク

背景削除範囲の調整方法

GIMPの一般的な使用方法の解説になってしまいますが、背景削除範囲の調整方法について、簡単に解説します。

  • 1
    マスクから選択範囲を表示させる

    AI背景削除プラグインで生成された「マスク」から選択範囲を表示させます。

  • 2
    背景を削除したレイヤーを削除する

    新しく選択範囲を作成するため、AI背景削除プラグインで作成したレイヤーは不要になります。

  • 3
    クイックマスクモードを有効にする

    「選択」→「クイックマスクモード」か、Shift + Qで有効にできます。

    赤い部分が「非選択範囲」となります。図でいうと、対象物が選択範囲、背景が非選択範囲ということになります。

  • 4
    マスクを修正する

    ブラシで選択範囲を調整できます。

    選択範囲の追加:白で塗る
    選択範囲の削除:黒で塗る

    背景削除プラグインで漏れがあるところを、一つずつ修正していきます。

  • 5
    クイックマスクモードを解除する

    選択範囲を修正後、「選択」→「クイックマスクモード」か、Shift + Qで解除します。

  • 6
    選択範囲を保存する

    操作ミスで選択範囲が解除されると、やり直す羽目になるので、保存しておきます。

    「選択」→「チャンネルに保存」をクリックします。

    保存した選択範囲を呼び出すときは、図のような手順で対応してください。

  • 7
    選択範囲を反転し、背景を選択する

    選択範囲が対象物になっているので、選択範囲を反転します。

    「選択」→「選択範囲の反転」か、Ctrl + I で対応できます。

  • 8
    背景を削除する

    Deleteを押すことで、背景を削除できます。

    背景削除範囲の調整方法は、以上となります。

スポンサーリンク

まとめ

ここまで読んで頂き、ありがとうございます。

いかがでしたでしょうか。

ぜひプラグインを使って、作業効率を爆アゲ☆してください!!

GIMPプラグイン「ガイド一括生成プラグイン」も公開しています。興味のある方はぜひ、ご活用ください。

不明な点がございましたら、気軽にお問合せフォームよりご連絡をお願いします。できる限りサポートさせて頂きます。

それではまた会いましょう!

guuteru-bow

コメント

タイトルとURLをコピーしました