VOOZH about

URL: https://www.analyticsvidhya.com/blog/2022/01/develop-and-deploy-image-classifier-using-flask-part-2/

⇱ Develop and Deploy Image Classifier using Flask: Part 2 - Analytics Vidhya


India's Most Futuristic AI Conference Is Back – Bigger, Sharper, Bolder

  • d
  • :
  • h
  • :
  • m
  • :
  • s

Reading list

Develop and Deploy Image Classifier using Flask: Part 2

Sajal Last Updated : 15 Mar, 2022
6 min read

This article was published as a part of the Data Science Blogathon.

Hey Guys, I hope you are doing well.

This article is the sequel to Developing and Deploying an image classifier with Flask. This article will be about Flask and how can we use it to deploy a simple image classifier. As my other article, this article will be a hands-on experience. We will start by exciting theory, and in a later section, we will be coding everything out. Don’t worry about the code. I will add a link to Github to save up some hustle. So let’s focus on learning. Again this article will be based entirely on PYTHON.

This article is open for all viewers (Beginner, Intermediate, Advanced). Below is the table of content of this article, so feel free to skip parts you already know.

You can get the First Part HERE.

Table Of Content

  1. What is API?
  2. What is Flask Framework?
  3. Why do we use Flask?
  4. Coding
    3.1 How to create a simple Flask API?
    3.2 Problem Statement (Flask API with Image classifier)
  5. Result
  6. Conclusion

What is API?

API is an Acronym for Application Programming Interface that acts as an intermediary layer and allows two applications to communicate.

With the help of API, companies can open up their applications’ data and functionality to individuals, other companies, business partners, basically to anyone they want for various purposes like creating more features over it or doing some kind of analysis over data. With the help of API, anyone with access can use the data. API allows services and applications to communicate with each other.

A real-world analogy can be the waiter. He takes orders from you and gives them to the Chef to prepare food. Then this same waiter gets you the food. Here Waiter is API, and you are the client, and the Chef is a web server where all the processing is being done.

What is Flask Framework?

Flask is a third-party Python library used for creating web applications. Armin Ronacher developed a flask.

What is framework ?
A web app framework is a collection of libraries or modules that helps web developer to write and deploy their application without dealing with the lower level details such as thread management , handling database etc.

Flask is a micro-framework because it does not require particular tools or libraries. It has no form validation, database abstraction layer, or other components.

Flask is based on the Werkzeg WSGI toolkit and the Jinja2 template engine.

WSGI

WSGI is an acronym for Web Server Gateway Interface. WSGI is a set of commands which helps in facilitating communication between web servers and web applications. So basically, the primary purpose of WSGI is to forward the request from a webserver to the backend i.e. flask framework and the response of Flask back to the webserver.
It helps increase scalability and promotes flexibility and efficiency in terms of speed.

Jinja2

It is the kind of template system that helps combine static HTML templates with your dynamic data from the backend. It allows you to use python data in HTML.

Example

Hello {{ username }} !

What do you think code is doing? We have sent the username variable from the backend, which is dynamic here depending upon the user. This templating style is jinja.

Jinja does not only include the variable, but we can even have an if-else statement for loops and many more things that we can do in python with a slight syntax change. Most .html files are kept inside the templates folder.

Why do we use Flask?

The significant advantage of using Flask is its simplicity and flexibility. It does not force you to follow some rigid structure while creating the API. It allows you to do unit testing easily, and the Flask has its debugger. The significant advantage of using Flask is its speed over other pythonic frameworks for web-application development.

There are many big companies like Netflix, Airbnb, Reddit, Uber.

This is what a Flask API looks like.

DAMN, this is too much theory. Let’s see how the code works.

Coding

Install Flask

pip install flask

How to create a simple flask API?

from flask import Flask
app = Flask(__name__)
@app.route(‘/’)
def hello_world():
# Make changes here
return ‘Hello World’
if __name__ == ‘__main__’:
# app.run(host, port, debug, options)
app.run(host = “127.0.0.1” ,port = 5000)

Code is Done.

open command prompt at the same location of app.py.

On CMD:
set flask_app=app.py
flask run

This code above will give results somewhat as below on 127.0.0.1:5000

Routines: This decorator tells Flask which functions to hit when entering a specific URL. For example,

if you want to hit function hello_world when the URL is localhost/hello, you must do something like the below:

@app.route('/hello')

Now, this route decorator has some more HTTP methods: GET and POST

GET: As the name suggests, it’s a primary method of getting data files or HTML pages. It is used when you are not dealing with any confidential data.

@app.route("/",method=["GET"])

POST: It is used to send data to the server with encryption. This method is used when you are dealing with credentials.

@app.route("/",method=["POST"])
# @app.route("/",method=["POST","GET"])

This is enough with Flask showing me the complete Project. Sure! Why not?

Problem Statement

In this section, we will be discussing the code for the Image Classifier added to Flask.

Prerequisites : Knowledge of CNN for which you can read part 1. Libraries for CNN.

You can find the complete code for this section HERE.

git clone https://github.com/r-sajal/Image-Classifier-With-Flask

Install all modules given below

flask==1.1.1
h5py==2.10.0
numpy==1.17.0
Pillow==6.1.0
tensorflow==2.3.1 OR pip3 install -r requirements.txt

app.py

In this part, we will be breaking down this file and explaining each of them in detail.

# Variables 
# Change them if you are using custom model or pretrained model with saved weights
Model_json = ".json"
Model_weights = ".h5"

Model_json will hold the JSON structure of your model, and model_weights will store weights of your pretrained model if you have any. Suppose you have not trained a model. You don’t have to care about it.

def get_ImageClassifierModel():
 model = MobileNetV2(weights='imagenet')
 # Loading the pretrained model
 # model_json = open(Model_json, 'r')
 # loaded_model_json = model_json.read()
 # model_json.close()
 # model = model_from_json(loaded_model_json)
 # model.load_weights(Model_weigths)

 return model

This function will return a model which can be directly used to predict the classes of images.

def model_predict(img, model):
”’
Prediction Function for model.
Arguments:
img: is address to image
model : image classification model
”’
img = img.resize((224, 224))
# Preprocessing the image
x = image.img_to_array(img)
# x = np.true_divide(x, 255)
x = np.expand_dims(x, axis=0)
# Be careful how your trained model deals with the input
# otherwise, it won’t make correct prediction!
x = preprocess_input(x, mode=’tf’)
preds = model.predict(x)
return preds

This function addresses your image and model, and as the name suggests, it will give you the class your idea belongs to.

@app.route('/', methods=['GET'])
def index():
 '''
 Render the main page
 '''
 return render_template('index.html')

This function is triggered when you open the link to your website or localhost.
render_template will generate output from a template file based on the Jinja2 engine found in the application’s templates folder.

@app.route(‘/predict’, methods=[‘GET’, ‘POST’])
def predict():
”’
predict function to predict the image
Api hits this function when someone clicks submit.
”’
if request.method == ‘POST’:
# Get the image from post request
img = base64_to_pil(request.json)
# initialize model
model = get_ImageClassifierModel()
# Make prediction
preds = model_predict(img, model)
pred_proba = “{:.3f}”.format(np.amax(preds)) # Max probability
pred_class = decode_predictions(preds, top=1) # ImageNet Decode
result = str(pred_class[0][0][1]) # Convert to string
result = result.replace(‘_’, ‘ ‘).capitalize()
# Serialize the result, you can add additional fields
return jsonify(result=result, probability=pred_proba)
return None


The function will be triggered when you submit an image to the classifier.
The last return None statement is triggered when someone tries to predict without giving any input image.

index.html

{% extends "base.html" %} {% block content %}

This part will copy all the present in base.html to your index.html to avoid having to write it again. This is a feature of the jinja template.

This marks the end of the explanation of the coding part.

Results

You will be able to get something like this as your end product.

Conclusion

This marks the end of this article. You must now be pretty much familiar with how to use a flask and how you can put an image classifier to the Flask. Flask is not limited to only image classification but can also be used to quickly deploy many other machine learning and deep learning models. If you want me to create more articles on flask deployment, please contact me.

Thank You for reading.

ABOUT ME

I am Sajal Rastogi, a Final Year student from IIIT pursuing my bachelor’s in Computer Science and Engineering. I love exploring and trying more and more about Deep and Machine Learning. If you want to collaborate, you can use the below information

Linkedin: Click Me

Github: Click Me

Kaggle: Click Me

Mail me: [email protected]

Thank You for reading!

The media shown in this article is not owned by Analytics Vidhya and are used at the Author’s discretion.



 

I am an enthusiastic experimenting programmer trying to learn and implement ways of python. I write what I do. I believe in implementing first and writing next. To make my viewers comfortable with my articles I try to keep them simple and reply to their queries really fast (You can try this). To know more about me you can surely ping me up and we might end up experimenting something cool with python.

Login to continue reading and enjoy expert-curated content.

Free Courses

Generative AI - A Way of Life

Explore Generative AI for beginners: create text and images, use top AI tools, learn practical skills, and ethics.

Getting Started with Large Language Models

Master Large Language Models (LLMs) with this course, offering clear guidance in NLP and model training made simple.

Building LLM Applications using Prompt Engineering

This free course guides you on building LLM apps, mastering prompt engineering, and developing chatbots with enterprise data.

Improving Real World RAG Systems: Key Challenges & Practical Solutions

Explore practical solutions, advanced retrieval strategies, and agentic RAG systems to improve context, relevance, and accuracy in AI-driven applications.

Microsoft Excel: Formulas & Functions

Master MS Excel for data analysis with key formulas, functions, and LookUp tools in this comprehensive course.

Responses From Readers

Flagship Programs

GenAI Pinnacle Program| GenAI Pinnacle Plus Program| AI/ML BlackBelt Program| Agentic AI Pioneer Program

Free Courses

Generative AI| DeepSeek| OpenAI Agent SDK| LLM Applications using Prompt Engineering| DeepSeek from Scratch| Stability.AI| SSM & MAMBA| RAG Systems using LlamaIndex| Building LLMs for Code| Python| Microsoft Excel| Machine Learning| Deep Learning| Mastering Multimodal RAG| Introduction to Transformer Model| Bagging & Boosting| Loan Prediction| Time Series Forecasting| Tableau| Business Analytics| Vibe Coding in Windsurf| Model Deployment using FastAPI| Building Data Analyst AI Agent| Getting started with OpenAI o3-mini| Introduction to Transformers and Attention Mechanisms

Popular Categories

AI Agents| Generative AI| Prompt Engineering| Generative AI Application| News| Technical Guides| AI Tools| Interview Preparation| Research Papers| Success Stories| Quiz| Use Cases| Listicles

Generative AI Tools and Techniques

GANs| VAEs| Transformers| StyleGAN| Pix2Pix| Autoencoders| GPT| BERT| Word2Vec| LSTM| Attention Mechanisms| Diffusion Models| LLMs| SLMs| Encoder Decoder Models| Prompt Engineering| LangChain| LlamaIndex| RAG| Fine-tuning| LangChain AI Agent| Multimodal Models| RNNs| DCGAN| ProGAN| Text-to-Image Models| DDPM| Document Question Answering| Imagen| T5 (Text-to-Text Transfer Transformer)| Seq2seq Models| WaveNet| Attention Is All You Need (Transformer Architecture) | WindSurf| Cursor

Popular GenAI Models

Llama 4| Llama 3.1| GPT 4.5| GPT 4.1| GPT 4o| o3-mini| Sora| DeepSeek R1| DeepSeek V3| Janus Pro| Veo 2| Gemini 2.5 Pro| Gemini 2.0| Gemma 3| Claude Sonnet 3.7| Claude 3.5 Sonnet| Phi 4| Phi 3.5| Mistral Small 3.1| Mistral NeMo| Mistral-7b| Bedrock| Vertex AI| Qwen QwQ 32B| Qwen 2| Qwen 2.5 VL| Qwen Chat| Grok 3

AI Development Frameworks

n8n| LangChain| Agent SDK| A2A by Google| SmolAgents| LangGraph| CrewAI| Agno| LangFlow| AutoGen| LlamaIndex| Swarm| AutoGPT

Data Science Tools and Techniques

Python| R| SQL| Jupyter Notebooks| TensorFlow| Scikit-learn| PyTorch| Tableau| Apache Spark| Matplotlib| Seaborn| Pandas| Hadoop| Docker| Git| Keras| Apache Kafka| AWS| NLP| Random Forest| Computer Vision| Data Visualization| Data Exploration| Big Data| Common Machine Learning Algorithms| Machine Learning| Google Data Science Agent
👁 Av Logo White

Continue your learning for FREE

Forgot your password?
👁 Av Logo White

Enter OTP sent to

Edit

Wrong OTP.

Enter the OTP

Resend OTP

Resend OTP in 45s

👁 Popup Banner
👁 AI Popup Banner