code: # Importing relevant libraries
  import cv2
  import imutils
  import tflearn
  import numpy as np
  from PIL import Image
  import tensorflow as tf
  
  from tensorflow.python.framework import ops
  from tflearn.layers.estimator import regression
  from tflearn.layers.conv import conv_2d, max_pool_2d
  from tflearn.layers.core import input_data, dropout, fully_connected
  
  # Import all the functionalities from Switch_Control
  from Web_App.Switch_Control import *
  
  # global variables
  bg = None
  
  
  def resizeImage(imageName):
      basewidth = 100
      img = Image.open(imageName)
      wpercent = (basewidth/float(img.size[0]))
      hsize = int((float(img.size[1])*float(wpercent)))
      img = img.resize((basewidth, hsize), Image.ANTIALIAS)
      img.save(imageName)
  
  
  def run_avg(image, aWeight):
      global bg
      # initialize the background
      if bg is None:
          bg = image.copy().astype("float")
          return
  
      # compute weighted average, accumulate it and update the background
      cv2.accumulateWeighted(image, bg, aWeight)
  
  
  def segment(image, threshold=25):
      global bg
      # find the absolute difference between background and current frame
      diff = cv2.absdiff(bg.astype("uint8"), image)
  
      # threshold the diff image so that we get the foreground
      thresholded = cv2.threshold(diff,
                                  threshold,
                                  255,
                                  cv2.THRESH_BINARY)[1]
  
      # get the contours in the thresholded image
      (cnts, _) = cv2.findContours(thresholded.copy(),
                                   cv2.RETR_EXTERNAL,
                                   cv2.CHAIN_APPROX_SIMPLE)
  
      # return None, if no contours detected
      if len(cnts) == 0:
          return
      else:
          # based on contour area, get the maximum contour which is the hand
          segmented = max(cnts, key=cv2.contourArea)
          return (thresholded, segmented)
  
  
  def getPredictedClass():
  
      image = cv2.imread('Temp.png')
      gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
      gray_image = cv2.resize(gray_image, (89, 100))
      prediction = model.predict([gray_image.reshape(89, 100, 1)])
      return np.argmax(prediction), (np.amax(prediction) / (prediction[0][0] + prediction[0][1] + prediction[0][2]))
  
  
  # Model defined
  ops.reset_default_graph()
  convnet = input_data(shape=[None, 89, 100, 1], name='input')
  convnet = conv_2d(convnet, 32, 2, activation='relu')
  convnet = max_pool_2d(convnet, 2)
  convnet = conv_2d(convnet, 64, 2, activation='relu')
  convnet = max_pool_2d(convnet, 2)
  
  convnet = conv_2d(convnet, 128, 2, activation='relu')
  convnet = max_pool_2d(convnet, 2)
  
  convnet = conv_2d(convnet, 256, 2, activation='relu')
  convnet = max_pool_2d(convnet, 2)
  
  convnet = conv_2d(convnet, 256, 2, activation='relu')
  convnet = max_pool_2d(convnet, 2)
  
  convnet = conv_2d(convnet, 128, 2, activation='relu')
  convnet = max_pool_2d(convnet, 2)
  
  convnet = conv_2d(convnet, 64, 2, activation='relu')
  convnet = max_pool_2d(convnet, 2)
  
  convnet = fully_connected(convnet, 1000, activation='relu')
  convnet = dropout(convnet, 0.75)
  
  convnet = fully_connected(convnet, 3, activation='softmax')
  
  convnet = regression(convnet, optimizer='adam', learning_rate=0.001,
                       loss='categorical_crossentropy', name='regression')
  
  model = tflearn.DNN(convnet, tensorboard_verbose=0)
  
  # Load Saved Model
  model.load("Web_App/TrainedModel/GestureRecogModel.tfl")
  
  
  """ 
  Note: This Trained Model for Hand Gesture Recognition is taken from
         https://github.com/SparshaSaha/Hand-Gesture-Recognition-Using-Background-Elllimination-and-Convolution-Neural-Network 
  """
  
apis: numpy.amax numpy.argmax tensorflow.python.framework.ops.reset_default_graph