Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -160,3 +160,5 @@ cython_debug/
#.idea/

.python-version
data
docker-compose.yml
35 changes: 9 additions & 26 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ TARGET := videoanalytics

PROJECT_ROOT := $(abspath .)

# Docker
DOCKER_COMPOSE_BACKEND := docker-compose.yml

# Scripts settings:
SCRIPTS_DIR := scripts

Expand Down Expand Up @@ -64,8 +67,7 @@ endef
.PHONY: all launch frebuild stop silent-stop back-logs back-deep-logs back-sh deploy-backend

# General:
all: run-app # Launch videoanalytics (EXAMPLE USAGE>> make )
# all: check stop run-app # Launch videoanalytics (EXAMPLE USAGE>> make )
all: check silent-stop run-app # Launch videoanalytics (EXAMPLE USAGE>> make )

launch: silent-stop run-app # Launch videoanalytics without user choice to stop containers (EXAMPLE USAGE>> make launch)

Expand All @@ -89,40 +91,21 @@ back-sh: get-inside-backend # To get into backend (EXAMPLE USAGE>> make back-sh)
# ------------------------------
.PHONY: run-app

# run-app: figlet-launch compose-up-script

run-app: figlet-launch up-django-dockerfile
run-app: figlet-launch compose-up-script


# Sub commands:
# ------------------------------
.PHONY: figlet-launch up-django-dockerfile compose-up-script see-backend-logs stop-containers fclean stop-containers-without-read get-inside-backend ffclean check
.PHONY: figlet-launch compose-up-script see-backend-logs stop-containers fclean stop-containers-without-read get-inside-backend ffclean check

figlet-launch:
@echo "\n\n\n"
@figlet -c -t -f "ANSI Shadow" Launch app...
@echo "\n\n\n"

up-django-dockerfile:
@echo "$(COLOR_YELLOW)$(TAB)Stopping and deleting previous djangoo container...$(COLOR_CLEAR)"
@sudo docker stop djangoo_container || true
@sudo docker rm djangoo_container || true
@echo "$(COLOR_YELLOW)$(TAB)Creating backend image...$(COLOR_CLEAR)"
@sudo docker build -t djangoo $(TARGET)/.
@if [ -e /dev/video0 ]; then \
echo "$(COLOR_YELLOW)$(TAB)Running backend container with webcam...$(COLOR_CLEAR)"; \
sudo docker run -d -p 8000:8000 --device=/dev/video0 --name djangoo_container djangoo; \
else \
echo "$(COLOR_YELLOW)$(TAB)Running backend container without webcam...$(COLOR_CLEAR)"; \
sudo docker run -d -p 8000:8000 --name djangoo_container djangoo; \
fi
@echo "$(COLOR_GREEN)$(TAB)Backend container started up successfully!$(COLOR_CLEAR)"



get-inside-backend:
@echo "$(COLOR_YELLOW)$(TAB)Backend container sh...$(COLOR_CLEAR)"
@export CONTAINER_ID=$$(sudo docker ps -q --filter "name=djangoo_container"); \
@export CONTAINER_ID=$$(sudo docker ps -q --filter "name=django_videoanalytics"); \
sudo docker exec -it $$CONTAINER_ID sh
@echo "$(COLOR_GREEN)$(TAB)Backend container sh successfully!$(COLOR_CLEAR)"

Expand All @@ -133,13 +116,13 @@ compose-up-script:

see-backend-logs:
@echo "$(COLOR_YELLOW)$(TAB)Backend logs...$(COLOR_CLEAR)"
@export CONTAINER_ID=$$(sudo docker ps -q --filter "name=djangoo_container"); \
@export CONTAINER_ID=$$(sudo docker ps -q --filter "name=django_videoanalytics"); \
sudo docker exec -it $$CONTAINER_ID tail -f /var/log/fastapi.log
@echo "$(COLOR_GREEN)$(TAB)Backend logs finished successfully!$(COLOR_CLEAR)"

see-backend-deep-logs:
@echo "$(COLOR_YELLOW)$(TAB)Backend deep logs...$(COLOR_CLEAR)"
@export CONTAINER_ID=$$(sudo docker ps -q --filter "name=djangoo_container"); \
@export CONTAINER_ID=$$(sudo docker ps -q --filter "name=django_videoanalytics"); \
sudo docker exec -it $$CONTAINER_ID cat /var/log/fastapi.log
@echo "$(COLOR_GREEN)$(TAB)Backend deep logs finished successfully!$(COLOR_CLEAR)"

Expand Down
9 changes: 3 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,13 +77,10 @@ bash scripts/run.sh
**Выполнить следующую команду:**
```bash
sudo apt install -y make figlet
sudo docker build -t djangoo
sudo docker run -d -p 8000:8000 --name djangoo_container djangoo
// ИЛИ при наличии вебкамеры
sudo docker run -d -p 8000:8000 --device=/dev/video0 --name djangoo_container djangoo

bash scripts/docker-compose-setup.sh
sudo make
open http://127.0.1.1:8000/video_feed/?camera_url=do_not_have_webcam__if_have_dont_parametize__just_video_feed_slash
// ИЛИ при наличии вебкамеры
## ИЛИ при наличии вебкамеры
open http://127.0.1.1:8000/video_feed/
```
# Ожидаемый результат
Expand Down
40 changes: 40 additions & 0 deletions docker-compose-template.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
version: "3.9"

services:
postgres:
container_name: postgres_videoanalytics
image: postgres:latest
environment:
- POSTGRES_DB=my_database
- POSTGRES_USER=my_username
- POSTGRES_PASSWORD=my_password
networks:
- django_network
volumes:
- ./data:/var/lib/postgresql/data

django:
container_name: django_videoanalytics
build:
context: ./videoanalytics/
dockerfile: Dockerfile
ports:
- 8000:8000
depends_on:
- postgres
environment:
- POSTGRES_HOST=postgres
- POSTGRES_PORT=5432
- POSTGRES_DB=my_database
- POSTGRES_USER=my_username
- POSTGRES_PASSWORD=my_password
networks:
- django_network
# ${DEVICES}:
# ${DEVICES_DASH} /dev/video0:/dev/video0
volumes:
- ./data:/var/lib/postgresql/data

networks:
django_network:
driver: bridge
45 changes: 45 additions & 0 deletions scripts/docker-compose-setup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
###############################################################################
# File name: configure.sh
# Description: This script looks for webcam on system and creates docker-compose.yml file depending on it.
# Author: ovctech
# Date: February 2024
###############################################################################

#!/bin/bash

###############################################################################

# Check if the current directory is named "scripts"
RUNNING_FROM=$(basename "$PWD")
if [ "$RUNNING_FROM" == "scripts" ]; then
RELATIVE_PATH=".."
else
RELATIVE_PATH="."
fi

###############################################################################

# █████╗ █████╗ █████╗ █████╗ █████╗ █████╗ █████╗ █████╗
# ╚════╝ ╚════╝ ╚════╝ ╚════╝ ╚════╝ ╚════╝ ╚════╝ ╚════╝

###############################################################################

# Constants
TEMPLATE_DOCKER_COMPOSE="$RELATIVE_PATH/docker-compose-template.yml"
SOURCE_DOCKER_COMPOSE="$RELATIVE_PATH/docker-compose.yml"

###############################################################################

# Creating docker compose file for launch software
cp $TEMPLATE_DOCKER_COMPOSE $SOURCE_DOCKER_COMPOSE

# If webcam is detected on system
if test -n "$(find /dev -name 'video*' -print -quit)"; then
DEVICES="- /dev/video0:/dev/video0"
fi

# Then updating docker compose file
if [ -n "$DEVICES" ]; then
sed -i 's/# ${DEVICES}/devices/' $SOURCE_DOCKER_COMPOSE
sed -i 's/# ${DEVICES_DASH}/-/' $SOURCE_DOCKER_COMPOSE
fi
3 changes: 3 additions & 0 deletions scripts/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ fi

###############################################################################

# Prepate docker compose file depending on system webcam
bash $RELATIVE_PATH/scripts/docker-compose-setup.sh

# Run application if dependicies are already installed
sudo make
sleep 3
Expand Down
1 change: 1 addition & 0 deletions videoanalytics/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
libffi-dev \
libssl-dev \
libpq-dev \
&& rm -rf /var/lib/apt/lists/*

RUN python -m pip install --no-cache-dir poetry==1.7.1 \
Expand Down
9 changes: 7 additions & 2 deletions videoanalytics/backend/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"""

from pathlib import Path
import os

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
Expand Down Expand Up @@ -77,8 +78,12 @@

DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
"ENGINE": "django.db.backends.postgresql",
"HOST": os.environ.get("POSTGRES_HOST", "localhost"),
"PORT": os.environ.get("POSTGRES_PORT", ""),
"NAME": os.environ.get("POSTGRES_DB", ""),
"USER": os.environ.get("POSTGRES_USER", ""),
"PASSWORD": os.environ.get("POSTGRES_PASSWORD", ""),
}
}

Expand Down
Loading