Hey guys, in today’s blog we will see how we can build a background remover flask app using Python. So without any further due, let’s do it…
In today’s digital age, images play a vital role in communication and expression. However, sometimes, the background of an image may not be suitable, and removing it can enhance the image’s overall appeal. To cater to this need, we can build a background remover Flask app that can remove the background of any image using Python.
Flask is a micro-framework that allows us to build web applications using Python. It is lightweight and provides an easy-to-use interface for building web applications. In this article, we will create a Flask app that uses the Python Imaging Library (PIL) and rembg python library to remove the background of an image.
Prerequisites
To build the background remover Flask app, we need to have the following prerequisites installed:
- Python 3
- Flask
- PIL (Python Imaging Library)
- rembg (Python library that removes background)
Result Samples
Example 1:
Example 2:
Working of our Background Remover Flask App
Working Flow of our App…
- In the first step, the extension of the image is checked, and if it is in the allowed extensions list, it is uploaded to the uploads folder.
- Then in the next step, the uploaded image is read using the PIL module.
- In the next step, the background of the image is removed using the rembg python library.
- Then the image with the removed background is stored in the uploads folder.
- And finally, both the images are displayed on the results page.
Source Code for Background Remover Flask App
NOTE – Before running the app you need to install a Python module called ‘rembg‘. You can install it by running the following command in the terminal…
pip install rembg
app.py
import cv2 import os from rembg import remove from PIL import Image from werkzeug.utils import secure_filename from flask import Flask,request,render_template UPLOAD_FOLDER = 'static/uploads' ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg','webp']) if 'static' not in os.listdir('.'): os.mkdir('static') if 'uploads' not in os.listdir('static/'): os.mkdir('static/uploads') app = Flask(__name__) app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0 app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER app.secret_key = "secret key" def allowed_file(filename): return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS def remove_background(input_path,output_path): input = Image.open(input_path) output = remove(input) output.save(output_path) @app.route('/') def home(): return render_template('home.html') @app.route('/remback',methods=['POST']) def remback(): file = request.files['file'] if file and allowed_file(file.filename): filename = secure_filename(file.filename) file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) rembg_img_name = filename.split('.')[0]+"_rembg.png" remove_background(UPLOAD_FOLDER+'/'+filename,UPLOAD_FOLDER+'/'+rembg_img_name) return render_template('home.html',org_img_name=filename,rembg_img_name=rembg_img_name) if __name__ == '__main__': app.run(debug=True)
home.html
<!doctype html> <html lang="en"> <style type='text/css'> body { background-color: black !important; font-family: sans-serif; margin-top: 40px; margin: 0; } .regform { width: 800px; background-color: #fb2056; margin: auto; color: #FFFFFF; padding: 10px 0px 10px 0px; text-align: center; border-radius: 15px 15px 0px 0px; } .main-form { width: 800px; margin: auto; background-color: #fc86a463; padding-left: 50px; padding-right: 50px; padding-bottom: 20px; color: #FFFFFF; } img { max-height: 400px; max-width: 500px; height: auto; width: auto; } </style> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Bootstrap CSS --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-eOJMYsd53ii+scO/bJGFsiCZc+5NDVN2yr8+0RDqr0Ql0h+rP48ckxlpbzKgwra6" crossorigin="anonymous"> <title>Remove Background</title> </head> <body> <div class='regform mt-3'> <h1>Remove Background</h1> </div> <form action='/remback' class='main-form' method="POST" enctype="multipart/form-data"> <div class='text-center'> <input type="file" id="file" name='file' style="margin-top:10px;margin-bottom:10px;"> <button type='submit' class='btn btn-success'> Remove Background </button> </div> </form> {% if rembg_img_name %} <div class="row" style="margin-top:10px;margin-bottom:10px;"> <div class="col text-center" style="background-color: #fb2056ba;margin: 50px;border-radius: 20px;padding: 20px;"> <h2 style="color: #FFFFFF;">Original Image</h2><img src='../static/uploads/{{ org_img_name }}' style="display: block;margin-left: auto;margin-right: auto;"> </div> <div class="col text-center" style="background-color: #fb2056ba;margin: 50px;border-radius: 20px;padding: 20px;"> <h2 style="color: #FFFFFF;">Image with Background Removed</h2><img src='../static/uploads/{{ rembg_img_name }}' style="display: block;margin-left: auto;margin-right: auto;"> </div> </div> {% endif %} </body> </html>
Step by Step coding our Background Remover Flask App
Download Source Code
Conclusion
In this article, we have seen how to create a background remover Flask app using Python. We used the Flask micro-framework, Python Imaging Library (PIL), and rembg to process the images. By following these steps, you can build your own Flask app for removing the background of any image.
So this is all for this blog folks. Thanks for reading it and I hope you are taking something with you after reading this and till the next time …
Read my last blog – Youtube Comments Extraction and Sentiment Analysis Flask App
Check out my other machine learning projects, deep learning projects, computer vision projects, NLP projects, and Flask projects at machinelearningprojects.net.