Top Related Projects
✂️ Automated high-quality background removal framework for an image using neural networks. ✂️
Background Remover lets you Remove Background from images and video using AI with a simple command line interface that is free and open source.
Quick Overview
Rembg is an open-source tool for removing image backgrounds. It uses deep learning models to automatically detect and remove the background from images, supporting various input and output formats. The project aims to simplify the process of background removal for both developers and end-users.
Pros
- Easy to use with a simple command-line interface and Python API
- Supports multiple input and output formats (PNG, JPG, JPEG, WebP)
- Offers both CPU and GPU acceleration for faster processing
- Provides a web API for integration into other applications
Cons
- Accuracy may vary depending on the complexity of the image
- Large model size (>100MB) may impact initial download and storage
- Limited customization options for fine-tuning the background removal process
- Requires Python and additional dependencies to be installed
Code Examples
- Basic usage with Python API:
from rembg import remove
from PIL import Image
input_path = 'input.png'
output_path = 'output.png'
with open(input_path, 'rb') as i:
with open(output_path, 'wb') as o:
input = i.read()
output = remove(input)
o.write(output)
- Using rembg with custom model:
from rembg import remove, new_session
input_path = 'input.png'
output_path = 'output.png'
model_name = 'u2net_human_seg'
with open(input_path, 'rb') as i:
with open(output_path, 'wb') as o:
input = i.read()
session = new_session(model_name)
output = remove(input, session=session)
o.write(output)
- Batch processing multiple images:
import os
from rembg import remove
from PIL import Image
input_folder = 'input_images'
output_folder = 'output_images'
for filename in os.listdir(input_folder):
if filename.endswith(('.png', '.jpg', '.jpeg')):
input_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, f'bg_removed_{filename}')
with open(input_path, 'rb') as i:
with open(output_path, 'wb') as o:
input_image = i.read()
output_image = remove(input_image)
o.write(output_image)
Getting Started
-
Install rembg using pip:
pip install rembg -
Basic usage from command line:
rembg i input.png output.png -
Use in Python script:
from rembg import remove from PIL import Image input_image = Image.open('input.png') output = remove(input_image) output.save('output.png')
For more advanced usage and options, refer to the project's documentation on GitHub.
Competitor Comparisons
✂️ Automated high-quality background removal framework for an image using neural networks. ✂️
Pros of image-background-remove-tool
- Offers multiple AI models for background removal, providing flexibility
- Includes a graphical user interface (GUI) for easier use by non-technical users
- Supports batch processing of multiple images
Cons of image-background-remove-tool
- Generally slower processing speed compared to rembg
- Requires more setup and dependencies
- Less actively maintained, with fewer recent updates
Code Comparison
image-background-remove-tool:
from carvekit.api.high import HiInterface
interface = HiInterface(object_type="object",
batch_size_seg=5,
batch_size_matting=1,
device='cuda',
seg_mask_size=640,
matting_mask_size=2048,
trimap_prob_threshold=231,
trimap_dilation=30,
trimap_erosion_iters=5,
fp16=False)
rembg:
from rembg import remove
from PIL import Image
input_path = 'path/to/input/image.jpg'
output_path = 'path/to/output/image.png'
input = Image.open(input_path)
output = remove(input)
output.save(output_path)
The code comparison shows that rembg has a simpler API and requires less configuration, while image-background-remove-tool offers more customization options but with increased complexity.
Background Remover lets you Remove Background from images and video using AI with a simple command line interface that is free and open source.
Pros of backgroundremover
- Offers a web interface for easy online use
- Supports video background removal in addition to images
- Provides multiple output formats including PNG, JPG, and WebM
Cons of backgroundremover
- Less actively maintained compared to rembg
- Fewer stars and contributors on GitHub
- Limited documentation and examples
Code Comparison
backgroundremover:
from backgroundremover import remove
input_path = "input.jpg"
output_path = "output.png"
remove(input_path, output_path)
rembg:
from rembg import remove
from PIL import Image
input_path = "input.jpg"
output_path = "output.png"
input = Image.open(input_path)
output = remove(input)
output.save(output_path)
Both libraries offer simple APIs for background removal, but rembg requires working with PIL Image objects, while backgroundremover operates directly on file paths. rembg's approach provides more flexibility for in-memory image processing and manipulation.
Overall, rembg appears to be the more robust and actively maintained project, with a larger community and more frequent updates. However, backgroundremover offers unique features like video support and a web interface, which may be preferable for certain use cases.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Rembg
Rembg is a tool to remove image backgrounds. It can be used as a CLI, Python library, HTTP server, or Docker container.
If this project has helped you, please consider making a donation.
Sponsors
|
PhotoRoom Remove Background API
https://photoroom.com/api
Fast and accurate background remover API |
Requirements
python: >=3.11, <3.14
Installation
Choose one of the following backends based on your hardware:
CPU support
pip install "rembg[cpu]" # for library
pip install "rembg[cpu,cli]" # for library + cli
GPU support (NVIDIA/CUDA)
First, check if your system supports onnxruntime-gpu by visiting onnxruntime.ai and reviewing the installation matrix.
If your system is compatible, run:
pip install "rembg[gpu]" # for library
pip install "rembg[gpu,cli]" # for library + cli
Note: NVIDIA GPUs may require
onnxruntime-gpu, CUDA, andcudnn-devel. See #668 for details. Ifrembg[gpu]doesn't work and you can't install CUDA orcudnn-devel, userembg[cpu]withonnxruntimeinstead.
GPU support (AMD/ROCm)
ROCm support requires the onnxruntime-rocm package. Install it by following AMD's documentation.
Once onnxruntime-rocm is installed and working, install rembg with ROCm support:
pip install "rembg[rocm]" # for library
pip install "rembg[rocm,cli]" # for library + cli
Usage as a CLI
After installation, you can use rembg by typing rembg in your terminal.
The rembg command has 4 subcommands, one for each input type:
i- single filesp- folders (batch processing)s- HTTP serverb- RGB24 pixel binary stream
You can get help about the main command using:
rembg --help
You can also get help for any subcommand:
rembg <COMMAND> --help
rembg i
Used for processing single files.
Remove background from a remote image:
curl -s http://input.png | rembg i > output.png
Remove background from a local file:
rembg i path/to/input.png path/to/output.png
Specify a model:
rembg i -m u2netp path/to/input.png path/to/output.png
Return only the mask:
rembg i -om path/to/input.png path/to/output.png
Apply alpha matting:
rembg i -a path/to/input.png path/to/output.png
Pass extra parameters (SAM example):
rembg i -m sam -x '{ "sam_prompt": [{"type": "point", "data": [724, 740], "label": 1}] }' examples/plants-1.jpg examples/plants-1.out.png
Pass extra parameters (custom model):
rembg i -m u2net_custom -x '{"model_path": "~/.u2net/u2net.onnx"}' path/to/input.png path/to/output.png
rembg p
Used for batch processing entire folders.
Process all images in a folder:
rembg p path/to/input path/to/output
Watch mode (process new/changed files automatically):
rembg p -w path/to/input path/to/output
rembg s
Used to start an HTTP server.
rembg s --host 0.0.0.0 --port 7000 --log_level info
For complete API documentation, visit: http://localhost:7000/api
Remove background from an image URL:
curl -s "http://localhost:7000/api/remove?url=http://input.png" -o output.png
Remove background from an uploaded image:
curl -s -F file=@/path/to/input.jpg "http://localhost:7000/api/remove" -o output.png
rembg b
Process a sequence of RGB24 images from stdin. This is intended to be used with programs like FFmpeg that output RGB24 pixel data to stdout.
rembg b <width> <height> -o <output_specifier>
Arguments:
| Argument | Description |
|---|---|
width | Width of input image(s) |
height | Height of input image(s) |
output_specifier | Printf-style specifier for output filenames (e.g., output-%03u.png produces output-000.png, output-001.png, etc.). Omit to write to stdout. |
Example with FFmpeg:
ffmpeg -i input.mp4 -ss 10 -an -f rawvideo -pix_fmt rgb24 pipe:1 | rembg b 1280 720 -o folder/output-%03u.png
Note: The width and height must match FFmpeg's output dimensions. The flags
-an -f rawvideo -pix_fmt rgb24 pipe:1are required for FFmpeg compatibility.
Usage as a Library
Input and output as bytes:
from rembg import remove
with open('input.png', 'rb') as i:
with open('output.png', 'wb') as o:
input = i.read()
output = remove(input)
o.write(output)
Input and output as a PIL image:
from rembg import remove
from PIL import Image
input = Image.open('input.png')
output = remove(input)
output.save('output.png')
Input and output as a NumPy array:
from rembg import remove
import cv2
input = cv2.imread('input.png')
output = remove(input)
cv2.imwrite('output.png', output)
Force output as bytes:
from rembg import remove
with open('input.png', 'rb') as i:
with open('output.png', 'wb') as o:
input = i.read()
output = remove(input, force_return_bytes=True)
o.write(output)
Batch processing with session reuse (recommended for performance):
from pathlib import Path
from rembg import remove, new_session
session = new_session()
for file in Path('path/to/folder').glob('*.png'):
input_path = str(file)
output_path = str(file.parent / (file.stem + ".out.png"))
with open(input_path, 'rb') as i:
with open(output_path, 'wb') as o:
input = i.read()
output = remove(input, session=session)
o.write(output)
For more examples, see the examples page.
Usage with Docker
CPU Only
Replace the rembg command with docker run danielgatis/rembg:
docker run -v path/to/input:/rembg danielgatis/rembg i input.png path/to/output/output.png
NVIDIA CUDA GPU Acceleration
Requirements: Your host must have the NVIDIA Container Toolkit installed.
CUDA acceleration requires cudnn-devel, so you need to build the Docker image yourself. See #668 for details.
Build the image:
docker build -t rembg-nvidia-cuda-cudnn-gpu -f Dockerfile_nvidia_cuda_cudnn_gpu .
Note: This image requires ~11GB of disk space (CPU version is ~1.6GB). Models are not included.
Run the container:
sudo docker run --rm -it --gpus all -v /dev/dri:/dev/dri -v $PWD:/rembg rembg-nvidia-cuda-cudnn-gpu i -m birefnet-general input.png output.png
Tips:
- You can create your own NVIDIA CUDA image and install
rembg[gpu,cli]in it. - Use
-v /path/to/models/:/root/.u2netto store model files outside the container, avoiding re-downloads.
Models
All models are automatically downloaded and saved to ~/.u2net/ on first use.
Available Models
- u2net (download, source): A pre-trained model for general use cases.
- u2netp (download, source): A lightweight version of u2net model.
- u2net_human_seg (download, source): A pre-trained model for human segmentation.
- u2net_cloth_seg (download, source): A pre-trained model for Cloths Parsing from human portrait. Here clothes are parsed into 3 category: Upper body, Lower body and Full body.
- silueta (download, source): Same as u2net but the size is reduced to 43Mb.
- isnet-general-use (download, source): A new pre-trained model for general use cases.
- isnet-anime (download, source): A high-accuracy segmentation for anime character.
- sam (download encoder, download decoder, source): A pre-trained model for any use cases.
- birefnet-general (download, source): A pre-trained model for general use cases.
- birefnet-general-lite (download, source): A light pre-trained model for general use cases.
- birefnet-portrait (download, source): A pre-trained model for human portraits.
- birefnet-dis (download, source): A pre-trained model for dichotomous image segmentation (DIS).
- birefnet-hrsod (download, source): A pre-trained model for high-resolution salient object detection (HRSOD).
- birefnet-cod (download, source): A pre-trained model for concealed object detection (COD).
- birefnet-massive (download, source): A pre-trained model with massive dataset.
- bria-rmbg (download, source): A state-of-the-art background removal model by BRIA AI.
FAQ
When will this library support Python version 3.xx?
This library depends on onnxruntime. Python version support is determined by onnxruntime's compatibility.
Support
If you find this project useful, consider buying me a coffee (or a beer):
Star History
License
Copyright (c) 2020-present Daniel Gatis
Licensed under the MIT License.
Top Related Projects
✂️ Automated high-quality background removal framework for an image using neural networks. ✂️
Background Remover lets you Remove Background from images and video using AI with a simple command line interface that is free and open source.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot
