Skip to content

stpcoder/awesome-ship-navigator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

41 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿšข Awesome Ship Navigator

์‹ค์‹œ๊ฐ„ ์„ ๋ฐ• ๊ด€๋ฆฌ ๋ฐ ํ•ญํ•ด ์ตœ์ ํ™” ์‹œ์Šคํ…œ

๐Ÿ“‹ ๋ฐœํ‘œ ์ž๋ฃŒ

๐Ÿ“„ ํ”„๋กœ์ ํŠธ ๋ฐœํ‘œ์„œ

์„ ๋ฐ•_ํ•ด์ปคํ†ค.pdf - ํ”„๋กœ์ ํŠธ ์ƒ์„ธ ๋ฐœํ‘œ ์ž๋ฃŒ ๋‹ค์šด๋กœ๋“œ

๐ŸŽฅ ๋ฐ๋ชจ ์˜์ƒ

๐ŸŽฌ ํ”„๋กœ์ ํŠธ ๋ฐ๋ชจ ์˜์ƒ

Ship Navigator Demo

โ–ถ๏ธ ์˜์ƒ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

์‹ค์‹œ๊ฐ„ ์„ ๋ฐ• ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ์†Œ๊ฐœํ•˜๋Š” ๋ฐ๋ชจ ์˜์ƒ์ž…๋‹ˆ๋‹ค.


๐Ÿ“‹ ๋ชฉ์ฐจ


๐Ÿ“ธ ์Šคํฌ๋ฆฐ์ƒท

๐Ÿ’ป ๋ฐ์Šคํฌํ†ฑ ํ™”๋ฉด

๋ฉ”์ธ ๋Œ€์‹œ๋ณด๋“œ

๋Œ€์‹œ๋ณด๋“œ ๋ฉ”์ธ ํ™”๋ฉด ์‹ค์‹œ๊ฐ„ ์„ ๋ฐ• ์œ„์น˜ ์ถ”์  ๋ฐ ์ง€๋„ ๋ชจ๋‹ˆํ„ฐ๋ง

์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹คํ–‰

์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ™”๋ฉด ์„ ๋ฐ• ๊ฒฝ๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฐ ์‹œ๊ฐ„ ์ œ์–ด

AI ์ฑ—๋ด‡

AI ์ฑ—๋ด‡ ํ™”๋ฉด ์Œ์„ฑ ์ธ์‹ ๊ธฐ๋ฐ˜ AI ์ฑ—๋ด‡ ์ธํ„ฐํŽ˜์ด์Šค

๊ฒฝ๋กœ ๊ณ„ํš

๊ฒฝ๋กœ ๊ณ„ํš ํ™”๋ฉด ์ถฉ๋Œ ํšŒํ”ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ฐ˜ ๊ฒฝ๋กœ ์ตœ์ ํ™”

์„ผ์„œ ๋ฐ์ดํ„ฐ

์„ผ์„œ ๋ฐ์ดํ„ฐ ํ™”๋ฉด CCTV ๋ฐ LiDAR ์„ผ์„œ ๋ฐ์ดํ„ฐ ๋ชจ๋‹ˆํ„ฐ๋ง


๐Ÿ“ฑ ๋ชจ๋ฐ”์ผ ํ™”๋ฉด

๋ชจ๋ฐ”์ผ ๋Œ€์‹œ๋ณด๋“œ

๋ชจ๋ฐ”์ผ ๋ฉ”์ธ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ - ๋ชจ๋ฐ”์ผ ์ตœ์ ํ™” ๋Œ€์‹œ๋ณด๋“œ

๋ชจ๋ฐ”์ผ ์ฑ—๋ด‡

๋ชจ๋ฐ”์ผ ์ฑ—๋ด‡ ๋ชจ๋ฐ”์ผ ์Œ์„ฑ ์ธ์‹ ์ฑ—๋ด‡

๋ชจ๋ฐ”์ผ ์ง€๋„

๋ชจ๋ฐ”์ผ ์ง€๋„ ํ„ฐ์น˜ ๊ธฐ๋ฐ˜ ์ง€๋„ ์ธํ„ฐํŽ˜์ด์Šค


๐Ÿš€ ๋น ๋ฅธ ์‹คํ–‰ ๊ฐ€์ด๋“œ

1๏ธโƒฃ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ • (ํ•„์ˆ˜)

# ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
cd awesome-ship-naivgator

# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ดˆ๊ธฐํ™” (์ฒ˜์Œ ํ•œ ๋ฒˆ๋งŒ)
./setup_database.sh
# ๋˜๋Š” ์ˆ˜๋™์œผ๋กœ:
# sqlite3 ship_routes.db < ship_routes_init.sql

โœ… ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ์ผ: ship_routes.db (191์ค„์˜ SQL ๋คํ”„์—์„œ ์ƒ์„ฑ)

โš ๏ธ ์ค‘์š”:

  • ์ ˆ๋Œ€ init_all_data.py๋ฅผ ์‹คํ–‰ํ•˜์ง€ ๋งˆ์„ธ์š”!
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ด๋ฏธ ship_routes.db ํŒŒ์ผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค
  • Git์—์„œ ํด๋ก  ํ›„ ๋ฐ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค

2๏ธโƒฃ Backend ์‹คํ–‰ (Python + FastAPI)

# Python ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ ๋ฐ ํ™œ์„ฑํ™”
python3 -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# ์˜์กด์„ฑ ์„ค์น˜
pip install -r requirements.txt

# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
cp .env.example .env
# .env ํŒŒ์ผ์—์„œ OPENAI_API_KEY ๋“ฑ ํ•„์ˆ˜ ํ‚ค ์„ค์ •

# ์„œ๋ฒ„ ์‹คํ–‰
python app.py

โœ… Backend: http://localhost:8000 ๐Ÿ“š API Docs: http://localhost:8000/docs

3๏ธโƒฃ Frontend ์‹คํ–‰ (React)

# Frontend ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ (์ƒˆ ํ„ฐ๋ฏธ๋„)
cd awesome-ship-naivgator/frontend

# ์˜์กด์„ฑ ์„ค์น˜
npm install

# ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
npm start

โœ… Frontend: http://localhost:3000


โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

1. ๋Œ€์‹œ๋ณด๋“œ (Dashboard)

๐Ÿ—บ๏ธ ์‹ค์‹œ๊ฐ„ ์ง€๋„ ๋ชจ๋‹ˆํ„ฐ๋ง

  • ์„ ๋ฐ• ์œ„์น˜ ์ถ”์ : ์‹ค์‹œ๊ฐ„ ์„ ๋ฐ• ์œ„์น˜ ๋ฐ ์ด๋™ ๊ฒฝ๋กœ ์‹œ๊ฐํ™”
  • Live/Demo ๋ชจ๋“œ:
    • Live: ์‹ค์ œ EUM API ๋ฐ์ดํ„ฐ ์—ฐ๋™
    • Demo: ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฐ์ดํ„ฐ๋กœ ํ…Œ์ŠคํŠธ
  • ์ง€๋„ ์ปจํŠธ๋กค:
    • ์คŒ ์ธ/์•„์›ƒ
    • ์„ ๋ฐ• ์„ ํƒ ๋ฐ ์ •๋ณด ํ™•์ธ
    • ๊ฒฝ๋กœ ํ‘œ์‹œ/์ˆจ๊น€

๐Ÿ“Š ์„ผ์„œ ๋ฐ์ดํ„ฐ ๋ชจ๋‹ˆํ„ฐ๋ง

  • CCTV ์˜์ƒ:

    • 8๊ฐœ CCTV ์žฅ์น˜ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ
    • ์ง€๋„์ƒ CCTV ์œ„์น˜ ๋งˆ์ปค ํ‘œ์‹œ
    • ์„ ํƒํ•œ CCTV ์˜์ƒ ํŒ์—… ์žฌ์ƒ
  • LiDAR ํ†ต๊ณ„:

    • 5๊ฐœ LiDAR ์„ผ์„œ ๋ฐ์ดํ„ฐ
    • ์„ ๋ฐ• ๋ฐ€๋„ ๋ฐ ์žฅ์• ๋ฌผ ๊ฐ์ง€
    • ํžˆํŠธ๋งต ์‹œ๊ฐํ™”

๐Ÿšข ์„ ๋ฐ• ์ •๋ณด ํŒจ๋„

  • ๊ธฐ๋ณธ ์ •๋ณด: ์„ ๋ฐ•๋ช…, ์œ ํ˜•, ์†๋„, ๋ฐฉํ–ฅ
  • ํ˜„์žฌ ์œ„์น˜: ์œ„๋„/๊ฒฝ๋„ ์ขŒํ‘œ
  • ์ƒํƒœ ์ •๋ณด: ์šดํ•ญ ์ƒํƒœ, ๋ชฉ์ ์ง€
  • ์„ผ์„œ ์—ฐ๋™: ์„ ๋ฐ•๋ณ„ ์„ผ์„œ ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ

๐Ÿ“ ๊ฒฝ๋กœ ๊ณ„ํš (Route Planning)

  • ์‹œ์ž‘/๋„์ฐฉ ์ง€์  ์„ค์ •: ์ง€๋„ ํด๋ฆญ์œผ๋กœ ์œ„์น˜ ์ง€์ •
  • ์ตœ์  ๊ฒฝ๋กœ ๊ณ„์‚ฐ: A* ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ฐ˜ ๊ฒฝ๋กœ ์ตœ์ ํ™”
  • ์ถฉ๋Œ ํšŒํ”ผ:
    • ์žฅ์• ๋ฌผ ์ž๋™ ํšŒํ”ผ
    • ๋‹ค๋ฅธ ์„ ๋ฐ•๊ณผ์˜ ์ถฉ๋Œ ๋ฐฉ์ง€
    • ์•ˆ์ „ ๊ฑฐ๋ฆฌ 0.5ํ•ด๋ฆฌ ์œ ์ง€
  • ๊ฒฝ๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜:
    • ์‹œ๊ฐ„๋ณ„ ์œ„์น˜ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
    • ์˜ˆ์ƒ ๋„์ฐฉ ์‹œ๊ฐ„ ๊ณ„์‚ฐ

๐Ÿ• ์‹œ๊ฐ„ ์ œ์–ด

  • ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์žฌ์ƒ/์ผ์‹œ์ •์ง€
  • ์†๋„ ์กฐ์ ˆ: 1x, 2x, 4x ๋ฐฐ์†
  • ํŠน์ • ์‹œ๊ฐ„๋Œ€ ์ด๋™: ํƒ€์ž„๋ผ์ธ ์Šฌ๋ผ์ด๋”

๐Ÿ†˜ ๊ธด๊ธ‰ ์ƒํ™ฉ ๊ด€๋ฆฌ

  • SOS ์•Œ๋ฆผ: ์‹ค์‹œ๊ฐ„ ๊ธด๊ธ‰ ์‹ ํ˜ธ ์ˆ˜์‹ 
  • ๊ธด๊ธ‰ ๋ฉ”์‹œ์ง€: ์„ ๋ฐ•๋ณ„ ๊ธด๊ธ‰ ์ƒํ™ฉ ์ „ํŒŒ
  • ์œ„์น˜ ๊ธฐ๋ฐ˜ ์•Œ๋ฆผ: ์ง€๋„์ƒ SOS ๋งˆ์ปค ํ‘œ์‹œ

๐Ÿ’ฌ ๋ฉ”์‹œ์ง€ ์„ผํ„ฐ

  • ์„ ๋ฐ•๊ฐ„ ํ†ต์‹ : ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€ ์†ก์ˆ˜์‹ 
  • ์ฝ์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€ ์นด์šดํŠธ
  • ์„ ๋ฐ•๋ณ„ ๋ฉ”์‹œ์ง€ ํ•„ํ„ฐ๋ง
  • ์•Œ๋ฆผ ์‹œ์Šคํ…œ: ์ƒˆ ๋ฉ”์‹œ์ง€ ํŒ์—… ์•Œ๋ฆผ

๐Ÿ“ˆ ๋ฐ€๋„ ํžˆํŠธ๋งต

  • ์„ ๋ฐ• ๋ฐ€๋„ ์‹œ๊ฐํ™”: ๊ตฌ์—ญ๋ณ„ ์„ ๋ฐ• ์ง‘์ค‘๋„ ํ‘œ์‹œ
  • ๊ทธ๋ž˜๋””์–ธํŠธ ์ปฌ๋Ÿฌ๋งต:
    • ๋‚ฎ์€ ๋ฐ€๋„ (ํŒŒ๋ž‘) โ†’ ๋†’์€ ๋ฐ€๋„ (๋นจ๊ฐ•)
  • ์ž…์ถœํ•ญ ํ†ต๊ณ„: ๊ตฌ์—ญ๋ณ„ ์„ ๋ฐ• ํ†ตํ–‰๋Ÿ‰ ๋ถ„์„

๐Ÿ“ ๋ณด๊ณ ์„œ ์ƒ์„ฑ

  • ํ•ญํ•ด ๋ณด๊ณ ์„œ:
    • ์„ ๋ฐ•๋ณ„ ์šดํ•ญ ๊ธฐ๋ก
    • ๊ฒฝ๋กœ ์ด๋ ฅ
    • ์ด๋ฒคํŠธ ๋กœ๊ทธ
  • PDF ๋‚ด๋ณด๋‚ด๊ธฐ: ๋ณด๊ณ ์„œ ๋‹ค์šด๋กœ๋“œ
  • ํ†ต๊ณ„ ๋ถ„์„:
    • ํ‰๊ท  ์†๋„
    • ์ด ์šดํ•ญ ๊ฑฐ๋ฆฌ
    • ์ •๋ฐ• ์‹œ๊ฐ„

2. AI ์ฑ—๋ด‡ (Assistant)

๐ŸŽค ์Œ์„ฑ ์ธ์‹ (Voice Recognition)

  • ํ•œ๊ตญ์–ด ์Œ์„ฑ ์ธ์‹: Web Speech API ํ™œ์šฉ
  • ์‹ค์‹œ๊ฐ„ ํ…์ŠคํŠธ ๋ณ€ํ™˜: ์Œ์„ฑ โ†’ ํ…์ŠคํŠธ ์ž๋™ ๋ณ€ํ™˜
  • ์Œ์„ฑ ๋ ˆ๋ฒจ ํ‘œ์‹œ: ๋งˆ์ดํฌ ์ž…๋ ฅ ์‹œ๊ฐํ™”
  • ์ž๋™ ์นจ๋ฌต ๊ฐ์ง€: ๋ง์ด ๋๋‚˜๋ฉด ์ž๋™ ์ข…๋ฃŒ

๐Ÿค– AI ๋Œ€ํ™” ๊ธฐ๋Šฅ

  • OpenAI GPT ์—ฐ๋™: ์ž์—ฐ์–ด ์ดํ•ด ๋ฐ ์‘๋‹ต
  • ์„ ๋ฐ•๋ณ„ ๋งž์ถค ๋Œ€ํ™”: ์„ ํƒํ•œ ์„ ๋ฐ• ์ปจํ…์ŠคํŠธ ๋ฐ˜์˜
  • ์‹ค์‹œ๊ฐ„ ์‘๋‹ต: ๋น ๋ฅธ ๋‹ต๋ณ€ ์ƒ์„ฑ

๐Ÿ› ๏ธ ๊ธฐ๋Šฅ๋ณ„ ๋ชจ๋‹ฌ (Function Modals)

โฐ ์ถœํ•ญ ์‹œ๊ฐ„ ์ถ”์ฒœ
  • ๋‘ ๊ฐ€์ง€ ๋ชจ๋“œ:
    • ์ˆ˜์šฉ O (Flexible): AI๊ฐ€ ์ตœ์  ์‹œ๊ฐ„ ์ถ”์ฒœ
    • ์ˆ˜์šฉ X (Fixed): ์‚ฌ์šฉ์ž ์ง€์ • ์‹œ๊ฐ„ ์‚ฌ์šฉ
  • ์ถฉ๋Œ ํšŒํ”ผ ๊ณ„์‚ฐ: ๋‹ค๋ฅธ ์„ ๋ฐ•๊ณผ์˜ ์ถฉ๋Œ ์‹œ๊ฐ„ ์˜ˆ์ธก
  • ๋น„์šฉ ์ตœ์ ํ™”: ์ง€์—ฐ vs ์šฐํšŒ ๋น„์šฉ ๋น„๊ต
๐Ÿ“‹ ํ•ญํ•ด ๊ณ„ํš ์ „์†ก
  • ๋ชฉ์ ์ง€ ์„ค์ •: ์œ„๋„/๊ฒฝ๋„ ์ž…๋ ฅ
  • ๊ณ„ํš ํ™•์ •: ์„ ๋ฐ•์— ํ•ญํ•ด ๊ณ„ํš ์ „์†ก
  • ์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™”: ๋Œ€์‹œ๋ณด๋“œ์™€ ์—ฐ๋™
๐Ÿ—บ๏ธ ๊ฒฝ๋กœ ํ‘œ์‹œ
  • ํ˜„์žฌ ๊ฒฝ๋กœ ์กฐํšŒ: ์„ ๋ฐ•์˜ ํ˜„์žฌ ํ•ญ๋กœ ํ‘œ์‹œ
  • ์›จ์ดํฌ์ธํŠธ ๋ฆฌ์ŠคํŠธ: ๊ฒฝ์œ ์ง€ ์ขŒํ‘œ ๋ชฉ๋ก
  • ์ง€๋„ ์˜ค๋ฒ„๋ ˆ์ด: ๊ฒฝ๋กœ๋ฅผ ์ง€๋„์— ์˜ค๋ฒ„๋ ˆ์ด
๐ŸŒค๏ธ ๋‚ ์”จ ์ •๋ณด
  • ํ˜„์žฌ ๋‚ ์”จ: ์œ„์น˜๋ณ„ ๋‚ ์”จ ๋ฐ์ดํ„ฐ
  • ์˜ˆ๋ณด ์ •๋ณด: ์‹œ๊ฐ„๋Œ€๋ณ„ ๋‚ ์”จ ์˜ˆ์ธก
  • ํ•ด์ƒ ์ •๋ณด: ํŒŒ๊ณ , ํ’์† ๋“ฑ
๐Ÿ†˜ SOS ์‹ ํ˜ธ ๋ฐœ์†ก
  • ๊ธด๊ธ‰ ์‹ ํ˜ธ ์ „์†ก: ์ฆ‰์‹œ SOS ์ „ํŒŒ
  • ์œ„์น˜ ์ •๋ณด ํฌํ•จ: ํ˜„์žฌ ์œ„์น˜ ์ž๋™ ์ „์†ก
  • ์šฐ์„ ์ˆœ์œ„ ์ฒ˜๋ฆฌ: ๊ธด๊ธ‰ ๋ฉ”์‹œ์ง€ ์ตœ์šฐ์„  ํ‘œ์‹œ
๐ŸŽฃ ์กฐ์—… ๊ตฌ์—ญ ์„ค์ •
  • ์–ด์—… ๊ตฌ์—ญ ์ง€์ •: ์กฐ์—…ํ•  ํ•ด์—ญ ์„ค์ •
  • ๊ธˆ์ง€ ๊ตฌ์—ญ ํ™•์ธ: ์กฐ์—… ๊ธˆ์ง€ ๊ตฌ์—ญ ์ฒดํฌ
  • ๊ตฌ์—ญ ์ €์žฅ: ์„ค์ • ์ €์žฅ ๋ฐ ๊ณต์œ 
โš“ ์ •๋ฐ• ์œ„์น˜ ์„ค์ •
  • ์ •๋ฐ•์ง€ ์ง€์ •: ์„ ๋ฐ• ์ •๋ฐ• ์œ„์น˜ ์„ค์ •
  • ์•ˆ์ „ ๊ฑฐ๋ฆฌ ํ™•์ธ: ๋‹ค๋ฅธ ์„ ๋ฐ•๊ณผ์˜ ๊ฐ„๊ฒฉ ์ฒดํฌ
  • ์ •๋ฐ• ์‹œ๊ฐ„ ์„ค์ •: ์ •๋ฐ• ์‹œ์ž‘/์ข…๋ฃŒ ์‹œ๊ฐ„
๐Ÿ“œ ๊ธฐ๋Šฅ ๋ชฉ๋ก
  • ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด: ์ฑ—๋ด‡ ๊ธฐ๋Šฅ ์ „์ฒด ๋ชฉ๋ก
  • ๋„์›€๋ง: ๊ฐ ๊ธฐ๋Šฅ๋ณ„ ์‚ฌ์šฉ๋ฒ•
  • ์˜ˆ์‹œ ๋Œ€ํ™”: ์ƒ˜ํ”Œ ์Œ์„ฑ ๋ช…๋ น์–ด
๐Ÿ’ฌ ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ 
  • ์ฝ์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€: ์ƒˆ ๋ฉ”์‹œ์ง€ ํ™•์ธ
  • ๋ฉ”์‹œ์ง€ ํžˆ์Šคํ† ๋ฆฌ: ๊ณผ๊ฑฐ ๋Œ€ํ™” ๋‚ด์—ญ
  • ํ•„ํ„ฐ๋ง: ์„ ๋ฐ•๋ณ„, ๋‚ ์งœ๋ณ„ ํ•„ํ„ฐ
๐Ÿ“ค ๋ฉ”์‹œ์ง€ ์ „์†ก
  • ์„ ๋ฐ• ์„ ํƒ: ์ˆ˜์‹  ์„ ๋ฐ• ์ง€์ •
  • ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ: ํ…์ŠคํŠธ ๋ฉ”์‹œ์ง€ ์ž…๋ ฅ
  • ์ฆ‰์‹œ ์ „์†ก: ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ

๐Ÿšจ ์ถฉ๋Œ ๊ฒฝ๊ณ  ์‹œ์Šคํ…œ

  • ์ž๋™ ์ถฉ๋Œ ์˜ˆ์ธก:
    • ์•ˆ์ „ ๊ฑฐ๋ฆฌ ์นจ๋ฒ” ๊ฐ์ง€ (0.5ํ•ด๋ฆฌ)
    • ์ถฉ๋Œ ์˜ˆ์ƒ ์‹œ๊ฐ„ ๊ณ„์‚ฐ
    • ์œ„ํ—˜๋„ ํ‰๊ฐ€
  • ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ:
    • ํŒ์—… ๊ฒฝ๊ณ ์ฐฝ
    • ์œ„ํ—˜ ์„ ๋ฐ• ์ •๋ณด ํ‘œ์‹œ
    • ์ถ”์ฒœ ํšŒํ”ผ ๋ฐฉ์•ˆ
  • ์ค‘๋ณต ๊ฒฝ๊ณ  ๋ฐฉ์ง€:
    • ์ด๋ฏธ ๊ฒฝ๊ณ ํ•œ ์„ ๋ฐ• ์ถ”์ 
    • ์Šค๋งˆํŠธ ์•Œ๋ฆผ ์ฃผ๊ธฐ ์กฐ์ ˆ

๐ŸŽฏ ์Œ์„ฑ ๋ช…๋ น ์˜ˆ์‹œ

"์„ ๋ฐ• 001์˜ ์ถœํ•ญ ์‹œ๊ฐ„์„ ์ถ”์ฒœํ•ด์ค˜"
"ํ˜„์žฌ ๊ฒฝ๋กœ๋ฅผ ๋ณด์—ฌ์ค˜"
"๋‚ ์”จ ์ •๋ณด ์•Œ๋ ค์ค˜"
"SOS ์‹ ํ˜ธ ๋ณด๋‚ด์ค˜"
"๋ฉ”์‹œ์ง€ ํ™•์ธํ•ด์ค˜"
"EUM003 ์„ ๋ฐ•์—๊ฒŒ ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด์ค˜"

๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

Backend

  • Framework: FastAPI + Uvicorn
  • Database: SQLite (SQLAlchemy ORM)
  • AI/ML: OpenAI GPT-4 API
  • Navigation: A* Pathfinding, Pyvisgraph
  • Geospatial: Shapely, Geopy
  • Data Processing: NumPy, Matplotlib

Frontend

  • Framework: React 18
  • Mapping: React-Leaflet (OpenStreetMap)
  • UI Components: Custom CSS
  • HTTP Client: Axios
  • Routing: React Router v6
  • Voice: Web Speech API

Infrastructure

  • API Communication: REST API
  • Real-time Updates: Polling (5์ดˆ ๊ฐ„๊ฒฉ)
  • CORS: Flask-CORS
  • Environment: Python-dotenv

๐Ÿ“š API ๋ฌธ์„œ

์ฃผ์š” API ์—”๋“œํฌ์ธํŠธ

์„ ๋ฐ• ๊ด€๋ฆฌ

GET  /api/ships              # ์ „์ฒด ์„ ๋ฐ• ๋ชฉ๋ก
GET  /api/ships/{id}          # ํŠน์ • ์„ ๋ฐ• ์ •๋ณด
POST /api/ships               # ์„ ๋ฐ• ๋“ฑ๋ก
PUT  /api/ships/{id}          # ์„ ๋ฐ• ์ •๋ณด ์ˆ˜์ •

EUM API ์—ฐ๋™

GET  /api/eum/ships           # EUM ์„ ๋ฐ• ๋ฐ์ดํ„ฐ
GET  /api/eum/ships/realtime/{mode}  # ์‹ค์‹œ๊ฐ„ ์œ„์น˜ (live/demo)
GET  /api/eum/cctv            # CCTV ๋ชฉ๋ก
GET  /api/eum/lidar           # LiDAR ๋ชฉ๋ก

๊ฒฝ๋กœ ๊ณ„ํš

POST /api/route/plan          # ๊ฒฝ๋กœ ์ƒ์„ฑ
GET  /api/route/{ship_id}     # ์„ ๋ฐ• ๊ฒฝ๋กœ ์กฐํšŒ
POST /api/route/optimize      # ์ถœํ•ญ ์‹œ๊ฐ„ ์ตœ์ ํ™”

์‹œ๋ฎฌ๋ ˆ์ด์…˜

POST /api/simulation/start    # ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹œ์ž‘
POST /api/simulation/stop     # ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์ค‘์ง€
GET  /api/simulation/status   # ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์ƒํƒœ
GET  /api/simulation/ship-route/{ship_id}  # ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ฒฝ๋กœ

๋ฉ”์‹œ์ง€/์•Œ๋ฆผ

GET  /api/messages            # ๋ฉ”์‹œ์ง€ ๋ชฉ๋ก
POST /api/messages            # ๋ฉ”์‹œ์ง€ ์ „์†ก
GET  /api/messages/unread-count  # ์ฝ์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€ ์ˆ˜
GET  /api/sos/active          # ํ™œ์„ฑ SOS ์•Œ๋ฆผ
POST /api/sos                 # SOS ์‹ ํ˜ธ ์ „์†ก

AI ์ฑ—๋ด‡

POST /api/chatbot/process     # ์Œ์„ฑ/ํ…์ŠคํŠธ ์ฒ˜๋ฆฌ
POST /api/chatbot/recommend-departure  # ์ถœํ•ญ ์‹œ๊ฐ„ ์ถ”์ฒœ
POST /api/chatbot/send-plan   # ํ•ญํ•ด ๊ณ„ํš ์ „์†ก

์ „์ฒด API ๋ฌธ์„œ: http://localhost:8000/docs (์„œ๋ฒ„ ์‹คํ–‰ ํ›„)


๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

awesome-ship-navigator/
โ”‚
โ”œโ”€โ”€ app.py                       # FastAPI ๋ฉ”์ธ ์„œ๋ฒ„
โ”œโ”€โ”€ chatbot_service.py           # AI ์ฑ—๋ด‡ ์„œ๋น„์Šค
โ”œโ”€โ”€ core_optimizer_latlng.py     # ๊ฒฝ๋กœ ์ตœ์ ํ™” ์—”์ง„
โ”œโ”€โ”€ database.py                  # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •
โ”œโ”€โ”€ models.py                    # ๋ฐ์ดํ„ฐ ๋ชจ๋ธ
โ”œโ”€โ”€ ship_routes.db              # SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
โ”œโ”€โ”€ requirements.txt            # Python ์˜์กด์„ฑ
โ”œโ”€โ”€ .env                        # ํ™˜๊ฒฝ ๋ณ€์ˆ˜ (API ํ‚ค)
โ”‚
โ”œโ”€โ”€ frontend/
โ”‚   โ”œโ”€โ”€ src/
โ”‚   โ”‚   โ”œโ”€โ”€ components/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ChatBot.js          # AI ์ฑ—๋ด‡ UI
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ MapViewReal.js      # ์‹ค์‹œ๊ฐ„ ์ง€๋„
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ShipInfo.js         # ์„ ๋ฐ• ์ •๋ณด ํŒจ๋„
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ SensorInfo.js       # ์„ผ์„œ ๋ฐ์ดํ„ฐ ํŒจ๋„
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ FunctionModals.js   # ์ฑ—๋ด‡ ๊ธฐ๋Šฅ ๋ชจ๋‹ฌ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Emergency.js        # ๊ธด๊ธ‰์ƒํ™ฉ ๊ด€๋ฆฌ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Messages.js         # ๋ฉ”์‹œ์ง€ ์„ผํ„ฐ
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ ReportGenerator.js  # ๋ณด๊ณ ์„œ ์ƒ์„ฑ
โ”‚   โ”‚   โ”œโ”€โ”€ App.js                  # ๋ฉ”์ธ ์•ฑ
โ”‚   โ”‚   โ”œโ”€โ”€ App.css                 # ์Šคํƒ€์ผ
โ”‚   โ”‚   โ””โ”€โ”€ data/
โ”‚   โ”‚       โ””โ”€โ”€ obstacles_latlng.json  # ์žฅ์• ๋ฌผ ๋ฐ์ดํ„ฐ
โ”‚   โ”œโ”€โ”€ public/
โ”‚   โ””โ”€โ”€ package.json
โ”‚
โ””โ”€โ”€ README.md

๐ŸŽฏ ์ฃผ์š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

1. A* ๊ฒฝ๋กœ ํƒ์ƒ‰

  • Grid-based Pathfinding: ๊ทธ๋ฆฌ๋“œ ๊ธฐ๋ฐ˜ ์ตœ๋‹จ ๊ฒฝ๋กœ ํƒ์ƒ‰
  • Obstacle Avoidance: ์žฅ์• ๋ฌผ ์ž๋™ ํšŒํ”ผ
  • Safety Buffer: 0.5ํ•ด๋ฆฌ ์•ˆ์ „ ๊ฑฐ๋ฆฌ ์œ ์ง€

2. ์ถฉ๋Œ ํšŒํ”ผ ์ตœ์ ํ™”

# ํ†ตํ•ฉ ๋น„์šฉ ํ•จ์ˆ˜
Total Cost (๋ถ„) = ์ถœํ•ญ ์ง€์—ฐ ์‹œ๊ฐ„ + ์šฐํšŒ ์‹œ๊ฐ„
Detour Time = ์ถ”๊ฐ€ ๊ฑฐ๋ฆฌ (ํ•ด๋ฆฌ) / ์†๋„ (๋…ธํŠธ) ร— 60

์ตœ์ ํ™” ์ „๋žต:

  • ์ถœํ•ญ ์‹œ๊ฐ„ ์กฐ์ • (-30 ~ +120๋ถ„)
  • ๋Œ€์ฒด ๊ฒฝ๋กœ ์ƒ์„ฑ (ํšŒํ”ผ ๋ฐ˜๊ฒฝ ์กฐ์ ˆ)
  • ์ตœ์†Œ ๋น„์šฉ ์†”๋ฃจ์…˜ ์„ ํƒ

3. ์‹ค์‹œ๊ฐ„ ์ถฉ๋Œ ์˜ˆ์ธก

  • ์•ˆ์ „ ๊ฑฐ๋ฆฌ: 0.5 nautical miles
  • ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ์œ„์น˜ ์ถ”์ 
  • ๊ตฌ๊ฐ„๋ณ„ ์ถฉ๋Œ ์˜ˆ์ธก

โš ๏ธ ํ˜„์žฌ ์ œํ•œ์‚ฌํ•ญ

  • ์ •์  ์žฅ์• ๋ฌผ๋งŒ ์ง€์› (์„ฌ, ์•”์ดˆ)
  • 2D ํ•ญํ•ด (์ˆ˜์‹ฌ ๊ณ ๋ ค ์•ˆํ•จ)
  • ํ•ญํ•ด ์ค‘ ์ผ์ • ์†๋„ ์œ ์ง€
  • ๊ธฐ์ƒ/ํ•ด๋ฅ˜ ์˜ํ–ฅ ๋ฏธ๋ฐ˜์˜

๐Ÿšง ๋กœ๋“œ๋งต

  • ๋™์  ์žฅ์• ๋ฌผ ์ง€์› (์ด๋™ ์„ ๋ฐ•)
  • ์‹ค์‹œ๊ฐ„ ๊ฒฝ๋กœ ์žฌ๊ณ„ํš
  • ๊ธฐ์ƒ/ํ•ด๋ฅ˜ ๋ฐ์ดํ„ฐ ํ†ตํ•ฉ
  • AIS ๋ฐ์ดํ„ฐ ์—ฐ๋™
  • ๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ
  • WebSocket ์‹ค์‹œ๊ฐ„ ํ†ต์‹ 

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ (Contributing)

Issues์™€ Pull Requests๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

๐Ÿ“„ ๋ผ์ด์„ ์Šค (License)

MIT License


๐Ÿ“ž ๋ฌธ์˜ (Contact)

ํ”„๋กœ์ ํŠธ ๊ด€๋ จ ๋ฌธ์˜๋Š” Issues๋ฅผ ํ†ตํ•ด ๋‚จ๊ฒจ์ฃผ์„ธ์š”.


๐Ÿ—„๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ

์‹œ์Šคํ…œ์€ SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(ship_routes.db)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋‹ค์Œ ํ…Œ์ด๋ธ”๋“ค๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

๐Ÿ“Š ์ฃผ์š” ํ…Œ์ด๋ธ”

1. ships - ์„ ๋ฐ• ์ •๋ณด

CREATE TABLE ships (
    id INTEGER PRIMARY KEY,
    ship_id VARCHAR UNIQUE,          -- ์„ ๋ฐ• ID (์˜ˆ: EUM001)
    name VARCHAR,                     -- ์„ ๋ฐ•๋ช… (์˜ˆ: ํ•ด์„ฑํ˜ธ)
    type VARCHAR,                     -- ์„ ๋ฐ• ์œ ํ˜• (์–ด์„ , ํ™”๋ฌผ์„  ๋“ฑ)
    pol VARCHAR,                      -- ์ถœ๋ฐœํ•ญ
    pol_addr VARCHAR,                 -- ์ถœ๋ฐœํ•ญ ์ฃผ์†Œ
    length FLOAT,                     -- ์„ ๋ฐ• ๊ธธ์ด (m)
    breath FLOAT,                     -- ์„ ๋ฐ• ๋„ˆ๋น„ (m)
    depth FLOAT,                      -- ์„ ๋ฐ• ๊นŠ์ด (m)
    gt FLOAT,                         -- ์ดํ†ค์ˆ˜
    latitude FLOAT,                   -- ํ˜„์žฌ ์œ„๋„
    longitude FLOAT,                  -- ํ˜„์žฌ ๊ฒฝ๋„
    speed FLOAT,                      -- ์†๋„ (๋…ธํŠธ)
    course FLOAT,                     -- ๋ฐฉํ–ฅ (๋„)
    fishing_area_lat FLOAT,           -- ์กฐ์—… ๊ตฌ์—ญ ์œ„๋„
    fishing_area_lng FLOAT,           -- ์กฐ์—… ๊ตฌ์—ญ ๊ฒฝ๋„
    docking_lat FLOAT,                -- ์ •๋ฐ• ์œ„์น˜ ์œ„๋„
    docking_lng FLOAT,                -- ์ •๋ฐ• ์œ„์น˜ ๊ฒฝ๋„
    created_at DATETIME,
    updated_at DATETIME
);

2. ship_routes_simulation - ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ฒฝ๋กœ

CREATE TABLE ship_routes_simulation (
    id INTEGER PRIMARY KEY,
    ship_id VARCHAR UNIQUE,           -- ์„ ๋ฐ• ID
    ship_name VARCHAR,                -- ์„ ๋ฐ•๋ช…
    departure_time VARCHAR,           -- ์ถœํ•ญ ์‹œ๊ฐ„ (ISO 8601)
    arrival_time VARCHAR,             -- ๋„์ฐฉ ์‹œ๊ฐ„ (ISO 8601)
    path TEXT,                        -- ๊ฒฝ๋กœ ์ขŒํ‘œ (JSON)
    speed_knots FLOAT,                -- ์†๋„ (๋…ธํŠธ)
    direction VARCHAR,                -- ๋ฐฉํ–ฅ
    created_at DATETIME
);

3. cctv_devices - CCTV ์žฅ์น˜

CREATE TABLE cctv_devices (
    id INTEGER PRIMARY KEY,
    name VARCHAR,                     -- CCTV ์ด๋ฆ„
    latitude VARCHAR,                 -- ์œ„๋„
    longitude VARCHAR,                -- ๊ฒฝ๋„
    address VARCHAR,                  -- ์ฃผ์†Œ
    created_at DATETIME
);

4. lidar_devices - LiDAR ์žฅ์น˜

CREATE TABLE lidar_devices (
    id INTEGER PRIMARY KEY,
    name VARCHAR,                     -- LiDAR ์ด๋ฆ„
    latitude VARCHAR,                 -- ์œ„๋„
    longitude VARCHAR,                -- ๊ฒฝ๋„
    address VARCHAR,                  -- ์ฃผ์†Œ
    created_at DATETIME
);

5. messages - ๋ฉ”์‹œ์ง€

CREATE TABLE messages (
    id INTEGER PRIMARY KEY,
    sender_id VARCHAR,                -- ๋ฐœ์‹ ์ž ID
    sender_name VARCHAR,              -- ๋ฐœ์‹ ์ž ์ด๋ฆ„
    recipient_id VARCHAR,             -- ์ˆ˜์‹ ์ž ID
    recipient_name VARCHAR,           -- ์ˆ˜์‹ ์ž ์ด๋ฆ„
    message TEXT,                     -- ๋ฉ”์‹œ์ง€ ๋‚ด์šฉ
    message_type VARCHAR,             -- ๋ฉ”์‹œ์ง€ ์œ ํ˜•
    is_read BOOLEAN,                  -- ์ฝ์Œ ์—ฌ๋ถ€
    created_at DATETIME,
    read_at DATETIME
);

6. sos_alerts - SOS ์•Œ๋ฆผ

CREATE TABLE sos_alerts (
    id INTEGER PRIMARY KEY,
    ship_id VARCHAR,                  -- ์„ ๋ฐ• ID
    ship_name VARCHAR,                -- ์„ ๋ฐ•๋ช…
    latitude FLOAT,                   -- ์œ„๋„
    longitude FLOAT,                  -- ๊ฒฝ๋„
    message TEXT,                     -- SOS ๋ฉ”์‹œ์ง€
    status VARCHAR,                   -- ์ƒํƒœ (active/resolved)
    created_at DATETIME,
    resolved_at DATETIME
);

7. weather_data - ๋‚ ์”จ ๋ฐ์ดํ„ฐ

CREATE TABLE weather_data (
    id INTEGER PRIMARY KEY,
    date VARCHAR UNIQUE,              -- ๋‚ ์งœ
    temperature FLOAT,                -- ์˜จ๋„ (ยฐC)
    wind_speed FLOAT,                 -- ํ’์† (m/s)
    wind_direction FLOAT,             -- ํ’ํ–ฅ (๋„)
    humidity FLOAT,                   -- ์Šต๋„ (%)
    created_at DATETIME
);

๐Ÿ”„ ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™”

๋ฐฉ๋ฒ• 1: SQL ๋คํ”„ ์‚ฌ์šฉ (๊ถŒ์žฅ)

sqlite3 ship_routes.db < ship_routes_init.sql

๋ฐฉ๋ฒ• 2: ์ž๋™ ์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ

./setup_database.sh

๋ฐฉ๋ฒ• 3: ๊ฒฝ๋กœ ์žฌ์ƒ์„ฑ (๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ)

# ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ฒฝ๋กœ ์ƒ์„ฑ
python generate_ship_routes.py

# ๋˜๋Š” ๊ฐœ๋ณ„ ์„ ๋ฐ• ๊ฒฝ๋กœ ์ƒ์„ฑ
python generate_ship001_routes.py

๐Ÿ“ˆ ๋ฐ์ดํ„ฐ ํ˜„ํ™ฉ

์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค:

  • ์„ ๋ฐ•: 10๊ฐœ (EUM001 ~ EUM010)
  • CCTV ์žฅ์น˜: 8๊ฐœ
  • LiDAR ์žฅ์น˜: 5๊ฐœ
  • ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ฒฝ๋กœ: 9๊ฐœ (์„ ๋ฐ• 2~10)
  • ์ดˆ๊ธฐ ๋ฉ”์‹œ์ง€: 0๊ฐœ (์‚ฌ์šฉ์ž ์ƒ์„ฑ)

Version: 5.0 | Last Updated: October 2024 | Status: Production Ready โœ…

About

awesome-ship-navigator

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors