آنچه در این مقاله میخوانید [پنهانسازی]
برای حذف پس زمینه تصویر با Python کافی است کتابخانه rembg را نصب کنید و خروجی را به صورت PNG ذخیره کنید تا شفافیت (Alpha) حفظ شود. یک دستور نصب و چند خط کد، تصاویر را تمیز و خودکار از پس زمینه جدا میکند.
پیش نیاز و نصب rembg
- Python 3.x نصب باشد.
- در محیط پروژه (ترجیحا یک virtualenv) دستور زیر را اجرا کنید:
pip install rembg pillowتوجه: rembg به شکل پیش فرض از موتور استنتاج مناسب سیستم شما استفاده میکند. برای جزئیات به مستندات رسمی rembg مراجعه کنید.
ساده ترین پیاده سازی در پایتون
این اسکریپت یک تصویر ورودی را میخواند، پس زمینه را حذف میکند و خروجی را به صورت PNG با کانال شفافیت ذخیره میکند.
from rembg import remove
from PIL import Image
input_path = 'input.jpg' # مسیر تصویر ورودی
output_path = 'output.png' # خروجی PNG با شفافیت
img = Image.open(input_path)
result = remove(img) # حذف پس زمینه
result.save(output_path) # ذخیره خروجی شفافبرای مطمئن شدن از شفاف بودن خروجی، فایل output.png را در یک نمایشگر تصویر که پس زمینه شطرنجی را نشان میدهد باز کنید یا آن را روی یک پس زمینه رنگی قرار دهید (نمونه کد در ادامه آمده است).
پردازش گروهی (Batch) پوشه تصاویر
اگر چندین تصویر دارید، از این اسکریپت برای پردازش پوشه به پوشه استفاده کنید. خروجی هر تصویر به نام خودش و با پسوند PNG ذخیره میشود.
import os
from pathlib import Path
from rembg import remove
from PIL import Image
in_dir = Path('inputs') # پوشه تصاویر ورودی
out_dir = Path('outputs') # پوشه خروجی ها
out_dir.mkdir(exist_ok=True)
for path in in_dir.glob('*.*'):
try:
img = Image.open(path)
cut = remove(img)
cut.save(out_dir / f'{path.stem}.png')
print(f'OK: {path.name}')
except Exception as e:
print(f'خطا در {path.name}: {e}')خروجی شفاف، پس زمینه دلخواه و فرمت مناسب
شفافیت فقط در فرمتهایی مثل PNG حفظ میشود. اگر به JPG نیاز دارید، باید تصویر برشخورده را روی یک پس زمینه رنگی بچسبانید.
from PIL import Image
cut = Image.open('output.png') # تصویر برش خورده با شفافیت
alpha = cut.getchannel('A') # کانال آلفا
# پیش نمایش روی پس زمینه سبز
preview_bg = Image.new('RGB', cut.size, (0, 255, 0))
preview_bg.paste(cut, mask=alpha)
preview_bg.save('preview.jpg', quality=95)
# خروجی نهایی JPG با پس زمینه سفید
white_bg = Image.new('RGB', cut.size, (255, 255, 255))
white_bg.paste(cut, mask=alpha)
white_bg.save('final.jpg', quality=95)انتخاب مدل و بهبود کیفیت برش
تغییر مدل
rembg از مدلهای مختلفی برای سوژههای متفاوت پشتیبانی میکند. اگر خروجی در سوژههای خاص (مثلا انسان) دقیق نیست، یک جلسه (Session) با مدل مناسب بسازید.
from rembg import remove, new_session
from PIL import Image
img = Image.open('person.jpg')
session = new_session('MODEL_NAME') # نام مدل مناسب را جایگزین کنید
cut = remove(img, session=session)
cut.save('person_cut.png')نام دقیق مدلهای موجود و کاربرد هر کدام ممکن است به نسخه وابسته باشد. برای فهرست بهروز مدلها و توصیههای انتخاب، مستندات رسمی rembg را بررسی کنید.
پاکسازی لبه ها
اگر دور سوژه هاله رنگی یا لبه تیز میبینید، یک محو بسیار کم روی کانال آلفا اعمال کنید. زیادهروی باعث از بین رفتن جزئیات میشود.
from PIL import Image, ImageFilter
im = Image.open('output.png').convert('RGBA')
a = im.getchannel('A').filter(ImageFilter.GaussianBlur(0.5)) # محو خیلی کم
im.putalpha(a)
im.save('output_refined.png')نکات عملکرد و خطاهای رایج
- تغییر اندازه قبل از پردازش: اگر تصویر بسیار بزرگ است، قبل از remove آن را کوچک کنید تا سرعت و مصرف حافظه بهتر شود.
from PIL import Image img = Image.open('big.jpg') img.thumbnail((1600, 1600), Image.LANCZOS) # سقف ابعاد cut = remove(img) cut.save('big_cut.png') - فرمت ورودی: تصاویر با پسوندهای رایج (JPG, PNG) به خوبی پشتیبانی میشوند. برای GIF یا PNG با رنگ نمایهای (P) ابتدا به RGB/RGBA تبدیل کنید.
img = Image.open('in.png').convert('RGBA') - شفافیت از دست رفته در JPG: اگر خروجی را به JPG ذخیره کنید، شفافیت حذف میشود. برای حفظ شفافیت از PNG استفاده کنید یا ابتدا روی پس زمینه دلخواه بچسبانید.
- مدل نامناسب: اگر مو، شیشه یا لبههای پیچیده دقیق حذف نمیشوند، مدل را عوض کنید یا تصویر را با نور یکنواختتر و کنتراست بهتر آماده کنید.
- وابستگیهای اجرا: در برخی محیطها ممکن است نیاز به نصب جداگانه موتور استنتاج باشد. پیام خطا را بخوانید و طبق مستندات رسمی بسته مناسب را نصب کنید.
چک لیست سریع اجرا
- نصب: pip install rembg pillow
- ورودی: تصویر را با Image.open بارگذاری کنید.
- حذف: result = remove(img)
- خروجی شفاف: ذخیره به PNG
- بررسی: پیش نمایش روی پس زمینه رنگی یا مشاهده شطرنجی
گام بعدی چیست؟
اگر نتیجه مناسب است، یک API سبک با Flask یا FastAPI بسازید و با نگه داشتن یک Session از ایجاد مجدد مدل در هر درخواست جلوگیری کنید. سپس در خط تولید تصاویر فروشگاه، مدیریت محتوا یا روبات پردازش رسانه آن را ادغام کنید.



