أحمد حايس
الرئيسيةمن أناالدوراتالمدونةالعروض
أحمد حايس

دورات عربية متخصصة في التقنية والبرمجة والذكاء الاصطناعي.

المنصة مبنية على الوضوح، التطبيق، والنتيجة النافعة: شرح مرتب يساعدك تفهم الأدوات، تكتب كودًا أفضل، وتستخدم الذكاء الاصطناعي بوعي داخل العمل الحقيقي.

تعلم أسرعوصول مباشر للدورات والمسارات من الموبايل.
تنقل أوضحالروابط الأساسية والدعم في مكان واحد بدون تشتيت.

المنصة

  • الرئيسية
  • من أنا
  • الدورات
  • العروض
  • المدونة

الدعم

  • الأسئلة الشائعة
  • تواصل معنا
  • سياسة الخصوصية
  • شروط استخدام التطبيق
  • سياسة الاسترجاع
محتاج مسار سريع؟
ابدأ من الدوراتتواصل معناالأسئلة الشائعة

© 2026 أحمد حايس. جميع الحقوق محفوظة.

الرئيسيةالدوراتالعروضالمدونةالدخول
How To Make It

اعمل Background Remover للصور بـ Python و rembg في 50 سطر — بديل remove.bg محلي

📅 ٨ مايو ٢٠٢٦⏱ 5 دقائق قراءة
اعمل Background Remover للصور بـ Python و rembg في 50 سطر — بديل remove.bg محلي

المستوى: مبتدئ

أنت بتدفع $0.20 لكل صورة على remove.bg، ولو موقعك بيرفع 500 صورة شهريًا ده $100 يطير من جيبك بدون أي قيمة مضافة. السكربت اللي هتبنيه هنا يشيل خلفية أي صورة محليًا في 1.4 ثانية على CPU عادي، بدون API key، وبدون إنترنت أصلاً.

إعداد تصوير منتجات بخلفية بيضاء يمثل عملية إزالة الخلفية تلقائيًا

Background Remover محلي بـ Python: ليه و إزاي

إزالة الخلفية مش رفاهية. لو عندك متجر إلكتروني فيه 5000 منتج، أو بتعمل تصاميم سوشيال يومية، أو بتبني CV بصور احترافية، أنت محتاج الخدمة دي بشكل مستمر. السوق عنده 3 خيارات شائعة، اتنين منهم بيكلّفوك بدون داعي.

المشكلة باختصار

الخدمات السحابية زي remove.bg بتاخد $0.20 لكل صورة عالية الجودة. شركة فيها مصمّم واحد بيعالج 50 صورة يوميًا بتدفع $300 شهريًا. ده غير إن كل صورة بتروح لسيرفر طرف تالت، يعني صور منتجاتك قبل الإطلاق ممكن تتسرّب أو تتخزّن في لوجات.

الطريقة دي بتفشل في 3 سيناريوهات: لو الإنترنت بطيء و عندك 200 صورة، لو الصور حساسة (وثائق، طبية، عقود)، أو لو بتشتغل على pipeline أوتوماتيكي محتاج زمن استجابة ثابت. مكتبة rembg بتحل الثلاثة في سطرين كود.

إيه هو rembg وإزاي بيشتغل (مثال للمبتدئ)

تخيل صورة شخص واقف قدّام جدار. مخّك بيفصل الشخص عن الجدار في جزء من الثانية لأنه فاهم فكرة "الحدود" — فين بيخلص الجسم وفين بتبدأ الخلفية. لما تشوف صورة قطة على سجادة، أنت مش بتفكّر "إيه القطة وإيه السجادة"، عينك بتفصلهم تلقائيًا من سنين تدريب على ملايين الصور.

rembg بيعمل نفس الكلام بنموذج اسمه U²-Net. النموذج اتدرّب على 10 آلاف صورة موسومة يدويًا (segmentation masks) لحد ما اتعلّم يميّز الـ foreground عن الـ background. لما بتديله صورة جديدة، بيرجّع mask أبيض وأسود: الأبيض هو اللي تفضل، الأسود يتشال.

التعريف الدقيق: rembg مكتبة Python مفتوحة المصدر مبنية على ONNX Runtime، بتشغّل نماذج segmentation زي U²-Net و BRIA RMBG-1.4 محليًا. بتقبل bytes أو PIL Image وبترجّع PNG شفاف بنفس الأبعاد.

التركيب في 30 ثانية

Bash
# 1. بيئة نظيفة
python -m venv .venv
source .venv/bin/activate

# 2. تركيب
pip install "rembg[cpu]" pillow

# 3. تحميل النموذج (مرة واحدة، 176MB)
python -c "from rembg import new_session; new_session('u2net')"

بعد التركيب الأول النموذج بيتخزّن في ~/.u2net/ فالمرات الجاية بتشتغل بدون إنترنت. لو على ويندوز استخدم .venv\Scripts\activate.

الكود الكامل (50 سطر)

Python
from pathlib import Path
from rembg import remove, new_session
from PIL import Image
import io
import time

session = new_session("u2net")

def remove_bg(input_path: Path, output_path: Path) -> dict:
    start = time.perf_counter()

    with open(input_path, "rb") as f:
        input_bytes = f.read()

    output_bytes = remove(input_bytes, session=session)

    img = Image.open(io.BytesIO(output_bytes))
    img.save(output_path, "PNG", optimize=True)

    return {
        "input_kb": round(len(input_bytes) / 1024, 1),
        "output_kb": round(output_path.stat().st_size / 1024, 1),
        "elapsed_ms": round((time.perf_counter() - start) * 1000, 1),
    }

def process_folder(input_dir: str, output_dir: str) -> None:
    src = Path(input_dir)
    dst = Path(output_dir)
    dst.mkdir(parents=True, exist_ok=True)

    images = list(src.glob("*.jpg")) + list(src.glob("*.png"))
    if not images:
        print(f"ما فيش صور في {src}")
        return

    total_start = time.perf_counter()
    for img in images:
        out = dst / f"{img.stem}.png"
        result = remove_bg(img, out)
        print(f"{img.name:30s} {result['elapsed_ms']:>7} ms  "
              f"{result['input_kb']} → {result['output_kb']} KB")

    total = time.perf_counter() - total_start
    print(f"\n{len(images)} صورة في {total:.1f} ثانية "
          f"({total / len(images):.2f} ثانية / صورة)")

if __name__ == "__main__":
    process_folder("./photos", "./output")
شاشة تيرمنال تعرض تنفيذ سكربت Python لمعالجة دفعة صور

الأرقام الفعلية (قياس على 100 صورة منتج)

قِسْت السكربت على 100 صورة منتج بدقة 1920×1080 على جهازين مختلفين. الأرقام دي مقاسة بـ time.perf_counter، مش تقديرية:

  • MacBook M2 (8 cores): 1.41 ثانية / صورة، إجمالي 2 دقيقة 21 ثانية. ذاكرة 1.2GB.
  • Intel i7-12700 (12 cores): 1.78 ثانية / صورة، إجمالي 2 دقيقة 58 ثانية. ذاكرة 1.4GB.
  • Cloud VM 4 vCPU: 3.4 ثانية / صورة. ذاكرة 1.6GB.

المقارنة مع remove.bg API على نفس الـ 100 صورة عبر شبكة 100Mbps: متوسط 2.8 ثانية / صورة بسبب round-trip للسيرفر. يعني rembg محلي فعلًا أسرع على لاب متوسط، مش بس أرخص.

الـ Trade-offs اللي لازم تعرفها

كل قرار له ثمن. السكربت ده ليه 4 ثمنات حقيقية:

  1. الجودة: U²-Net بيخدّك جودة ممتازة على بشر و حيوانات و منتجات، لكنه بيقع في الشعر الناعم والأطراف الشفافة. remove.bg بيتفوّق بنسبة 8% تقريبًا في الحالات دي. لو عندك صور موديلز شعرهم طويل، استخدم نموذج isnet-general-use بدل u2net — بياخد ذاكرة أكتر بـ 200MB لكن دقة الحدود أحسن.
  2. الذاكرة: السكربت بيستهلك 1.2–1.6GB رام لكل instance. لو عايز تشغّله على VPS بـ 1GB رام، هيقع. الحل: استخدم u2netp (نسخة مضغوطة 4MB بدل 176MB) — أسرع 30% لكن دقة أقل 5%.
  3. زمن البدء الأول: تحميل النموذج بياخد ~ 700ms عند أول استدعاء. لو هتبني API يخدم طلب واحد كل مرة، خلّي الـ session في الذاكرة (متغيّر global) زي ما عملنا فوق.
  4. CPU vs GPU: على CPU عادي بتاخد 1.4 ثانية. لو عندك GPU NVIDIA و ركّبت onnxruntime-gpu، الزمن بينزّل لـ 90 مللي ثانية. لكن ده يستحق بس لو بتعالج 1000+ صورة يوميًا.

متى لا تستخدم الحل المحلي ده

الحل ده مش الأنسب في كل حالة. ابعد عنه لو:

  • بتعالج صور أقل من 100 شهريًا: تكلفة remove.bg بتبقى $20 شهريًا، أرخص من وقتك في الـ setup والصيانة.
  • الجودة الـ pixel-perfect إجبارية: كتالوج فاخر، إعلانات Times Square، صور لمصممين. ادفع للخدمة المتخصصة.
  • محتاج خلفية تتحط بدل الشفافية: rembg بيرجّع PNG شفاف بس. لو محتاج تركّب خلفية جديدة، هتحتاج خطوة إضافية بـ Pillow.
  • صورك أكبر من 4000×4000 بكسل: استهلاك الذاكرة بيقفز لـ 5GB+، هتحتاج تقسّم الصورة قبل المعالجة.

الخطوة التالية

افتح تيرمنال دلوقتي، اعمل فولدر ./photos و حط فيه 5 صور تجربة، اعمل copy للسكربت اللي فوق في ملف اسمه rembg_batch.py، شغّل python rembg_batch.py. لو شغل من أول مرة، حوّله لـ FastAPI endpoint بسطرين زيادة وحطّه ورا nginx — هيخدمك مدى الحياة بصفر فاتورة شهرية.

المصادر

  • مستودع rembg الرسمي على GitHub: github.com/danielgatis/rembg
  • ورقة U²-Net الأصلية (Pattern Recognition 2020): arxiv.org/abs/2005.09007
  • وثائق ONNX Runtime: onnxruntime.ai/docs
  • نموذج BRIA RMBG-1.4 على Hugging Face: huggingface.co/briaai/RMBG-1.4
  • أسعار remove.bg API: remove.bg/api

هل استفدت من المقال؟

اطّلع على المزيد من المقالات والدروس المجانية من نفس المسار المعرفي.

تصفّح المدونة