diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 768ba89abe6c87a8ef75d3e8ad010eab5594d5f6..88087323073e3be32eeabeb414b1077f12854fac 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -28,7 +28,7 @@ image: python:3.9
 
 
 stages:
-  - build
+  - install
   - test
   - deploy
 
@@ -52,7 +52,7 @@ cache:
 #######################################################################################################################################
 
 install-virtualenv:
-  stage: build
+  stage: install
   script:
     - python3 -m venv venv/
     - source venv/bin/activate
@@ -66,7 +66,7 @@ install-virtualenv:
 
 install-npm-packages:
   image: node:14.6.0
-  stage: build
+  stage: install
   script:
     - cd ./frontend
     - npm ci
diff --git a/backend/Dockerfile b/backend/Dockerfile-app
similarity index 100%
rename from backend/Dockerfile
rename to backend/Dockerfile-app
diff --git a/backend/Dockerfile-model b/backend/Dockerfile-model
new file mode 100644
index 0000000000000000000000000000000000000000..c7fd5a8cd4b8b33b19644b1546326ebde5150ec8
--- /dev/null
+++ b/backend/Dockerfile-model
@@ -0,0 +1,5 @@
+FROM tensorflow/serving:latest as runtime
+
+EXPOSE 8501
+
+COPY ./model ./models/model/1/
\ No newline at end of file
diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml
index 72494bd9d8628ccbe572d903be41568ff37a7c80..1586f7782289457a8512593613ec9714aeadde19 100644
--- a/backend/docker-compose.yml
+++ b/backend/docker-compose.yml
@@ -13,12 +13,14 @@ services:
       timeout: 1s
       retries: 3
     ports:
-      - "3306:3306"
+      - 3306:3306
     volumes:
       - mysql-db:/var/lib/mysql
 
   app:
-    build: . 
+    build: 
+      context: .
+      dockerfile: Dockerfile-app
     container_name: "app"
     depends_on:
       db: 
@@ -29,8 +31,21 @@ services:
     env_file: .env
     environment:
       DB_HOST: db
+      MODEL_HOST: model
     links:
+      - model
       - db
 
+  model:
+    build: 
+      context: .
+      dockerfile: Dockerfile-model
+    container_name: "model"
+    restart: always
+    ports:
+      - 8501:8501
+    environment:
+      MODEL_NAME: "model"
+
 volumes:
   mysql-db:
\ No newline at end of file
diff --git a/backend/assets/keras_metadata.pb b/backend/model/keras_metadata.pb
similarity index 100%
rename from backend/assets/keras_metadata.pb
rename to backend/model/keras_metadata.pb
diff --git a/backend/assets/saved_model.pb b/backend/model/saved_model.pb
similarity index 100%
rename from backend/assets/saved_model.pb
rename to backend/model/saved_model.pb
diff --git a/backend/assets/variables/variables.data-00000-of-00001 b/backend/model/variables/variables.data-00000-of-00001
similarity index 100%
rename from backend/assets/variables/variables.data-00000-of-00001
rename to backend/model/variables/variables.data-00000-of-00001
diff --git a/backend/assets/variables/variables.index b/backend/model/variables/variables.index
similarity index 100%
rename from backend/assets/variables/variables.index
rename to backend/model/variables/variables.index
diff --git a/backend/requirements.txt b/backend/requirements.txt
index 035fe7337313c207f6398081f48c0735aa730ecb..8b39d9a9c42f8341d06d24d63702902c92d87029 100644
--- a/backend/requirements.txt
+++ b/backend/requirements.txt
@@ -1,20 +1,10 @@
-anyio==3.6.1
-asgiref==3.5.2
-click==8.1.3
 fastapi==0.78.0
-h11==0.13.0
-idna==2.8
-keras==2.9.0
 numpy==1.23.0
 opencv-python==4.6.0.66
 pydantic==1.9.1
-sniffio==1.2.0
-starlette==0.19.1
-typing-extensions==4.2.0
 uvicorn==0.17.6
 SQLAlchemy==1.4.19
 python-dotenv==0.18.0
 PyMySQL==1.0.2
 pytz==2022.1
 requests==2.25.1
-tensorflow==2.9.1
diff --git a/backend/video_capture.py b/backend/video_capture.py
index 08cf8533470937c824551fdf2c7e28441e7858e8..234575f310fe111415d92fc086f0af3546535387 100644
--- a/backend/video_capture.py
+++ b/backend/video_capture.py
@@ -1,19 +1,36 @@
 import cv2
 from datetime import datetime, timedelta
-import numpy as np
-import keras
 from utils.preprocessing import fix_singular_shape, norm_by_imagenet
+from dotenv import load_dotenv
+import numpy as np
+import requests
 import json
 import time
+import os
 
 from cameras import restaurants
 from db import models
 from db.database import SessionLocal
 from routers.websocket import manager
 
+load_dotenv()
+host = os.getenv('MODEL_HOST')
+port = os.getenv('MODEL_PORT')
+model = os.getenv('MODEL_NAME')
+
+def make_prediction(instances):
+    url = f"http://{host}:{port}/v1/models/{model}:predict"
+    data = json.dumps({"signature_name": "serving_default", "instances": instances.tolist()})
+    headers = {"content-type": "application/json"}
+    json_response = requests.post(url, data=data, headers=headers)
+    try:
+        predictions = json.loads(json_response.text)['predictions']
+    except:
+        print("prediction failed")
+    return predictions
 
 async def handle_cameras():
-    model = keras.models.load_model('assets', compile=False)
+
     db = SessionLocal()
     for restaurant in restaurants:
         for camera in restaurant["cameras"]:
@@ -53,7 +70,7 @@ async def handle_cameras():
                                     np.array(
                                         [treated_img]))),
                             axis=0)
-                        pred_map = np.squeeze(model.predict(input_image, verbose=0))
+                        pred_map = np.squeeze(make_prediction(input_image))
                         count_prediction += np.sum(pred_map)
                         for caisse in camera["caisses"]:
                             if np.sum(pred_map[caisse["x1"] // 2:caisse["x2"] // 2, caisse["y1"] // 2:caisse["y2"] // 2]) > 0.5: