-
Notifications
You must be signed in to change notification settings - Fork 356
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #636 from Raghucharan16/chicken-disease-classifica…
…tion Added complete project of chicken disease classification
- Loading branch information
Showing
43 changed files
with
3,583 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
FROM python:3.8-slim-buster | ||
|
||
RUN apt update -y && apt install awscli -y | ||
WORKDIR /app | ||
|
||
COPY . /app | ||
RUN pip install -r requirements.txt | ||
|
||
CMD ["python3", "app.py"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
MIT License | ||
|
||
Copyright (c) 2023 BAPPY AHMED | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,203 @@ | ||
# Chicken-Disease-Classification-Project | ||
|
||
|
||
## Workflows | ||
|
||
1. Update config.yaml | ||
2. Update secrets.yaml [Optional] | ||
3. Update params.yaml | ||
4. Update the entity | ||
5. Update the configuration manager in src config | ||
6. Update the components | ||
7. Update the pipeline | ||
8. Update the main.py | ||
9. Update the dvc.yaml | ||
While Building the project, we have to follow these workflows, make sure we are updating everthing at every step. | ||
|
||
# How to run? | ||
### STEPS: | ||
|
||
Clone the repository | ||
|
||
```bash | ||
https://github.com/entbappy/Chicken-Disease-Classification--Project | ||
``` | ||
### STEP 01- Create a conda environment after opening the repository | ||
|
||
```bash | ||
conda create -n cnncls python=3.8 -y | ||
``` | ||
|
||
```bash | ||
conda activate cnncls | ||
``` | ||
|
||
|
||
### STEP 02- install the requirements | ||
```bash | ||
pip install -r requirements.txt | ||
``` | ||
|
||
|
||
```bash | ||
# Finally run the following command | ||
python app.py | ||
``` | ||
|
||
Now, | ||
```bash | ||
open up you local host and port | ||
``` | ||
|
||
|
||
### DVC cmd | ||
|
||
1. dvc init | ||
2. dvc repro | ||
3. dvc dag | ||
|
||
|
||
## MLflow | ||
|
||
[Documentation](https://mlflow.org/docs/latest/index.html) | ||
|
||
|
||
##### cmd | ||
- mlflow ui | ||
|
||
### dagshub | ||
[dagshub](https://dagshub.com/) | ||
|
||
MLFLOW_TRACKING_URI=https://dagshub.com/entbappy/MLflow-DVC-Chicken-Disease-Classification.mlflow | ||
MLFLOW_TRACKING_USERNAME=entbappy | ||
MLFLOW_TRACKING_PASSWORD=6824692c47a369aa6f9eac5b10041d5c8edbcef0 | ||
python script.py | ||
|
||
Run this to export as env variables: | ||
|
||
```bash | ||
|
||
export MLFLOW_TRACKING_URI=https://dagshub.com/entbappy/MLflow-DVC-Chicken-Disease-Classification.mlflow | ||
|
||
export MLFLOW_TRACKING_USERNAME=entbappy | ||
|
||
export MLFLOW_TRACKING_PASSWORD=6824692c47a369aa6f9eac5b10041d5c8edbcef0 | ||
|
||
``` | ||
|
||
|
||
# AWS-CICD-Deployment-with-Github-Actions | ||
|
||
## 1. Login to AWS console. | ||
|
||
## 2. Create IAM user for deployment | ||
|
||
#with specific access | ||
|
||
1. EC2 access : It is virtual machine | ||
|
||
2. ECR: Elastic Container registry to save your docker image in aws | ||
|
||
|
||
#Description: About the deployment | ||
|
||
1. Build docker image of the source code | ||
|
||
2. Push your docker image to ECR | ||
|
||
3. Launch Your EC2 | ||
|
||
4. Pull Your image from ECR in EC2 | ||
|
||
5. Lauch your docker image in EC2 | ||
|
||
#Policy: | ||
|
||
1. AmazonEC2ContainerRegistryFullAccess | ||
|
||
2. AmazonEC2FullAccess | ||
|
||
|
||
## 3. Create ECR repo to store/save docker image | ||
- Save the URI: 566373416292.dkr.ecr.us-east-1.amazonaws.com/chicken | ||
|
||
|
||
## 4. Create EC2 machine (Ubuntu) | ||
|
||
## 5. Open EC2 and Install docker in EC2 Machine: | ||
|
||
|
||
#optinal | ||
|
||
sudo apt-get update -y | ||
|
||
sudo apt-get upgrade | ||
|
||
#required | ||
|
||
curl -fsSL https://get.docker.com -o get-docker.sh | ||
|
||
sudo sh get-docker.sh | ||
|
||
sudo usermod -aG docker ubuntu | ||
|
||
newgrp docker | ||
|
||
# 6. Configure EC2 as self-hosted runner: | ||
setting>actions>runner>new self hosted runner> choose os> then run command one by one | ||
|
||
|
||
# 7. Setup github secrets: | ||
|
||
AWS_ACCESS_KEY_ID= | ||
|
||
AWS_SECRET_ACCESS_KEY= | ||
|
||
AWS_REGION = us-east-1 | ||
|
||
AWS_ECR_LOGIN_URI = demo>> 566373416292.dkr.ecr.ap-south-1.amazonaws.com | ||
|
||
ECR_REPOSITORY_NAME = simple-app | ||
|
||
|
||
|
||
|
||
# AZURE-CICD-Deployment-with-Github-Actions | ||
|
||
## Save pass: | ||
|
||
s3cEZKH5yytiVnJ3h+eI3qhhzf9q1vNwEi6+q+WGdd+ACRCZ7JD6 | ||
|
||
|
||
## Run from terminal: | ||
|
||
docker build -t chickenapp.azurecr.io/chicken:latest . | ||
|
||
docker login chickenapp.azurecr.io | ||
|
||
docker push chickenapp.azurecr.io/chicken:latest | ||
|
||
|
||
## Deployment Steps: | ||
|
||
1. Build the Docker image of the Source Code | ||
2. Push the Docker image to Container Registry | ||
3. Launch the Web App Server in Azure | ||
4. Pull the Docker image from the container registry to Web App server and run | ||
|
||
|
||
|
||
## About MLflow & DVC | ||
|
||
MLflow | ||
|
||
- Its Production Grade | ||
- Trace all of your expriements | ||
- Logging & taging your model | ||
|
||
|
||
DVC | ||
|
||
- Its very lite weight for POC only | ||
- lite weight expriements tracker | ||
- It can perform Orchestration (Creating Pipelines) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
from flask import Flask, request, jsonify, render_template | ||
import os | ||
from flask_cors import CORS, cross_origin | ||
from cnnClassifier.utils.common import decodeImage | ||
from cnnClassifier.pipeline.predict import PredictionPipeline | ||
|
||
|
||
os.putenv('LANG', 'en_US.UTF-8') | ||
os.putenv('LC_ALL', 'en_US.UTF-8') | ||
|
||
app = Flask(__name__) | ||
CORS(app) | ||
|
||
|
||
class ClientApp: | ||
def __init__(self): | ||
self.filename = "inputImage.jpg" | ||
self.classifier = PredictionPipeline(self.filename) | ||
|
||
|
||
@app.route("/", methods=['GET']) | ||
@cross_origin() | ||
def home(): | ||
return render_template('index.html') | ||
|
||
|
||
@app.route("/train", methods=['GET','POST']) | ||
@cross_origin() | ||
def trainRoute(): | ||
os.system("python main.py") | ||
return "Training done successfully!" | ||
|
||
|
||
|
||
@app.route("/predict", methods=['POST']) | ||
@cross_origin() | ||
def predictRoute(): | ||
image = request.json['image'] | ||
decodeImage(image, clApp.filename) | ||
result = clApp.classifier.predict() | ||
return jsonify(result) | ||
|
||
|
||
if __name__ == "__main__": | ||
clApp = ClientApp() | ||
# app.run(host='0.0.0.0', port=8080) #local host | ||
# app.run(host='0.0.0.0', port=8080) #for AWS | ||
app.run(host='0.0.0.0', port=80) #for AZURE | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
artifacts_root: artifacts | ||
|
||
|
||
data_ingestion: | ||
root_dir: artifacts/data_ingestion | ||
source_URL: https://github.com/entbappy/Branching-tutorial/raw/master/Chicken-fecal-images.zip | ||
local_data_file: artifacts/data_ingestion/data.zip | ||
unzip_dir: artifacts/data_ingestion | ||
|
||
|
||
|
||
prepare_base_model: | ||
root_dir: artifacts/prepare_base_model | ||
base_model_path: artifacts/prepare_base_model/base_model.h5 | ||
updated_base_model_path: artifacts/prepare_base_model/base_model_updated.h5 | ||
|
||
|
||
|
||
|
||
prepare_callbacks: | ||
root_dir: artifacts/prepare_callbacks | ||
tensorboard_root_log_dir: artifacts/prepare_callbacks/tensorboard_log_dir | ||
checkpoint_model_filepath: artifacts/prepare_callbacks/checkpoint_dir/model.h5 | ||
|
||
|
||
|
||
|
||
training: | ||
root_dir: artifacts/training | ||
trained_model_path: artifacts/training/model.h5 |
Oops, something went wrong.