Skip to content

mkdirlife/safe-eye

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

64 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Safe-Eye: ๋น„๋””์˜ค ๊ฐ์‹œ ๋ฐ ์ด์ƒ ํ–‰๋™ ๊ฐ์ง€ ์‹œ์Šคํ…œ

Safe-Eye๋Š” PySlowFast ๋ชจ๋ธ๊ณผ Django ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ™œ์šฉํ•œ ๋น„๋””์˜ค ๊ฐ์‹œ ๋ฐ ์ด์ƒ ํ–‰๋™ ๊ฐ์ง€ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” CCTV ๋˜๋Š” ๋ณด์•ˆ ์นด๋ฉ”๋ผ์—์„œ ์ˆ˜์ง‘๋œ ๋น„๋””์˜ค ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ถ„์„ํ•˜์—ฌ ์ž ์žฌ์ ์ธ ์œ„ํ—˜ ์ƒํ™ฉ์„ ํƒ์ง€ํ•˜๊ณ  ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

safe-eye

๋ชฉ์ฐจ

Safe Eye - ์Šค๋งˆํŠธ์•ˆ์ „ ๊ฒฝ๊ณ  ์•Œ๋žŒ ์„œ๋น„์Šค

Safe Eye๋Š” CCTV ์นด๋ฉ”๋ผ์™€ AI ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜์—ฌ ๊ณต๊ฐ„ ์•ˆ์ „์„ ๊ฐ•ํ™”ํ•˜๊ณ ์ž ๋งŒ๋“  ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ ๋น„์ „ ๋ฐ ์ธ๊ณต์ง€๋Šฅ ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜์—ฌ CCTV ์˜์ƒ์„ ๋ถ„์„ํ•˜๊ณ , ์ž ์žฌ์ ์ธ ์œ„ํ—˜ ์ƒํ™ฉ์„ ์‹ ์†ํ•˜๊ฒŒ ๊ฐ์ง€ํ•˜์—ฌ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์•ˆ์ „ ๊ด€๋ฆฌ์ž๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ(๋˜๋ฉด ์ฒดํฌ ํ‘œ์‹œ)

  1. ์‹ค์‹œ๊ฐ„ ์ด์ƒ ํ–‰๋™ ๊ฐ์ง€

    • CCTV ์˜์ƒ์—์„œ ์‚ฌ๋žŒ๋“ค์˜ ํ–‰๋™์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ถ„์„ํ•˜์—ฌ ์ด์ƒ ํ–‰๋™์„ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค.
    • ํญ๋ ฅ, ์ ˆ๋„, ๊ธฐ๋ฌผ ํŒŒ์† ๋“ฑ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ์ด์ƒ ํ–‰๋™์„ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ด์ƒ ํ–‰๋™ ๋ฐœ์ƒ ์‹œ ์ฆ‰๊ฐ์ ์ธ ์•Œ๋žŒ์„ ๋ฐœ์†กํ•˜์—ฌ ์‹ ์†ํ•œ ๋Œ€์‘์„ ์ด‰์ง„ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ƒ์„ธ ๋ถ„์„ ํ™”๋ฉด

    • ์„ ํƒํ•œ ์นด๋ฉ”๋ผ ๋˜๋Š” ์˜์—ญ์˜ ๊ณ ํ•ด์ƒ๋„ ๋น„๋””์˜ค ํ”ผ๋“œ
    • ๊ฐ์ง€ ์ด๋ฒคํŠธ ๋ชฉ๋ก ๋ฐ ์ƒ์„ธ ์ •๋ณด
    • ์‚ฌ์šฉ์ž ๋ฉ”๋ชจ ๋ฐ ์„ค๋ช… ์ถ”๊ฐ€ ๊ธฐ๋Šฅ
    • ๋น„๋””์˜ค ํด๋ฆฝ, ์Šคํฌ๋ฆฐ์ƒท ๋ฐ ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ ๋‚ด๋ณด๋‚ด๊ธฐ
  3. ๊ฒฝ๊ณ  ๋ฐ ์•Œ๋žŒ ์„ค์ • ํ™”๋ฉด

    • ๊ฒฝ๊ณ  ๋ฐ ์•Œ๋žŒ ์ˆ˜์ค€์— ๋”ฐ๋ฅธ ํŠน์ • ์ž‘์—… ์„ค์ •
    • ์ƒ์„ฑํ˜• AI ๋ชจ๋ธ์„ ํ™œ์šฉํ•œ ๋งฅ๋ฝ ์ ํ•ฉ ๊ฒฝ๊ณ  ๋ฐ ์•Œ๋žŒ ๋ฉ”์‹œ์ง€ ์ž๋™ ์ƒ์„ฑ
    • ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ€๋Šฅํ•œ ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€ ๋ฐ ์ˆ˜์‹ ์ž ๋ชฉ๋ก
    • ์ •๊ธฐ์ ์ธ ํ…Œ์ŠคํŠธ ๋ฐ ํ›ˆ๋ จ ์˜ˆ์•ฝ ๊ธฐ๋Šฅ
  4. ํ†ต๊ณ„ ๋ฐ ๋ณด๊ณ  ํ™”๋ฉด

    • ๊ธฐ๊ฐ„ ๋ณ„ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ƒ์„ธ ๋ณด๊ณ ์„œ ์ƒ์„ฑ
    • ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง ๋ฐ ์ •๋ ฌ ์˜ต์…˜
    • ํ†ต๊ณ„ ๋ฐ์ดํ„ฐ, ์ด๋ฒคํŠธ ๋กœ๊ทธ ๋ฐ ๋ณด๊ณ ์„œ ๋‚ด๋ณด๋‚ด๊ธฐ
    • ์ž๋™ ๋ณด๊ณ ์„œ ์ƒ์„ฑ ๋ฐ ์ „๋‹ฌ ์˜ˆ์•ฝ ๊ธฐ๋Šฅ
  5. ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๋ฐ ์„ค์ • ํ™”๋ฉด

    • ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์ •๋ณด ์—…๋ฐ์ดํŠธ ๋ฐ ์•Œ๋ฆผ ๊ธฐ๋ณธ ์„ค์ •
    • ์‹œ์Šคํ…œ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์ง„๋‹จ ๋„๊ตฌ
    • ๊ฐ ์‚ฌ์šฉ์ž์˜ ์Šคํ…Œ์ดํ„ฐ์Šค์— ๋”ฐ๋ผ ์•Œ๋žŒ์„ ๋ถ„๋ฅ˜
  6. ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ธฐ๋Šฅ

    • ์ฑ„ํŒ…๋ฐฉ ์ž…์žฅ, ํ‡ด์žฅ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ
    • ๋ฉ”์‹œ์ง€ ์ˆ˜์‹  ๋ฐ ์ „์†ก ๊ธฐ๋Šฅ ๊ตฌํ˜„

๊ธฐ์ˆ  ์Šคํƒ(์˜ˆ์ƒ)

  • ๋ฐฑ์—”๋“œ: Django, Pillow, DRF, ์Šค์›จ๊ฑฐ, NumPy
  • ํ”„๋ก ํŠธ์—”๋“œ: Next.js
  • ๋จธ์‹ ๋Ÿฌ๋‹: TensorFlow, PyTorch
  • ์ปดํ“จํ„ฐ ๋น„์ „: OpenCV
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: PostgreSQL
  • ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ: Apache Kafka
  • DevOps: Docker, Kubernetes

๋ผ์ด์„ ์Šค

SafeEye ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ

  1. ํ™˜๊ฒฝ ์ค€๋น„:
  • ํ•˜๋“œ์›จ์–ด ์š”๊ตฌ ์‚ฌํ•ญ: Ubuntu 18.04, 12th Gen Intel(R) Core(TM) i5 CPU, NVIDIA GeForce RTX 3070 GPU
  • ์†Œํ”„ํŠธ์›จ์–ด ๋ฐ ๋ชจ๋“ˆ ์„ค์น˜: Python 3.9๊ณผ CUDA 11.6 ์„ค์น˜ ํ•„์š”ํ•œ Python ๋ชจ๋“ˆ์„ requirements.txt์„ ์‚ฌ์šฉํ•ด ์„ค์น˜
  1. ๋ชจ๋ธ ์ •๋ณด:
    • PySlowFast ๋ชจ๋ธ ์ฃผ๋กœ ์ด์ƒ ํ–‰๋™ ์ธ์‹์— ์‚ฌ์šฉ

์„ค์น˜ ๋ฐ ์‹คํ–‰

  1. ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ ํด๋ก :

    git clone https://github.com/proactive/safe-eye.git
    cd Safe-eye
    
  2. ํ•„์š”ํ•œ ์ข…์†์„ฑ ์„ค์น˜:

    source ./venv/Scripts/activate
    pip install -r requirements.txt
    

    or

    ./commands.sh
    reinstall
    
  3. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •:

    cp .env.example .env
    # .env ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜์—ฌ ํ•„์š”ํ•œ ์„ค์ • ๊ฐ’ ์ž…๋ ฅ
    
  4. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹คํ–‰:

    python manage.py migrate
    

    or

    ./commands.sh migrate
    
  5. Django ์„œ๋ฒ„ ์‹คํ–‰:

    python manage.py runserver
    
  6. Next.js ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ:

    // git clone
    git clone https://github.com/team-proactive/safe-eye-front.git
    cd safe-eye-front
    
    cp .env.local.example .env.local
    
    npm install
    npm run dev

commands script file

  1. commands.sh ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜์—ฌ ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ Git Bash์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    • ์„ธ์…˜ ๋‚ด์—์„œ ์‹คํ–‰ํ•˜๊ณ  ๊ฐ€์ƒํ™˜๊ฒฝ์„ ์ข…๋ฃŒํ•˜๋ ค๋ฉด ./commands.sh๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • ์„ธ์…˜์ด ์ข…๋ฃŒ๋˜๋”๋ผ๋„ ๊ฐ€์ƒํ™˜๊ฒฝ์„ ์œ ์ง€ํ•˜๋ ค๋ฉด . commands.sh๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•˜๊ณ  ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด reinstall ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•  ํŒจํ‚ค์ง€๋ฅผ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ์—”ํ„ฐ๋ฅผ ๋ˆŒ๋Ÿฌ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด migrate ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  4. ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด run ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐํƒ€ ์ปค๋งจ๋“œ

  • install: ์ดˆ๊ธฐ ์„ค์น˜๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•˜๊ณ  Django ํ”„๋กœ์ ํŠธ์™€ ์•ฑ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • activate: ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • migrate: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • run: Django ๊ฐœ๋ฐœ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • create: static, media, templates ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • static: static ํŒŒ์ผ์„ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.
  • reinstall: ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์žฌ์„ค์น˜ํ•˜๊ณ  requirements.txt์— ๋ช…์‹œ๋œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • remove: ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  • add_admin: ๊ด€๋ฆฌ์ž ๊ณ„์ •์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • mock_data: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

Mock Data

mock_data ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋Š” ๊ฐ ์•ฑ์˜ fixtures/initial_data.json ํŒŒ์ผ์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ์„ ๋ณ€๊ฒฝํ•œ ํ›„์—๋Š” ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ญ์ œํ•˜๊ณ , AI๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ชจ๋ธ์— ๋Œ€ํ•œ initial_data.json ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ mock_data ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

ํด๋” ๊ตฌ์กฐ

๐Ÿ“ฆsafe-eye
 โ”ฃ ๐Ÿ“‚config
 โ”ƒ โ”ฃ ๐Ÿ“œasgi.py
 โ”ƒ โ”ฃ ๐Ÿ“œsettings.py
 โ”ƒ โ”ฃ ๐Ÿ“œurls.py
 โ”ƒ โ”— ๐Ÿ“œwsgi.py
 โ”ฃ ๐Ÿ“‚accounts
 โ”ƒ โ”ฃ ๐Ÿ“œadmin.py
 โ”ƒ โ”ฃ ๐Ÿ“œapps.py
 โ”ƒ โ”ฃ ๐Ÿ“œmodels.py
 โ”ƒ โ”ฃ ๐Ÿ“œserializers.py
 โ”ƒ โ”ฃ ๐Ÿ“œtests.py
 โ”ƒ โ”ฃ ๐Ÿ“œurls.py
 โ”ƒ โ”— ๐Ÿ“œviews.py
 โ”ฃ ๐Ÿ“‚alarm
 โ”ƒ โ”ฃ ๐Ÿ“‚fixtures
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œinitial_data.json
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œmock_data_gen.py
 โ”ƒ โ”ฃ ๐Ÿ“œadmin.py
 โ”ƒ โ”ฃ ๐Ÿ“œapps.py
 โ”ƒ โ”ฃ ๐Ÿ“œmodels.py
 โ”ƒ โ”ฃ ๐Ÿ“œserializers.py
 โ”ƒ โ”ฃ ๐Ÿ“œtests.py
 โ”ƒ โ”ฃ ๐Ÿ“œurls.py
 โ”ƒ โ”— ๐Ÿ“œviews.py
 โ”ฃ ๐Ÿ“‚notice
 โ”ƒ โ”ฃ ๐Ÿ“‚fixtures
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œinitial_data.json
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œmock_data_gen.py
 โ”ƒ โ”ฃ ๐Ÿ“œadmin.py
 โ”ƒ โ”ฃ ๐Ÿ“œapps.py
 โ”ƒ โ”ฃ ๐Ÿ“œmodels.py
 โ”ƒ โ”ฃ ๐Ÿ“œserializers.py
 โ”ƒ โ”ฃ ๐Ÿ“œtests.py
 โ”ƒ โ”ฃ ๐Ÿ“œurls.py
 โ”ƒ โ”— ๐Ÿ“œviews.py
 โ”ฃ ๐Ÿ“‚madia
 โ”ƒ โ”ฃ ๐Ÿ“‚fixtures
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œinitial_data.json
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œmock_data_gen.py
 โ”ƒ โ”ฃ ๐Ÿ“œadmin.py
 โ”ƒ โ”ฃ ๐Ÿ“œapps.py
 โ”ƒ โ”ฃ ๐Ÿ“œmodels.py
 โ”ƒ โ”ฃ ๐Ÿ“œserializers.py
 โ”ƒ โ”ฃ ๐Ÿ“œtests.py
 โ”ƒ โ”ฃ ๐Ÿ“œurls.py
 โ”ƒ โ”— ๐Ÿ“œviews.py
 โ”ฃ ๐Ÿ“‚utils
 โ”ƒ โ”ฃ ๐Ÿ“‚fixtures
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œinitial_data.json
 โ”ƒ โ”ฃ ๐Ÿ“‚migrations
 โ”ƒ โ”ฃ ๐Ÿ“œadmin.py
 โ”ƒ โ”ฃ ๐Ÿ“œapps.py
 โ”ƒ โ”ฃ ๐Ÿ“œmixins.py
 โ”ƒ โ”ฃ ๐Ÿ“œmodels.py
 โ”ƒ โ”ฃ ๐Ÿ“œserializers.py
 โ”ƒ โ”ฃ ๐Ÿ“œtests.py
 โ”ƒ โ”ฃ ๐Ÿ“œurls.py
 โ”ƒ โ”ฃ ๐Ÿ“œviews.py
 โ”ฃ ๐Ÿ“‚chat
 โ”ƒ โ”ฃ ๐Ÿ“‚__pycache__
 โ”ƒ โ”ฃ ๐Ÿ“‚migrations
 โ”ƒ โ”ฃ ๐Ÿ“œ__iniit__.py
 โ”ƒ โ”ฃ ๐Ÿ“œadmin.py
 โ”ƒ โ”ฃ ๐Ÿ“œapps.py
 โ”ƒ โ”ฃ ๐Ÿ“œmodels.py
 โ”ƒ โ”ฃ ๐Ÿ“œserializers.py
 โ”ƒ โ”ฃ ๐Ÿ“œtests.py
 โ”ƒ โ”ฃ ๐Ÿ“œurls.py
 โ”ƒ โ”ฃ ๐Ÿ“œviews.py
 โ”ฃ ๐Ÿ“œ.env
 โ”ฃ ๐Ÿ“œ.env.example
 โ”ฃ ๐Ÿ“œ.gitignore
 โ”ฃ ๐Ÿ“œa-team.png
 โ”ฃ ๐Ÿ“œcommands.sh
 โ”ฃ ๐Ÿ“œmanage.py
 โ”ฃ ๐Ÿ“œREADME.md
 โ”— ๐Ÿ“œrequirements.txt

์•ฑ ์„ค๋ช…

  1. accounts ์•ฑ:

    • ์ปค์Šคํ…€ ์œ ์ € ๋ชจ๋ธ์„ ์ •์˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์•ฑ์ž…๋‹ˆ๋‹ค.
    • ์‚ฌ์šฉ์ž ์ธ์ฆ, ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
    • ์‚ฌ์šฉ์ž ์ •๋ณด ๊ด€๋ จ API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  2. utils ์•ฑ:

    • ์—ฌ๋Ÿฌ ์•ฑ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ชจ๋“ˆ์„ ๋ชจ์•„๋‘” ์•ฑ์ž…๋‹ˆ๋‹ค.
    • ํƒœ๊ทธ, ์ƒํƒœ ๋“ฑ์˜ ์ƒ์ˆ˜ ๊ฐ’์„ ์ •์˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฏน์Šค์ธ(Mixin) ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.
  3. media ์•ฑ:

    • AI ๋ชจ๋ธ์˜ ์ถœ๋ ฅ๊ฐ’(์ด๋ฏธ์ง€)์„ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์•ฑ์ž…๋‹ˆ๋‹ค.
    • ๋ถ„์„๋œ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ  ์„œ๋น™ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ, ๋‹ค์šด๋กœ๋“œ ๋“ฑ์˜ API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  4. alarm ์•ฑ:

    • ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์•ฑ์ž…๋‹ˆ๋‹ค.
    • ์ด์ƒ ํ–‰๋™ ๊ฐ์ง€ ์‹œ ์•Œ๋žŒ์„ ๋ฐœ์†กํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
    • ์•Œ๋žŒ ์„ค์ •, ์•Œ๋žŒ ๋กœ๊ทธ ๊ด€๋ฆฌ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  5. notice ์•ฑ:

    • ๊ณต์ง€์‚ฌํ•ญ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋Š” ์•ฑ์ž…๋‹ˆ๋‹ค.
    • ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ณต์ง€์‚ฌํ•ญ์„ ์ „๋‹ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ๊ณต์ง€์‚ฌํ•ญ ๋ชฉ๋ก, ์ƒ์„ธ ๋ณด๊ธฐ, ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ ๋“ฑ์˜ API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  6. ai ์•ฑ:

    • AI ๋ชจ๋ธ์„ ํ™œ์šฉํ•˜์—ฌ ์˜์ƒ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์•ฑ์ž…๋‹ˆ๋‹ค.
    • CCTV ์˜์ƒ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ถ„์„ํ•˜๊ณ  ์ด์ƒ ํ–‰๋™์„ ๊ฐ์ง€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
    • AI ๋ชจ๋ธ ์ถ”๋ก , ๊ฒฐ๊ณผ ์ €์žฅ, ์•Œ๋žŒ ์ƒ์„ฑ ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  7. chat ์•ฑ:

    • ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์•ฑ์ž…๋‹ˆ๋‹ค.
    • ์ฑ„ํŒ…๋ฐฉ ์ƒ์„ฑ, ๋ฉ”์‹œ์ง€ ์ „์†ก, ์ฑ„ํŒ…๋ฐฉ ์ฐธ์—ฌ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
    • WebSocket์„ ํ™œ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฑ„ํŒ… ๊ด€๋ จ API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

fixtures ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•œ JSON ํŒŒ์ผ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

Safe Eye ํ”„๋กœ์ ํŠธ ERD

1. ๋ชจ๋ธ ์„ค๋ช…

1.1 utils ์•ฑ

1.1.1 Tag ๋ชจ๋ธ

  • id: AutoField, ํƒœ๊ทธ์˜ ๊ณ ์œ  ์‹๋ณ„์ž
  • tag_type: CharField, ํƒœ๊ทธ์˜ ์œ ํ˜•
  • tag_content: CharField, ํƒœ๊ทธ์˜ ๋‚ด์šฉ
  • content_type: ForeignKey, ์—ฐ๊ฒฐ๋œ ๋ชจ๋ธ์˜ ContentType
  • object_id: PositiveIntegerField, ์—ฐ๊ฒฐ๋œ ๋ชจ๋ธ์˜ ๊ฐ์ฒด id
  • content_object: GenericForeignKey, ์—ฐ๊ฒฐ๋œ ๋ชจ๋ธ์˜ ๊ฐ์ฒด

1.1.2 Status ๋ชจ๋ธ

  • available: BooleanField, ์ƒํƒœ์˜ ์œ ํšจ์„ฑ ์—ฌ๋ถ€
  • content_type: ForeignKey, ์—ฐ๊ฒฐ๋œ ๋ชจ๋ธ์˜ ContentType
  • object_id: PositiveIntegerField, ์—ฐ๊ฒฐ๋œ ๋ชจ๋ธ์˜ ๊ฐ์ฒด id
  • content_object: GenericForeignKey, ์—ฐ๊ฒฐ๋œ ๋ชจ๋ธ์˜ ๊ฐ์ฒด
  • created_at: DateTimeField, ์ƒํƒœ ์ƒ์„ฑ ์‹œ๊ฐ„
  • updated_at: DateTimeField, ์ƒํƒœ ์—…๋ฐ์ดํŠธ ์‹œ๊ฐ„

1.1.3 TagMixin ๋ชจ๋ธ

  • tags: GenericRelation, Tag ๋ชจ๋ธ๊ณผ์˜ ๊ด€๊ณ„

1.1.4 StatusMixin ๋ชจ๋ธ

  • status: GenericRelation, Status ๋ชจ๋ธ๊ณผ์˜ ๊ด€๊ณ„

1.2 accounts ์•ฑ

1.2.1 CustomUser ๋ชจ๋ธ

  • AbstractUser ๋ชจ๋ธ์„ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„
  • profile_picture: ImageField, ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์‚ฌ์ง„
  • profile_message: TextField, ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ๋ฉ”์‹œ์ง€
  • profile_status: GenericRelation, StatusMixin์„ ํ†ตํ•ด Status ๋ชจ๋ธ๊ณผ ๊ด€๊ณ„ (์ถ”๊ฐ€)

1.3 notice ์•ฑ

1.3.1 Notice ๋ชจ๋ธ

  • id: AutoField, ๊ณต์ง€์‚ฌํ•ญ์˜ ๊ณ ์œ  ์‹๋ณ„์ž
  • title: CharField, ๊ณต์ง€์‚ฌํ•ญ ์ œ๋ชฉ
  • content: TextField, ๊ณต์ง€์‚ฌํ•ญ ๋‚ด์šฉ
  • created_at: DateTimeField, ๊ณต์ง€์‚ฌํ•ญ ์ƒ์„ฑ ์‹œ๊ฐ„
  • updated_at: DateTimeField, ๊ณต์ง€์‚ฌํ•ญ ์—…๋ฐ์ดํŠธ ์‹œ๊ฐ„

1.4 alarm ์•ฑ (์ถ”๊ฐ€ ํ•„์š”)

1.4.1 Alarm ๋ชจ๋ธ

  • id: AutoField, ์•Œ๋žŒ์˜ ๊ณ ์œ  ์‹๋ณ„์ž
  • alarm_type: CharField, ์•Œ๋žŒ ์œ ํ˜• (์ด์ƒ ํ–‰๋™, ์œ„ํ—˜ ์ƒํ™ฉ ๋“ฑ)
  • alarm_content: TextField, ์•Œ๋žŒ ๋‚ด์šฉ
  • created_at: DateTimeField, ์•Œ๋žŒ ์ƒ์„ฑ ์‹œ๊ฐ„
  • updated_at: DateTimeField, ์•Œ๋žŒ ์—…๋ฐ์ดํŠธ ์‹œ๊ฐ„
  • user: ForeignKey, ์•Œ๋žŒ๊ณผ ์—ฐ๊ฒฐ๋œ ์‚ฌ์šฉ์ž (CustomUser ๋ชจ๋ธ๊ณผ ์—ฐ๊ฒฐ)

1.5 ai ์•ฑ (์ถ”๊ฐ€ ํ•„์š”)

1.5.1 AnalysisResult ๋ชจ๋ธ

  • id: AutoField, ๋ถ„์„ ๊ฒฐ๊ณผ์˜ ๊ณ ์œ  ์‹๋ณ„์ž
  • video: FileField, ๋ถ„์„ ๋Œ€์ƒ ๋น„๋””์˜ค ํŒŒ์ผ
  • result_image: ImageField, ๋ถ„์„ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€
  • analysis_type: CharField, ๋ถ„์„ ์œ ํ˜• (์ด์ƒ ํ–‰๋™, ๊ฐ์ฒด ์ธ์‹ ๋“ฑ)
  • created_at: DateTimeField, ๋ถ„์„ ๊ฒฐ๊ณผ ์ƒ์„ฑ ์‹œ๊ฐ„
  • updated_at: DateTimeField, ๋ถ„์„ ๊ฒฐ๊ณผ ์—…๋ฐ์ดํŠธ ์‹œ๊ฐ„
  • user: ForeignKey, ๋ถ„์„ ๊ฒฐ๊ณผ์™€ ์—ฐ๊ฒฐ๋œ ์‚ฌ์šฉ์ž (CustomUser ๋ชจ๋ธ๊ณผ ์—ฐ๊ฒฐ)

1.6 chat ์•ฑ

1.6.1 ChatRoom ๋ชจ๋ธ

  • ์ฑ„ํŒ…๋ฐฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ชจ๋ธ
  • name: CharField, ์ฑ„ํŒ…๋ฐฉ ์ด๋ฆ„
  • users: ManyToManyField, ์ฑ„ํŒ…๋ฐฉ์— ์ฐธ์—ฌํ•˜๋Š” ์‚ฌ์šฉ์ž๋“ค๊ณผ์˜ ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„
  • created_at: DateTimeField, ์ฑ„ํŒ…๋ฐฉ ์ƒ์„ฑ ์‹œ๊ฐ„

1.6.2 Message ๋ชจ๋ธ

  • ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ชจ๋ธ
  • room: ForeignKey, ๋ฉ”์‹œ์ง€๊ฐ€ ์†ํ•œ ์ฑ„ํŒ…๋ฐฉ๊ณผ์˜ ์™ธ๋ž˜ํ‚ค ๊ด€๊ณ„
  • sender: ForeignKey, ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ ์‚ฌ์šฉ์ž์™€์˜ ์™ธ๋ž˜ํ‚ค ๊ด€๊ณ„
  • content: TextField, ๋ฉ”์‹œ์ง€ ๋‚ด์šฉ
  • timestamp: DateTimeField, ๋ฉ”์‹œ์ง€ ์ „์†ก ์‹œ๊ฐ„

1.6.3 ChatConsumer ๋ชจ๋ธ

  • WebSocket์„ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ์ปจ์Šˆ๋จธ
  • WebSocket ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ, ํ•ด์ œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ
  • ์ฑ„ํŒ…๋ฐฉ ์ž…์žฅ, ํ‡ด์žฅ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ
  • ๋ฉ”์‹œ์ง€ ์ˆ˜์‹  ๋ฐ ์ „์†ก ๊ธฐ๋Šฅ ๊ตฌํ˜„

2. ERD

ERD๋Š” ํ˜„์žฌ ๊ณ ๋ฏผ ์ค‘์ž…๋‹ˆ๋‹ค.

classDiagram
    class Tag {
        +AutoField id
        +CharField tag_type
        +CharField tag_content
        +ForeignKey content_type
        +PositiveIntegerField object_id
        +GenericForeignKey content_object
    }

    class Status {
        +BooleanField available
        +ForeignKey content_type
        +PositiveIntegerField object_id
        +GenericForeignKey content_object
        +DateTimeField created_at
        +DateTimeField updated_at
    }

    class TagMixin {
        +GenericRelation tags
    }

    class StatusMixin {
        +GenericRelation status
    }

    class CustomUser {
        +ImageField profile_picture
        +CharField profile_status
        +TextField profile_message
        +GenericRelation status
    }

    class Notice {
        +AutoField id
        +CharField title
        +TextField content
        +DateTimeField created_at
        +DateTimeField updated_at
    }

    class Alarm {
        +AutoField id
        +CharField alarm_type
        +TextField alarm_content
        +DateTimeField created_at
        +DateTimeField updated_at
        +ForeignKey user
    }

    class AnalysisResult {
        +AutoField id
        +FileField video
        +ImageField result_image
        +CharField analysis_type
        +DateTimeField created_at
        +DateTimeField updated_at
        +ForeignKey user
    }

    CustomUser --|> AbstractUser
    CustomUser --|> StatusMixin
    CustomUser "1" --> "*" Alarm
    CustomUser "1" --> "*" AnalysisResult
Loading
  • Alarm ๋ชจ๋ธ์€ ์•Œ๋žŒ์˜ ์œ ํ˜•, ๋‚ด์šฉ, ์ƒ์„ฑ/์—…๋ฐ์ดํŠธ ์‹œ๊ฐ„ ๋“ฑ์˜ ํ•„๋“œ๋ฅผ ๊ฐ€์ง€๋ฉฐ, CustomUser ๋ชจ๋ธ๊ณผ ์™ธ๋ž˜ ํ‚ค๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • AnalysisResult ๋ชจ๋ธ์€ ๋ถ„์„ ๋Œ€์ƒ ๋น„๋””์˜ค ํŒŒ์ผ, ๋ถ„์„ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€, ๋ถ„์„ ์œ ํ˜•, ์ƒ์„ฑ/์—…๋ฐ์ดํŠธ ์‹œ๊ฐ„ ๋“ฑ์˜ ํ•„๋“œ๋ฅผ ๊ฐ€์ง€๋ฉฐ, CustomUser ๋ชจ๋ธ๊ณผ ์™ธ๋ž˜ ํ‚ค๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • tag์™€ status๋Š” user๋‚˜ ์ด๋ฒคํŠธ์— ์“ฐ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Notice ์•ฑ

notice ์•ฑ์€ ์ด ํ”„๋กœ์ ํŠธ์˜ ์˜ˆ์‹œ ์•ฑ์ž…๋‹ˆ๋‹ค. ์ด ์•ฑ์€ ๊ณต์ง€์‚ฌํ•ญ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ๋ชจ๋ธ๊ณผ ๋ทฐ, ์‹œ๋ฆฌ์–ผ๋ผ์ด์ € ๋“ฑ์ด ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์•ฑ์˜ ๋ชจ๋ธ๊ณผ API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๋‹ค๋ฅธ ์•ฑ์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‘ธํ„ฐ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 96.2%
  • Shell 3.6%
  • Dockerfile 0.2%