From df9d0c787389a66f0ebf75c0adad5d8ac0917c10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Verstraeten?= Date: Thu, 5 Sep 2024 21:32:31 +0200 Subject: [PATCH] add k8s-deployment file + release docker hub --- .github/workflows/docker-publish.yml | 29 ++++++++ k8s-deployment.yaml | 100 +++++++++++++++++++++++++++ utils/ClassificationObject.py | 2 +- 3 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/docker-publish.yml create mode 100644 k8s-deployment.yaml diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 0000000..0ad29d3 --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,29 @@ +name: Build and Publish Docker Image +on: + release: + types: [created] +jobs: + build-and-push: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - name: Log in to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - name: Build and push Docker image with latest tag + uses: docker/build-push-action@v2 + with: + context: . + push: true + tags: uugai/hub-yolov8:latest + - name: Build and push Docker image with release tag + uses: docker/build-push-action@v2 + with: + context: . + push: true + tags: uugai/hub-yolov8:${{ github.ref_name }} diff --git a/k8s-deployment.yaml b/k8s-deployment.yaml new file mode 100644 index 0000000..eb95d1e --- /dev/null +++ b/k8s-deployment.yaml @@ -0,0 +1,100 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: hub-yolov8 + labels: + app: hub-yolov8 +spec: + replicas: 1 + selector: + matchLabels: + app: hub-yolov8 + template: + metadata: + labels: + app: hub-yolov8 + spec: + containers: + - name: hub-yolov8 + image: uugai/hub-yolov8:latest + resources: + limits: + nvidia.com/gpu: 1 # requesting a single GPU + cpu: 2 + memory: 2Gi + env: + # Queue parameters + - name: QUEUE_NAME + value: "kcloud-classify-queue.fifo" # This is the topic of RabbitMQ we will read messages from. + - name: TARGET_QUEUE_NAME + value: "kcloud-analysis-queue" # Once we processed the recording with ML, we will send results/metadata to a target topic of RabbitMQ. + - name: QUEUE_HOST + value: rabbitmq.rabbitmq:5672 + - name: QUEUE_EXCHANGE + - name: QUEUE_USERNAME + value: yourusername + - name: QUEUE_PASSWORD + value: yourpassword + + # Kerberos Vault parameters + - name: STORAGE_URI + value: "http://vault-lb.kerberos-vault/api" + - name: STORAGE_ACCESS_KEY + value: "52gyELgxutOXUWhF" + - name: STORAGE_SECRET_KEY + value: "k8DrcB@hQ5XfxDENzDKcnkxBHx" + + # YOLOv8 parameters + - name: MODEL_NAME + value: "yolov8n.pt" + - name: MEDIA_SAVEPATH + value: "/ml/data/input/video.mp4" + + - name: LOGGING + value: "True" + - name: PLOT + value: "False" + - name: SAVE_VIDEO + value: "False" + - name: OUTPUT_MEDIA_SAVEPATH + value: "path/to/your/output_video.mp4" + + - name: CREATE_BBOX_FRAME + value: "False" + - name: SAVE_BBOX_FRAME + value: "False" + - name: BBOX_FRAME_SAVEPATH + value: "path/to/your/output_bbox.jpg" + + - name: CREATE_RETURN_JSON + value: "True" + - name: SAVE_RETURN_JSON + value: "False" + - name: RETURN_JSON_SAVEPATH + value: "path/to/your/output_json.json" + + - name: TIME_VERBOSE + value: "True" + + - name: CLASSIFICATION_FPS + value: "3" + - name: CLASSIFICATION_THRESHOLD + value: "0.3" + - name: MIN_DETECTIONS + value: "5" + - name: MIN_DISTANCE + value: "150" + - name: MIN_STATIC_DISTANCE + value: "0" + - name: MAX_NUMBER_OF_PREDICTIONS + value: "100" + - name: FIND_DOMINANT_COLORS + value: "False" + - name: ALLOWED_CLASSIFICATIONS + value: "0, 1, 2, 3, 5, 7, 14, 15, 16, 24, 26, 28" + - name: COLOR_PREDICTION_INTERVAL + value: "5" + - name: MIN_CLUSTERS + value: "4" + - name: MAX_CLUSTERS + value: "4" diff --git a/utils/ClassificationObject.py b/utils/ClassificationObject.py index 1aadf77..fc15962 100644 --- a/utils/ClassificationObject.py +++ b/utils/ClassificationObject.py @@ -199,7 +199,7 @@ def edit_is_static(self): """ - if self.static_distance <= int(os.getenv('MIN_STATIC_DISTANCE')) and self.distance >= int(os.getenv('MIN_DISTANCE')): + if self.static_distance <= int(os.getenv('MIN_STATIC_DISTANCE')): self.is_static = True else: self.is_static = False