readme: About this DeepLearning Model:
  We will build an front end application to upload the image and get the deeplearning model predicts the name of the object with acccuracy.
  
  Steps for building the Image classification model:
  1. Image classification model using pretrained DL model
  1.1 Define deeplearning model
  2.2 Preprocess the data
  3.3 Get prediction
  
  1.1 Define deep learning model
  # import required modules
  import json
  import numpy as np
  from PIL import Image
  import matplotlib.pyplot as plt
  
  # import pytorch related modules
  import torch
  from torchvision import transforms
  from torchvision.models import densenet121
  # define pretrained DL model
  model = densenet121(pretrained=True)
  
  model.eval();
  1.2 Preprocess data
  # load image using PIL
  input_image = Image.open(filename)
  
  # preprocess image according to the pretrained model
  preprocess = transforms.Compose([
      transforms.Resize(256),
      transforms.CenterCrop(224),
      transforms.ToTensor(),
      transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
  ])
  input_tensor = preprocess(input_image)
  
  # create a mini-batch as expected by the model
  input_batch = input_tensor.unsqueeze(0) 
  
  # pass input batch to the model
  with torch.no_grad():
      output = model(input_batch)
  1.3 Get prediction
  pred = torch.nn.functional.softmax(output[0], dim=0).cpu().numpy()
  np.argmax(pred)
  # download classes on which the model was trained on 
  !wget https://s3.amazonaws.com/deep-learning-models/image-models/imagenet_class_index.json
  # get the prediction accuracy
  print(classes[str(np.argmax(pred))][1], round(max(pred)*100, 2))
  2. Deploying Image Classification model
  1.1 Install required libraries
  1.2 Setup DL model using streamlit
  1.3 Deploy DL model on AWS/Colab/HF spaces
  
  1.1 Install required libraries
  !pip install -q streamlit
  !pip install -q pyngrok
  1.2 Setup DL model using streamlit
  %%writefile app.py
  
  ## create streamlit app
  
  # import required libraries and modules
  import json
  import numpy as np
  import matplotlib.pyplot as plt
  
  import torch
  from PIL import Image
  from torchvision import transforms
  from torchvision.models import densenet121
  
  import streamlit as st
  
  # define prediction function
  def predict(image):
      # load DL model
      model = densenet121(pretrained=True)
  
      model.eval()
  
      # load classes
      with open('imagenet_class_index.json', 'r') as f:
          classes = json.load(f)
  
      # preprocess image
      preprocess = transforms.Compose([
          transforms.Resize(256),
          transforms.CenterCrop(224),
          transforms.ToTensor(),
          transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
      ])
      input_tensor = preprocess(input_image)
      input_batch = input_tensor.unsqueeze(0) # create a mini-batch as expected by the model
  
      # get prediction
      with torch.no_grad():
          output = model(input_batch)
  
      pred = torch.nn.functional.softmax(output[0], dim=0).cpu().numpy()
  
      # return confidence and label
      confidence = round(max(pred)*100, 2)
      label = classes[str(np.argmax(pred))][1]
  
      return confidence, label
  
  # define image file uploader
  image = st.file_uploader("Upload image here")
  
  # define button for getting prediction
  if image is not None and st.button("Get prediction"):
      # load image using PIL
      input_image = Image.open(image)
  
      # show image
      st.image(input_image, use_column_width=True)
  
      # get prediction
      confidence, label = predict(input_image)
  
      # print results
      "Model is", confidence, "% confident that this image is of a", label
  1.3 Deploy DL model
  # run streamlit app
  !streamlit run app.py &>/dev/null&
  # make streamlit app available publicly
  from pyngrok import ngrok
  
  public_url = ngrok.connect('8501');
  
  public_url
  Model can be deployed on AWS/Colab/Flask/Hugging Spaces
  Hugging spaces model
  https://huggingface.co/spaces/ArunkumarCH/BirdClassification