services:
  zookeeper:
    image: 'bitnami/zookeeper:3.5.5'
    volumes:
      - 'zookeeper_data:/bitnami'
    networks:
      - kafka_net
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
  kafka:
    image: 'bitnami/kafka:2.4.0'
    ports:
      - '9095:9095'
    volumes:
      - 'kafka_data:/bitnami'
    networks:
      - kafka_net
    environment:
      - KAFKA_BROKER_ID=1
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9095
      # Слушаются только запросы из внешней сети
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9095
    depends_on:
      - zookeeper
  detection:
    # Текущей директорией в путях является директория, в которой расположен данный docker-compose.yml файл
    build: ./detection/docker-build-context
    image: devbeh/detection
    volumes:
      - type: bind
        # Подключаем директорию с кодом. Данный volume не является read_only, поскольку программа может автоматически
        # скачать и сохранить в нем файлы весов моделей
        source: .
        target: /opt/detection/src
    network_mode: host
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=${DEVBEH_DETECTION_NVIDIA_VISIBLE_DEVICES:-0}
    command: 'python3.6 run.py detection --log_dir /opt/detection/logs
    --weights_url ${DEVBEH_DETECTION_WEIGHTS_URL:-https://www.dropbox.com/s/qx1tlfmpkacvmep/COCO-MaskRCNN-R101FPN9xGNCasAugScratch.npz?dl=1}
    --bootstrap_servers ${DEVBEH_KAFKA_BOOTSTRAP_SERVERS:-localhost:9095}
    --username "${DEVBEH_KAFKA_USERNAME:-}"
    --password "${DEVBEH_KAFKA_PASSWORD:-}"
    --batch_size ${DEVBEH_DETECTION_BATCH_SIZE:-1}
    --name ${DEVBEH_DETECTION_INSTANCE_NAME:-detection}'
  detection_cbnet:
    # Текущей директорией в путях является директория, в которой расположен данный docker-compose.yml файл
    build: ./detection_cbnet/docker-build-context
    image: devbeh/detection_cbnet
    volumes:
      - type: bind
        # Подключаем директорию с кодом. Данный volume не является read_only, поскольку программа может автоматически
        # скачать и сохранить в нем файлы весов моделей
        source: .
        target: /opt/detection_cbnet/src
    network_mode: host
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=${DEVBEH_DETECTION_CBNET_NVIDIA_VISIBLE_DEVICES:-0}
    command: 'python run.py detection_cbnet --log_dir /opt/detection_cbnet/logs
      --weights_url ${DEVBEH_DETECTION_CBNET_WEIGHTS_URL:-https://www.dropbox.com/s/0vsk5zld23tgrka/htc_cbv2_swin_large22k_patch4_window7_mstrain_400-1400_giou_4conv1f_adamw_1x_coco.pth?dl=1}
      --bootstrap_servers ${DEVBEH_KAFKA_BOOTSTRAP_SERVERS:-localhost:9095}
      --username "${DEVBEH_KAFKA_USERNAME:-}"
      --password "${DEVBEH_KAFKA_PASSWORD:-}"
      --batch_size ${DEVBEH_DETECTION_CBNET_BATCH_SIZE:-1}
      --name ${DEVBEH_DETECTION_CBNET_INSTANCE_NAME:-detection_cbnet}'
  pose3d:
    build: ./pose3d/docker-build-context
    image: devbeh/pose3d
    volumes:
      - type: bind
        # Подключаем директорию с кодом. Данный volume не является read_only, поскольку программа может автоматически
        # скачать и сохранить в нем файлы весов моделей
        source: .
        target: /opt/pose3d/src
    network_mode: host
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=${DEVBEH_POSE3D_NVIDIA_VISIBLE_DEVICES:-0}
    command: 'python run.py pose3d --log_dir /opt/pose3d/logs
    --graphormer_weights_url ${DEVBEH_POSE3D_GRAPHORMER_WEIGHTS_URL:-https://datarelease.blob.core.windows.net/metro/models/graphormer_h36m_state_dict.bin}
    --hrnet_weights_url ${DEVBEH_POSE3D_HRNET_WEIGHTS_URL:-https://datarelease.blob.core.windows.net/metro/models/hrnetv2_w64_imagenet_pretrained.pth}
    --bootstrap_servers ${DEVBEH_KAFKA_BOOTSTRAP_SERVERS:-localhost:9095}
    --username "${DEVBEH_KAFKA_USERNAME:-}"
    --password "${DEVBEH_KAFKA_PASSWORD:-}"
    --batch_size ${DEVBEH_POSE3D_BATCH_SIZE:-1}
    --name ${DEVBEH_POSE3D_INSTANCE_NAME:-pose3d}'
  pose3d_vhm:
    build: ./pose3d_vhm/docker-build-context
    image: devbeh/pose3d_vhm
    volumes:
      - type: bind
        # Подключаем директорию с кодом. Данный volume не является read_only, поскольку программа может автоматически
        # скачать и сохранить в нем файлы весов моделей
        source: .
        target: /opt/pose3d_vhm/src
    network_mode: host
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=${DEVBEH_POSE3D_VHM_NVIDIA_VISIBLE_DEVICES:-0}
    command: 'python run.py pose3d_vhm --log_dir /opt/pose3d_vhm/logs
      --weights_url ${DEVBEH_POSE3D_WEIGHTS_URL:-https://www.dropbox.com/s/5889lels808tm0v/model_chall_train_152ft_384x288.pth.tar?dl=1}
      --bootstrap_servers ${DEVBEH_KAFKA_BOOTSTRAP_SERVERS:-localhost:9095}
      --username "${DEVBEH_KAFKA_USERNAME:-}"
      --password "${DEVBEH_KAFKA_PASSWORD:-}"
      --batch_size ${DEVBEH_POSE3D_VHM_BATCH_SIZE:-1}
      --name ${DEVBEH_POSE3D_VHM_INSTANCE_NAME:-pose3d_vhm}'
  tracking:
    build: ./tracking/docker-build-context
    image: devbeh/tracking
    volumes:
      - type: bind
        # Подключаем директорию с кодом. Данный volume не является read_only, поскольку программа может автоматически
        # скачать и сохранить в нем файлы весов моделей
        source: .
        target: /opt/tracking/src
    network_mode: host
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=${DEVBEH_TRACKING_NVIDIA_VISIBLE_DEVICES:-0}
# https://drive.google.com/u/0/uc?export=download&confirm=2ySX&id=1HX2_JpMOjOIj1Z9rJjoet9XNy_cCAs5U - bytrack
    command: 'python run.py tracking --log_dir /opt/tracking/logs
        --fairmot_weights_url ${DEVBEH_FAIRMOT_WEIGHTS_URL:-https://drive.google.com/u/0/uc?export=download&confirm=VHcw&id=1iqRQjsG9BawIl8SlFomMg5iwkb6nqSpi}
        --use_fairmot
        --bootstrap_servers ${DEVBEH_KAFKA_BOOTSTRAP_SERVERS:-localhost:9095}
        --username "${DEVBEH_KAFKA_USERNAME:-}"
        --password "${DEVBEH_KAFKA_PASSWORD:-}"
        --batch_size ${DEVBEH_TRACKING_BATCH_SIZE:-1}
        --frames_commit_latency ${DEVBEH_TRACKING_FRAMES_COMMIT_LATENCY:-100}
        --name ${DEVBEH_TRACKING_INSTANCE_NAME:-tracking}'
networks:
  kafka_net:
    driver: bridge
volumes:
  zookeeper_data:
    driver: local
  kafka_data:
    driver: local