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)
Selene is a Python library and command line interface for training deep neural networks from biological sequence data such as genomes.

Selene is a Python library and command line interface for training deep neural networks from biological sequence data such as genomes.

Troyanskaya Laboratory 323 Jan 01, 2023
salabim - discrete event simulation in Python

Object oriented discrete event simulation and animation in Python. Includes process control features, resources, queues, monitors. statistical distrib

181 Dec 21, 2022
Pytorch implementation of "M-LSD: Towards Light-weight and Real-time Line Segment Detection"

M-LSD: Towards Light-weight and Real-time Line Segment Detection Pytorch implementation of "M-LSD: Towards Light-weight and Real-time Line Segment Det

123 Jan 04, 2023
最新版本yolov5+deepsort目标检测和追踪,支持5.0版本可训练自己数据集

使用YOLOv5+Deepsort实现车辆行人追踪和计数,代码封装成一个Detector类,更容易嵌入到自己的项目中。

422 Dec 30, 2022
Official implementation of "Motif-based Graph Self-Supervised Learning forMolecular Property Prediction"

Motif-based Graph Self-Supervised Learning for Molecular Property Prediction Official Pytorch implementation of NeurIPS'21 paper "Motif-based Graph Se

zaixi 71 Dec 20, 2022
Fake News Detection Using Machine Learning Methods

Fake-News-Detection-Using-Machine-Learning-Methods Fake news is always a real and dangerous issue. However, with the presence and abundance of various

Achraf Safsafi 1 Jan 11, 2022
Source code for the paper "Periodic Traveling Waves in an Integro-Difference Equation With Non-Monotonic Growth and Strong Allee Effect"

Source code for the paper "Periodic Traveling Waves in an Integro-Difference Equation With Non-Monotonic Growth and Strong Allee Effect" by Michael Ne

M Nestor 1 Apr 19, 2022
Official Pytorch implementation of 6DRepNet: 6D Rotation representation for unconstrained head pose estimation.

6D Rotation Representation for Unconstrained Head Pose Estimation (Pytorch) Paper Thorsten Hempel and Ahmed A. Abdelrahman and Ayoub Al-Hamadi, "6D Ro

Thorsten Hempel 284 Dec 23, 2022
Repo for the ACMMM20 submission: "Personalized breath based biometric authentication with wearable multimodality".

personalized-breath Repo for the ACMMM20 submission: "Personalized breath based biometric authentication with wearable multimodality". Guideline To ex

Manh-Ha Bui 2 Nov 15, 2021
Implementations of paper Controlling Directions Orthogonal to a Classifier

Classifier Orthogonalization Implementations of paper Controlling Directions Orthogonal to a Classifier , ICLR 2022, Yilun Xu, Hao He, Tianxiao Shen,

Yilun Xu 33 Dec 01, 2022
Learning to Reconstruct 3D Non-Cuboid Room Layout from a Single RGB Image

NonCuboidRoom Paper Learning to Reconstruct 3D Non-Cuboid Room Layout from a Single RGB Image Cheng Yang*, Jia Zheng*, Xili Dai, Rui Tang, Yi Ma, Xiao

67 Dec 15, 2022
PyTorch implementation of Octave Convolution with pre-trained Oct-ResNet and Oct-MobileNet models

octconv.pytorch PyTorch implementation of Octave Convolution in Drop an Octave: Reducing Spatial Redundancy in Convolutional Neural Networks with Octa

Duo Li 273 Dec 18, 2022
Implementation of Wasserstein adversarial attacks.

Stronger and Faster Wasserstein Adversarial Attacks Code for Stronger and Faster Wasserstein Adversarial Attacks, appeared in ICML 2020. This reposito

21 Oct 06, 2022
This is a vision-based 3d model manipulation and control UI

Manipulation of 3D Models Using Hand Gesture This program allows user to manipulation 3D models (.obj format) with their hands. The project support bo

Cortic Technology Corp. 43 Oct 23, 2022
[TIP 2020] Multi-Temporal Scene Classification and Scene Change Detection with Correlation based Fusion

Multi-Temporal Scene Classification and Scene Change Detection with Correlation based Fusion Code for Multi-Temporal Scene Classification and Scene Ch

Lixiang Ru 33 Dec 12, 2022
The dataset of tweets pulling from Twitters with keyword: Hydroxychloroquine, location: US, Time: 2020

HCQ_Tweet_Dataset: FREE to Download. Keywords: HCQ, hydroxychloroquine, tweet, twitter, COVID-19 This dataset is associated with the paper "Understand

2 Mar 16, 2022
Self Governing Neural Networks (SGNN): the Projection Layer

Self Governing Neural Networks (SGNN): the Projection Layer A SGNN's word projections preprocessing pipeline in scikit-learn In this notebook, we'll u

Guillaume Chevalier 22 Nov 06, 2022
Arbitrary Distribution Modeling with Censorship in Real Time 59 2 60 3 Bidding Advertising for KDD'21

Arbitrary_Distribution_Modeling This repo implements the Neighborhood Likelihood Loss (NLL) and Arbitrary Distribution Modeling (ADM, with Interacting

7 Jan 03, 2023
[arXiv'22] Panoptic NeRF: 3D-to-2D Label Transfer for Panoptic Urban Scene Segmentation

Panoptic NeRF Project Page | Paper | Dataset Panoptic NeRF: 3D-to-2D Label Transfer for Panoptic Urban Scene Segmentation Xiao Fu*, Shangzhan zhang*,

Xiao Fu 111 Dec 16, 2022
[NeurIPS'21] Shape As Points: A Differentiable Poisson Solver

Shape As Points (SAP) Paper | Project Page | Short Video (6 min) | Long Video (12 min) This repository contains the implementation of the paper: Shape

394 Dec 30, 2022