Skip to content
site logo mobile

Remove Background From Image With Python For Free!

Table of Contents

remove background from image with python

I was surfing the internet searching for AI tools and methods to make money online, and I stumbled upon an Image Background Removal service called Remove.Bg

It works great. But I was shocked by the pricing. It charges $0.2-$1.99 per Image!?

remove background from image removebg

So, I decided to take the challenge and reverse engineer this website to build my own Free Image Background Remover without relying on any APIs or Third Parties.

I kept searching for a few days and found a great python project on GitHub, Called U2Net.

A Big Shout-out and Thanks to the authors of this project!

I tried my best to make things as simple as possible so that even newbies could use and run the python script I built.

I also created a Short Video showing The Script & How to use it, and I pointed out three methods and secrets that may help you build an online income stream with the help of this script. Here is the video:

For example, You can turn this into an online tool that people pay to use based on a monthly subscription. I did something similar with BoostCTR, FreeImageAI, LargeFileSender, and H-supertools.

What you can also do is that. You can use the script, turn it into an API, publish it on RapidAPI, and sell it for a monthly recurring income. I also do this with my Domain Authority API.

Remove Background from Image with Python

So, let’s open our source code with visual studio code

The main part of our script is this magic method called removeBg(). We’ll pass the Image Path as an argument.

So, two methods are very important in this Python Script. One saves the output, and the other will create the mask of the image and the image without background and return.

So, in the first part, we are loading the model. I will also give you the trained model so you can use it directly.

After Loading, we call the removebg() function to remove the background image.

Let’s see how it works I will reopen Remove.bg and get a sample image from their website.

So we can compare the results.

I will save this cat image on my desktop.

I will copy the name and open the script again. And paste the image path here

And run the script. 

To see the Results. Go to your Python Project Folder.

Find a Folder named ‘static.’

Now in the static folder, go to inputs.

So, this is the input (this is the main image.)

The Masks folder will have a mask of the same image.  

And finally, this is the result. It’s Great!

Now let’s go to Remove.bg. The result here is almost the same. 

Thanks to everyone who helped in developing this awesome machine-learning model.

Source Code

You can Download the Full Source Code or Check it out On GitHub

By the way, here’s the script!

#start
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
import cv2
import uuid
import os
from model import U2NET
from torch.autograd import Variable
from skimage import io, transform
from PIL import Image
# Get The Current Directory
currentDir = os.path.dirname(__file__)
# Functions:
# Save Results
def save_output(image_name, output_name, pred, d_dir, type):
    predict = pred
    predict = predict.squeeze()
    predict_np = predict.cpu().data.numpy()
    im = Image.fromarray(predict_np*255).convert('RGB')
    image = io.imread(image_name)
    imo = im.resize((image.shape[1], image.shape[0]))
    pb_np = np.array(imo)
    if type == 'image':
        # Make and apply mask
        mask = pb_np[:, :, 0]
        mask = np.expand_dims(mask, axis=2)
        imo = np.concatenate((image, mask), axis=2)
        imo = Image.fromarray(imo, 'RGBA')
    imo.save(d_dir+output_name)
# Remove Background From Image (Generate Mask, and Final Results)
def removeBg(imagePath):
    inputs_dir = os.path.join(currentDir, 'static/inputs/')
    results_dir = os.path.join(currentDir, 'static/results/')
    masks_dir = os.path.join(currentDir, 'static/masks/')
    # convert string of image data to uint8
    with open(imagePath, "rb") as image:
        f = image.read()
        img = bytearray(f)
    nparr = np.frombuffer(img, np.uint8)
    if len(nparr) == 0:
        return '---Empty image---'
    # decode image
    try:
        img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
    except:
        # build a response dict to send back to client
        return "---Empty image---"
    # save image to inputs
    unique_filename = str(uuid.uuid4())
    cv2.imwrite(inputs_dir+unique_filename+'.jpg', img)
    # processing
    image = transform.resize(img, (320, 320), mode='constant')
    tmpImg = np.zeros((image.shape[0], image.shape[1], 3))
    tmpImg[:, :, 0] = (image[:, :, 0]-0.485)/0.229
    tmpImg[:, :, 1] = (image[:, :, 1]-0.456)/0.224
    tmpImg[:, :, 2] = (image[:, :, 2]-0.406)/0.225
    tmpImg = tmpImg.transpose((2, 0, 1))
    tmpImg = np.expand_dims(tmpImg, 0)
    image = torch.from_numpy(tmpImg)
    image = image.type(torch.FloatTensor)
    image = Variable(image)
    d1, d2, d3, d4, d5, d6, d7 = net(image)
    pred = d1[:, 0, :, :]
    ma = torch.max(pred)
    mi = torch.min(pred)
    dn = (pred-mi)/(ma-mi)
    pred = dn
    save_output(inputs_dir+unique_filename+'.jpg', unique_filename +
                '.png', pred, results_dir, 'image')
    save_output(inputs_dir+unique_filename+'.jpg', unique_filename +
                '.png', pred, masks_dir, 'mask')
    return "---Success---"
# ------- Load Trained Model --------
print("---Loading Model---")
model_name = 'u2net'
model_dir = os.path.join(currentDir, 'saved_models',
                         model_name, model_name + '.pth')
net = U2NET(3, 1)
if torch.cuda.is_available():
    net.load_state_dict(torch.load(model_dir))
    net.cuda()
else:
    net.load_state_dict(torch.load(model_dir, map_location='cpu'))
# ------- Load Trained Model --------
print("---Removing Background...")
# ------- Call The removeBg Function --------
imgPath = "Image_File_Path"  # Change this to your image path
print(removeBg(imgPath))
#end

Also, here is some help if you download the Full Project Folder.

File Structure

when you open the Downloads folder. You’ll find this inside:

Saved models

U2NET 

And here is the trained model so you can use it directly. 

And we have the script file here.

And the static folder, we have the inputs, masks, and results. You can find them here also. It’s super easy to use.

You can use this requirements text file directly to import and install all the requirements with the pip command.

If you have any questions, please share them in the comments below.

If you find this helpful, share it with your friends!

🟥Master the Most In-Demand Skill of the Future!

Enroll in the ‘Become a Prompt Engineer‘ program. We’ll take you from novice to expert in scripting AI workflows. Start your journey here!

What Will You Get?

  • Access to our premium Prompt Engineering Course
  • Access our private support forum to get help along your journey.
  • Access to our Premium Tested Prompts Library.
Earn Points for Every Share!

91 thoughts on “Remove Background From Image With Python For Free!”

    1. I wish to learn how to use this with my website just like remove.ai is, have you made a video on this? I love how you explained in the first video Hasan

  1. sir your script is so good and very useful for beginners like me. so I want to add it as a tool to my website how can I do that could help with that?

    thank you very much, sir

  2. I love you Hassan.
    Your vids/tuts are amazingly well balanced.

    Keep up the amazing work.
    (please do more of your dry dev humor to.
    like the one “Now we are getting dangerous”)

    Epic!

  3. I tried to learn to program on Coursera but stopped along the way.
    After following your channel on Ai for some time now I am beginning to develop an interest in Python and want to learn with the help of Ai, but I don’t know how to start.

    I need your advice and direction on how to start.

    Thank you

Leave a Reply

Your email address will not be published. Required fields are marked *