An image classification app boilerplate to serve your deep learning models asap!

Overview

Image 🖼 Classification App Boilerplate

Have you been puzzled by tons of videos, blogs and other resources on the internet and don't know where and how to deploy your AI models?

Won't it be nice if you could have a template where you just insert your trained model files, edit some promo text and Voila, it's done.

Well, look no further because this repository makes it as easy for you as it sounds!

How to use this project? 🤔 🤔 :

NOTE: For now, we are exclusively focused on image classification models built using tensorflow/pytorch. Later we would expand to models dealing with text and speech data as well as training using MXNet or a julia environment

  • I assume you have Python(with Anaconda) installed in your operating system and set to path. If not, please visit this. Using GIT along with Python is highly recommended for version control and deployment

A. Fetching our template and setting it up:

  1. Open GitHub

  2. Log in with your credentials. [ Create an account if you have not done it already]

  3. Open the terminal/command prompt on your system

  4. Move to a suitable location where you want to keep the project files locally

Example: cd Desktop/projects

  1. Clone this repository.
git clone --depth 1 https://github.com/smaranjitghose/img_ai_app_boilerplate.git
  1. Navigate inside your cloned copy of the template
cd img_ai_app_boilerplate
  1. Now, let's fetch our dependencies to run our app. [A python package called StreamLit is at the heart of this app]
 pip install -r requirements.txt
  1. Now, let's put our model files inside the app.

B. Integrating our Trained Model:

  1. Open the model sub-directory
cd model
start .
  1. Paste your Keras.h5 model files there

  2. Shoot up your favorite code editor/IDE (I prefer VSCode).

    code . [Type this in the terminal to open VSCode if you already have it installed]

  3. Now open the file img_classifier.py.

  4. Search for the variable labels in the code and set its' value as per the labels of the dataset used for training your model. [say if you are doing Cats Vs Dogs classification, then labels = {0: "Cats", 1: "Dogs"} ]

    NOTE: This is totally dependent on your model training

  5. Update the value of the variable model with the path of your model file.

    [say model = tensorflow.keras.models.load_model('model/catsvsdogs.h5')]

  6. Save the changes.

C. Frontend and Content Changes

Continuing with changes to the User Interface or the frontend of our app please follow the steps mentioned below:

Home Page 🏡

  1. Open app.py.

  2. Search for st.title and update the Title of the app as per your application's needs.

    [say st.title('Our Cats vs Dogs Classifier')]

  3. Now search for variable page_title and update it with the same. This will tweak the SEO.

    [say page_title="Cats Vs Dogs",]

  4. If you have some affiliation or maybe the app is made completely by you (perhaps with a group of your friends/colleagues) as a pet project, you can reflect that in the app by searching for st.subheader and updating it

    [say st.subheader("By John Doe and Jane Doe")]

^^ Delete any or all code that you won't use from the above

Contact Page 🤳

  1. Search for the function call display_team("Your Awesome Name", "./assets/profile_pic.png","Your Awesome Affliation","[email protected]" and update the following parameters as per your own discretion:

    • Name
    • path_to_image (I would suggest storing the images inside assets/images/
    • Affiliation
    • email
  2. For adding multiple members, you can call the same function multiple times. For example:

    display_team("John Doe","./assets/john_doe.png","Stanford University","[email protected]")
    display_team("Jane Doe","./assets/jane_doe.png","Harvard University","[email protected]")

D. Storing the Images 📤 and User Feedback Online

Setting up Firebase

  • Login in to Firebase, using your Gmail ID.

  • Click on the Get Started button which will, take you to your console.

Creating a project

  • Click on Add project. Once you do so, a 3 Step process will start.

  • Enter the name of your project. (Pro tip: Keep the same name as the name of your App. It would make it easier to identify.)

  • The next step is pretty self explanatory and you may/may not choose to enable google analytics.

    • If you choose to enable google analytics, then you will have to select or create a Google Analytics account.

    • If you choose not to, then a Create project button will appear instead of Continue.

  • Once you click on Create project, you will land on Firebase Console.

Setting up Storage

  • Once you land on the Firebase Console, click on the Create Web App icon.

  • Give the name of your web app and unless required, do not select the Hosting option and click next.

  • Copy the code which appears and store in a config.txt file for later use.

  • Click on Continue to Console.

  • Once on Console, click on the Storage Option on the left panel and then click on Get Started.

  • Click Next and then select a server closest to your location.

  • Once the Storage is initiated, click on the Rules tab and change: allow read, write: if request.auth != null; to allow read, write; in the code snippet which appears on the screen.

    Note: This is only for testing purposes and in real life scenarios refrain from doing this.

  • This change basically allows us the upload and download the images without authenticating every time.

  • With this you have set up the Storage successfully. You can manage your app's cloud server from here.

Setting up Realtime Database

  1. Click on the Realtime Database Option on the left panel.

  2. Once on the page, click on Create Database button.

  3. When you click the button, there will be a prompt to set the Security rules. It is recommended to start in locked mode so as to ensure security of the data.

  4. With this you have set up the Database successfully. Now whenever a user writes a feedback, you can check it here in this database. Since this database stores data in terms of JSON files, you can also export the JSON file and use it in whichever way you like.

Linking Firebase in the App

Since everything is set up in the Firebase Console, the only thing left to do is to link the services to your app. You can do it this way:

  1. Open firebase_bro.py

  2. Remember the config.txt file which we created earlier? Open it up and copy the contents of firebaseConfig into config variable inside firebase_bro.py.

  3. Save the File.

Voila! You have Successfully set up Firebase into your app!

Removing FIREBASE 👋 👋

If you do not want to use firebase please feel free to:

  • Remove the firebase_bro.py file from the current working directory

  • Delete the following lines from the app.py file:

    • import firebase_bro.

    • firebase_bro.send_img(image) line inside the Home block of the if else condition.

    • firebase_bro.send_feedback(first_name, last_name, user_email, feedback) line inside the Feedback block of the if else condition.

  • Also remove firebase and all the lines below the comment For Handling firebase and pyrebase dependency issues in the requirements.txt

REMEMBER: The current version of the app only supports jpg, png and jpeg images as input

E. Testing 🧪 the app Locally

  • Now, we are all set to test our prototype!

  • Open the terminal/command prompt and type

$ streamlit run app.py
  • Give it a few seconds to start on your local server, load Tensorflow and other cool stuff the app requires in order to function properly.

  • Upload Your Image, Click on Predict, Verify the working

NOTE: If you face any difficulties please raise an issue and let me know

Congrats! You have successfully deployed your models

F. Hosting the App 🚛

If you wish to share this as a prototype for others to try or showcase it to your friends and collegeues, please follow these steps:

Pushing the code to GitHub

  1. Create a new github repository with an approriate name say my my_app ( DO NOT ADD LICENSE, README, CODE OF CONDUCT, GITIGNORE files at this moment)

Depending upon your preference, you can make the repository private or public

  1. Open the Terminal/Command Prompt once again

  2. Make new folder having the same name as the github repository name

mkdir my_app
  1. Now let's copy all the files of the folder containing our prototype to this folder
cp -a ./img_ai_app_boilerplate/. ./my_app/
  1. Navigate to the location of the above newly created directory

cd my_app

  1. After copying, please feel free to remove the documentation related files that are unnecessary for your prototype
rm -r Guides\
rm LICSENSE CODE_OF_CONDUCT.md CONTRIBUTING.md README.MD
rm -r assets\readme_assets\
  1. Intiatilize the directory as a git repository
git init
  1. Set remote to your repository on GitHub( Copy the link of the repository from the Address Bar)
git remote add origin https://github.com/your_github_username/my_app.git 
  1. Track and commit the current changes
git add .
git commit -m "v.0.0.1"
  1. Push the changes to your remote repository on GitHub
git push origin main
  1. Once successsfull, close the terminal.

  2. Go to GitHub and locate the repository to check if the changes are reflected

  3. Now Add your own custom:

    • README.MD file (To descibe your project in brief)
    • LICENSE file (This depends upon you. I prefer going with MIT License for my open source repositories)
    • CODE_OF_CONDUCT.MD ( GitHub already provides a template for this)
    • Short Repository Description on the right
    • Relevant Tags

Hosting using a cloud service :

Now as per your choice of hosting, please refer the following guides:

Code of Conduct

License

Future Work 🏗

  • Improve the UI of the app using custom HTML,CSS or REACT
  • Make the App more descriptive
  • Guide for Deployment to Digital Ocean
  • Guide for Deployment to GCP
  • Guide for Deployment to AWS
  • Guide for Deployment to Azure
  • Add Favicon option, Improve SEO
  • Add Multiple Pages
    • Contact Page
    • About Page
    • Feedback Page
  • Support for PyTorch models
  • Support for MXNET models
  • Support for saved_model TF format
  • Add Animations
  • Dark Mode
  • Similar Efforts for a mobile app using TFLite + Flutter ( From building to serving)
  • Experiment with TFJS

If this project helped you, do give it a 🌟 on GitHub and share your work over LinkedIN and/or Twitter by tagging me!

Comments
  • Write a guide for deploying the app to Linode 🐱‍💻

    Write a guide for deploying the app to Linode 🐱‍💻

    • Please name it Linode_Guide.MD
    • Place it inside the Guides/ directory of the master branch
    • Have a look at the other guides and elaborately describe the process ( It would be appreciated if the process of registration is also highlighted but optional)
    • Add Snapshots of the process as and where required
    • Add Useful Tips section for certain optimizations, bug fixing advice and cite corresponding references
    DWOC SWoC2021 
    opened by smaranjitghose 3
  • Tried to Clean and Organise the Readme file

    Tried to Clean and Organise the Readme file

    Made a separate guide to set up Firebase in the app and linked it to the Readme. Also edited Heroku guide for typos and in general formatting.

    Also ticked the multiple pages option in Further work since it was completed :)

    documentation hacktoberfest-accepted PR: merged slop2020 
    opened by ThenoobMario 3
  • Added Multiple Pages

    Added Multiple Pages

    #9

    Added multiple pages with Firebase support to store user feedback, along with a Feedback.MD guide which walks through the process of setting up Firebase in the app.

    Also grouped the already existing guides into its own dedicated folder for easy navigation.

    hacktoberfest-accepted PR: merged slop2020 
    opened by ThenoobMario 2
  • Remove GIFs from readme file

    Remove GIFs from readme file

    As we know that, A readme file lets you know about the repo as well as attracting contributors to contribute in it. But, readme file included in your repo is loosing grip in both of the roles, because of the GIFs mentioned in it, They create an informal image of your repo, which is not good, In order to maintain formality of your readme file, Let me remove the gifs and insert some catching sentences instead. This is regarding crosswoc,

    opened by stlyash 1
  • README BADGES

    README BADGES

    Hi @smaranjitghose

    I would like to contribute to this repository by making nice badges , Let me know if you are interested in

    Kindly do assign me

    readme1

    The above image is a example

    opened by akrish4 1
  • ADD ISSUE_TEMPLATE

    ADD ISSUE_TEMPLATE

    Hello there, I would like to add an issue template for your repository. This template would have four issues namely bug, documentation, feature, proposal. Kindly assign me this issue as a part of DWOC. THANK YOU

    opened by tharunc 1
  • Integrate Welcome and Greeting Bot

    Integrate Welcome and Greeting Bot

    Hi @smaranjitghose I would like to contribute to this project by adding a welcome and greeting bot which will comment up when any user will open up with an issue or pull-request for the first time Kindly do assign me this issue @smaranjitghose ( config file having a proper message)

    For reference, kindly check out: https://github.com/apps/welcome

    opened by akrish4 1
  • Integrate Welcome Bot

    Integrate Welcome Bot

    Hello there, I can add a welcome bot config file having a proper message that will show up when any user will open up an issue or pull-request for the first time as a part of DWOC. Please assign me this issue.
    For reference, kindly check out: https://github.com/apps/welcome THANK YOU

    opened by tharunc 1
  • Do we need a Python Linter for PRs?

    Do we need a Python Linter for PRs?

    I was just wondering that should we have a PyLint or flake8 linters for this repo to rate the code style of incoming PRs?

    PyLint score can make the life of reviews comparatively easier.

    opened by vybhav72954 0
  • I will add banner of crosswoc to the readme file

    I will add banner of crosswoc to the readme file

    I will add banner of crosswoc to the readme file. Moreover, I will associate link of the crosswoc website to its banner such that, if someone clicks the banner on readme file, it will redirect them to the website of crosswoc.

    deprecated 
    opened by stlyash 0
  • [ImgBot] Optimize images

    [ImgBot] Optimize images

    Beep boop. Your images are optimized!

    Your image file size has been reduced by 68% 🎉

    Details

    | File | Before | After | Percent reduction | |:--|:--|:--|:--| | /Guides/images/5_linode.jpg | 741.85kb | 129.37kb | 82.56% | | /Guides/images/1_linode.jpg | 764.18kb | 200.62kb | 73.75% | | /Guides/images/4_linode.jpg | 855.70kb | 224.77kb | 73.73% | | /Guides/images/3_linode.png | 236.15kb | 145.34kb | 38.46% | | /Guides/images/2_linode.png | 217.35kb | 135.28kb | 37.76% | | /Guides/images/6_linode.png | 95.12kb | 64.71kb | 31.97% | | /Guides/StreamlitDeploy.png | 47.28kb | 33.73kb | 28.65% | | /Guides/StreamlitNewAppOption.png | 28.61kb | 21.51kb | 24.81% | | | | | | | Total : | 2,986.23kb | 955.32kb | 68.01% |


    Black Lives Matter | 💰 donate | 🎓 learn | ✍🏾 sign

    📝 docs | :octocat: repo | 🙋🏾 issues | 🏅 swag | 🏪 marketplace

    PR: merged 
    opened by imgbot[bot] 0
  • TFJS template 101

    TFJS template 101

    • Work on the TFJS branch
    • Remove all python related code (eg: app.py,image_classifier.py`)
    • Remove all existing guides inside the Guides\ directory of the TFJS branch
    • Remove all dockerfiles ( Including dockerignore)
    • Write a simple code (Minimum HTML&CSS) to upload an image, load a model saved in TFJS format and give inference below (identify the label)
    • When you give the PR, send a link to the working Deploy on GitHub pages
    • Use custom trained models!!
    DWOC SWoC2021 
    opened by smaranjitghose 2
  • Technical Documentation Website

    Technical Documentation Website

    Requirements:

    • Home Page:
      • Information about Project
      • Open Source : - Programs we are a part of: info about SLOP, SWOC,DWOC - Contribution Guide - Code of Conduct - License
      • Team - Project Maintainer
        - Project Contributor
    • Getting Started:
      - Using this repo as a template on GitHub
      - Getting the source code locally
      - Model Integration
      - Updating Model Files
      - Updating the Image Classifier Script
      - Front End Changes
      - Home Page [ Of the app] - - Team Page
      - About Page - Firebase and more Pages!
      - Setup Firebase for the project
      - Store Configuration Files to reference Firebase Project
      - Setup Real time database for the project
      - Update the Contact Page
      - Setup Cloud Storage for the project - - Update the function to send images - - Remove Firebase(If not required)
    • Deployment
      - Staging, Commiting and Pushing Changes to GitHub - Cloud Services: - Heroku
      - Google Cloud Services
      - Amazon Web Services - - Microsoft Azure
      - Digital Ocean
      - Linode
      - Python Everywhere

    Directions:

    • Package to be used: mkdocs
    • Template to be followed: Material
    • Branch to be pushed: gh-pages [the deploy], master[the docs/ directory inside which the documentation would be present] - Please gitignore everything under site/

    References:

    NOTE:

    • Please only take up the this issue once you are fully comfortable with using and hosting docs with mkdocs.
    • This issue is not be done all at once but in various parts. Whenever you comment interested, just specify which part of the documentation you want to build
    • If the information for the part is not available, please wait for it be available (like Guide for Digital Ocean), this issue has be worked upon in parallel with the others. Only take up tasks for which the information is updated
    • The source code to a similar documentation is already given above, and feel free to use YouTube for learning
    DWOC SWoC2021 
    opened by smaranjitghose 7
  • Adding support for Gluon Models 🤖🛒

    Adding support for Gluon Models 🤖🛒

    • Rename the function our_image_classifier to img_class_tf in the image_classifier.py file
    • Write another function img_class_torch and define to load an image, convert it to the necessary numpy array (or any form you deem necessary, load a gluon model ( giving the PR, test it with any custom trained model and attach the video clip of the working demo), run inference and return the result.
    • Note how the labels are defined.
    • Feel free to add try-except statements for better debugging
    DWOC SWoC2021 
    opened by smaranjitghose 0
  • Adding Support for PyTorch Models 🤖

    Adding Support for PyTorch Models 🤖

    • Rename the function our_image_classifier to img_class_tf in the image_classifier.py
    • Write another function img_class_torch and define to load an image, convert it to the necessary numpy array (or any form you deem necessary, load a pytorch model (just make a blank model.pth file in the models folder for reference but before giving the PR, test it with any custom trained model and attach the video clip of the working demo), run inference and return the result.
    • Note how the labels are defined.
    • Feel free to add try catch statements for better debugging
    DWOC SWoC2021 
    opened by smaranjitghose 0
Releases(v0.0.1)
A TensorFlow Implementation of "Deep Multi-Scale Video Prediction Beyond Mean Square Error" by Mathieu, Couprie & LeCun.

Adversarial Video Generation This project implements a generative adversarial network to predict future frames of video, as detailed in "Deep Multi-Sc

Matt Cooper 704 Nov 26, 2022
New approach to benchmark VQA models

VQA Benchmarking This repository contains the web application & the python interface to evaluate VQA models. Documentation Please see the documentatio

4 Jul 25, 2022
PyTorch Implementation of DiffGAN-TTS: High-Fidelity and Efficient Text-to-Speech with Denoising Diffusion GANs

DiffGAN-TTS - PyTorch Implementation PyTorch implementation of DiffGAN-TTS: High

Keon Lee 157 Jan 01, 2023
A booklet on machine learning systems design with exercises

Machine Learning Systems Design Read this booklet here. This booklet covers four main steps of designing a machine learning system: Project setup Data

Chip Huyen 7.6k Jan 08, 2023
Six - a Python 2 and 3 compatibility library

Six is a Python 2 and 3 compatibility library. It provides utility functions for smoothing over the differences between the Python versions with the g

Benjamin Peterson 919 Dec 28, 2022
Siamese TabNet

Raifhack-DS-2021 https://raifhack.ru/ - Команда Звёздочка Siamese TabNet Сиамская TabNet предсказывает стоимость объекта недвижимости с price_type=1,

Daniel Gafni 15 Apr 16, 2022
House-GAN++: Generative Adversarial Layout Refinement Network towards Intelligent Computational Agent for Professional Architects

House-GAN++ Code and instructions for our paper: House-GAN++: Generative Adversarial Layout Refinement Network towards Intelligent Computational Agent

122 Dec 28, 2022
Codes for our IJCAI21 paper: Dialogue Discourse-Aware Graph Model and Data Augmentation for Meeting Summarization

DDAMS This is the pytorch code for our IJCAI 2021 paper Dialogue Discourse-Aware Graph Model and Data Augmentation for Meeting Summarization [Arxiv Pr

xcfeng 55 Dec 27, 2022
This repository contains project created during the Data Challenge module at London School of Hygiene & Tropical Medicine

LSHTM_RCS This repository contains project created during the Data Challenge module at London School of Hygiene & Tropical Medicine (LSHTM) in collabo

Lukas Kopecky 3 Jan 30, 2022
This package is for running the semantic SLAM algorithm using extracted planar surfaces from the received detection

Semantic SLAM This package can perform optimization of pose estimated from VO/VIO methods which tend to drift over time. It uses planar surfaces extra

Hriday Bavle 125 Dec 02, 2022
Scripts of Machine Learning Algorithms from Scratch. Implementations of machine learning models and algorithms using nothing but NumPy with a focus on accessibility. Aims to cover everything from basic to advance.

Algo-ScriptML Python implementations of some of the fundamental Machine Learning models and algorithms from scratch. The goal of this project is not t

Algo Phantoms 81 Nov 26, 2022
The implementation of the paper "A Deep Feature Aggregation Network for Accurate Indoor Camera Localization".

A Deep Feature Aggregation Network for Accurate Indoor Camera Localization This is the PyTorch implementation of our paper "A Deep Feature Aggregation

9 Dec 09, 2022
Reinforcement Learning with Q-Learning Algorithm on gym's frozen lake environment implemented in python

Reinforcement Learning with Q Learning Algorithm Q learning algorithm is trained on the gym's frozen lake environment. Libraries Used gym Numpy tqdm P

1 Nov 10, 2021
YOLOX + ROS(1, 2) object detection package

YOLOX + ROS(1, 2) object detection package

Ar-Ray 158 Dec 21, 2022
Knowledge Management for Humans using Machine Learning & Tags

HyperTag HyperTag helps humans intuitively express how they think about their files using tags and machine learning.

Ravn Tech, Inc. 165 Nov 04, 2022
Real-time Joint Semantic Reasoning for Autonomous Driving

MultiNet MultiNet is able to jointly perform road segmentation, car detection and street classification. The model achieves real-time speed and state-

Marvin Teichmann 518 Dec 12, 2022
Official implementation of the paper Label-Efficient Semantic Segmentation with Diffusion Models

Label-Efficient Semantic Segmentation with Diffusion Models Official implementation of the paper Label-Efficient Semantic Segmentation with Diffusion

Yandex Research 355 Jan 06, 2023
QuadTree Attention for Vision Transformers (ICLR2022)

This repository contains codes for quadtree attention. This repo contains codes for feature matching, image classficiation, object detection and seman

tangshitao 222 Dec 28, 2022
Playing around with FastAPI and streamlit to create a YoloV5 object detector

FastAPI-Streamlit-based-YoloV5-detector Playing around with FastAPI and streamlit to create a YoloV5 object detector It turns out that a User Interfac

2 Jan 20, 2022
Official Pytorch implementation of "CLIPstyler:Image Style Transfer with a Single Text Condition"

CLIPstyler Official Pytorch implementation of "CLIPstyler:Image Style Transfer with a Single Text Condition" Environment Pytorch 1.7.1, Python 3.6 $ c

201 Dec 29, 2022