How to Remove a Background from Any Image For Free

Aziz profile image

Aziz

Aug 11, 20256 min read

How to Remove a Background from Any Image For Free

How to Remove a Background from Any Image Using Python and U2Net

If you’re searching for a simple and effective way to remove the background from any image, you can achieve professional-quality results using Python and the U2Net ONNX model. This guide shows you exactly how to set up a background removal tool on your own machine, complete with all the code and resources you need to get started.

Why Remove Backgrounds from Images?

Removing backgrounds from images is essential for graphic design, e-commerce, presentations, and social media content. Clean, background-free images help products stand out, create eye-catching thumbnails, and enable seamless integration into any project. Traditionally, this was a tedious manual task, but thanks to AI-powered models like U2Net, it’s now fully automatable.

What is U2Net?

U2Net is a state-of-the-art deep learning model designed for salient object detection, which makes it exceptionally good at separating foregrounds from backgrounds in images. The ONNX version of U2Net is portable and runs efficiently across platforms, making it ideal for integrating into your Python projects.

Step-by-Step Guide: Removing Backgrounds with Python and U2Net

1. Download the U2Net ONNX Model

First, download the pre-trained U2Net ONNX model from this link:
Download u2net.onnx

2. Install Required Python Packages

pip install fastapi uvicorn pillow numpy onnxruntime pydantic

3. Complete Python Script for Background Removal

Here is a ready-to-use FastAPI application that exposes a REST endpoint for background removal. It uses onnxruntime to run the U2Net model and Pillow for image processing.


from fastapi import FastAPI, Request
from pydantic import BaseModel
import base64
import numpy as np
from PIL import Image
import onnxruntime as ort
import io

app = FastAPI()

# Load the ONNX model once at startup
ort_session = ort.InferenceSession('u2net.onnx')

class ImageIn(BaseModel):
    image_b64: str

def remove_bg(image_b64):
    # Decode base64 image
    image_data = base64.b64decode(image_b64)
    image = Image.open(io.BytesIO(image_data)).convert('RGB')
    orig_size = image.size

    # Preprocess for U2Net
    image = image.resize((320, 320))
    img_np = np.array(image).astype(np.float32) / 255.0
    img_np = np.transpose(img_np, (2, 0, 1))  # CHW
    img_np = np.expand_dims(img_np, 0)  # NCHW

    # ONNX inference
    input_name = ort_session.get_inputs()[0].name
    output = ort_session.run(None, {input_name: img_np})[0][0][0]
    output = (output - output.min()) / (output.max() - output.min() + 1e-8)
    mask = (output * 255).astype(np.uint8)
    mask = Image.fromarray(mask).resize(orig_size, Image.LANCZOS)

    # Create transparent image
    image = Image.open(io.BytesIO(image_data)).convert('RGBA')
    image.putalpha(mask)

    # Save to base64
    buffered = io.BytesIO()
    image.save(buffered, format="PNG")
    return base64.b64encode(buffered.getvalue()).decode('utf-8')

@app.post("/remove_bg")
async def remove_bg_endpoint(item: ImageIn):
    try:
        output_b64 = remove_bg(item.image_b64)
        return {"result_b64": output_b64}
    except Exception as e:
        return {"error": str(e)}
    

4. How to Use the API

  1. Start the FastAPI server:
    uvicorn your_script_name:app --reload
  2. Send a POST request to /remove_bg with a JSON body containing your image encoded as base64. The response will include the PNG image (with background removed) encoded in base64.

5. Testing with cURL or Postman

You can test your endpoint using curl or Postman. Here’s an example using curl:


curl -X POST "http://127.0.0.1:8000/remove_bg" \
     -H "Content-Type: application/json" \
     -d '{"image_b64": ""}'
    

Replace <your_base64_image> with your actual base64 image string.

Tips for Best Results

  • Use high-contrast images for the cleanest separation.
  • For batch processing, wrap the API call in a loop.
  • Integrate this service into web apps, e-commerce platforms, or automation scripts.
  • Always handle large images with care to avoid memory issues—resize if necessary.

Other Tools for Entrepreneurs and Creators

If you’re looking to rapidly prototype business ideas, validate them, and create beautiful branding assets (like logos and landing pages), consider leveraging StarterPilot. It’s an AI-driven platform that helps entrepreneurs bring ideas to life effortlessly, with tools for idea validation, name and icon generation, landing page building, and more. Whether you’re building a SaaS, launching a new e-commerce store, or just experimenting, StarterPilot streamlines your journey from concept to launch.

Conclusion

Removing backgrounds from images is now accessible to everyone, thanks to open-source AI models like U2Net and easy-to-use Python APIs. In just a few steps, you can set up your own powerful background removal tool and integrate it into any workflow. Happy coding!

Enjoyed this article?

Explore more posts or share this with your network.

Browse blog