μκ°μ₯μ μΈμ μν μ¨λλ°μ΄μ€ AI 보ν 보쑰 μ±
μ€λ§νΈν° μΉ΄λ©λΌλ‘ μ λ°© μ₯μ λ¬Όμ μ€μκ° νμ§νκ³
μ§λ, νκ΅μ΄ μμ± μλ΄, μ€μκ° λμ보λλ‘ λ³΄ν μν©μ μ§μν©λλ€.
- νλμ 보기
- μ£Όμ κΈ°λ₯
- νμ¬ κ΅¬ν μν
- 곡곡λ°μ΄ν° νμ© μλ리μ€
- νλ‘μ νΈ κ΅¬μ‘°
- λΉ λ₯Έ μμ
- νκ²½ λ³μ
- ν μ€νΈ
- λ°°ν¬
- μ£Όμ API
- κ΄λ ¨ λ¬Έμ
VoiceGuideλ μΉ΄λ©λΌ μ΄λ―Έμ§λ₯Ό μλ²λ‘ 보λ΄μ§ μκ³ , Android κΈ°κΈ° μμμ YOLO/TFLite λͺ¨λΈλ‘ μ₯μ λ¬Όμ κ°μ§ν©λλ€. μ±μ μνλμ λ°λΌ μ§λ ν¨ν΄κ³Ό νκ΅μ΄ TTSλ₯Ό μ¦μ μΆλ ₯νκ³ , μλ²λ νμ§ JSONκ³Ό GPSλ₯Ό λ°μ λμ보λ, μ΄λ ₯, κ²½λ‘, 곡곡λ°μ΄ν° μλ리μ€λ₯Ό μκ°νν©λλ€.
| ν΅μ¬ κ°μΉ | ꡬν λ°©μ |
|---|---|
| κ°μΈμ 보 λ³΄νΈ | μΉ΄λ©λΌ νλ μμ κΈ°κΈ° λ΄λΆμμλ§ μΆλ‘ νκ³ μλ²λ‘ μ μ‘νμ§ μμ |
| μ¦μ μλ΄ | Android λ‘컬 SentenceBuilderκ° TTS λ¬Έμ₯μ μμ±ν΄ μλ² μλ΅μ κΈ°λ€λ¦¬μ§ μμ |
| 보ν μμ | μ₯μ λ¬Ό μνλμ λ°λΌ NONE, SHORT, DOUBLE, URGENT μ§λ ν¨ν΄ μ 곡 |
| μ€λͺ κ°λ₯ν λ°μ΄ν° | μ¬κ³ λ€λ°κ΅¬μ, ν‘λ¨λ³΄λ μ κ·Όμ±, 보νμ§μμμ€ κ·Όκ±°λ₯Ό λμ보λμ νμ |
Android CameraX
-> TFLite YOLO μ¨λλ°μ΄μ€ μΆλ‘
-> 3νλ μ ν¬ν νν° + IoU μΆμ + EMA ννν
-> μνλ κ³μ°
-> μ§λ / λ‘컬 TTS μ¦μ μλ΄
-> POST /detect, /gps
-> FastAPI + DB + SSE
-> μ€μκ° λμ보λ
| μμ | κΈ°λ₯ |
|---|---|
| μ¨λλ°μ΄μ€ AI | μΉ΄λ©λΌ νλ μμ κΈ°κΈ° λ΄λΆμμλ§ μΆλ‘ νλ©° μλ²λ‘ μ μ‘νμ§ μμ΅λλ€. |
| 컀μ€ν λͺ¨λΈ | COCO 80κ° ν΄λμ€μ κ³λ¨, λ¬Έ λ± λ³΄ν μν μμλ₯Ό 보κ°νμ΅λλ€. |
| μν μ ν μλ¦Ό | κΈ΄κΈ μν κ°μ§ μ μ§λ/λΉνμμ λ¨Όμ μΆλ ₯νκ³ μμ± μλ΄λ₯Ό μ΄μ΄κ°λλ€. |
| μ°ΎκΈ° λͺ¨λ | βμμ μ°Ύμμ€β, βκ°λ°© μ΄λ μμ΄βμ²λΌ λμ 물체μ λ°©ν₯κ³Ό 거리λ₯Ό μλ΄ν©λλ€. |
| μ£Όλ³ νμΈ | βμ§κΈ λκ° μμ΄?β μμ²μ νμ¬ νλ μκ³Ό μ΅κ·Ό μΆμ μνλ₯Ό μμ½ν©λλ€. |
| 곡곡λ°μ΄ν° μ§λ | μ¬κ³ λ€λ°κ΅¬μ, ν‘λ¨λ³΄λ μ κ·Όμ±, 보νμ§μμμ€ κ·Όκ±°λ₯Ό λμ보λμ νμν©λλ€. |
| λͺ¨λ | μμ± μμ | λμ |
|---|---|---|
| μ₯μ λ¬Ό | βμμ λ μμ΄β, βκΈΈ μ΄λβ | μνλ μμ μ₯μ λ¬Όμ μ¦μ μλ΄ |
| μ°ΎκΈ° | βμμ μ°Ύμμ€β, βκ°λ°© μ΄λ μμ΄β | μ°Ύλ 물체μ λ°©ν₯κ³Ό 거리 μλ΄ |
| μ£Όλ³ νμΈ | βμ§κΈ λκ° μμ΄β, βνμ¬ μν© μλ €μ€β | νμ¬ νλ μκ³Ό μ΅κ·Ό tracker μν μμ½ |
| 물건 νμΈ | βμμ λ κ² λμΌβ, βλ°λ‘ μ λμΌβ | κ°κΉμ΄ 물체λ₯Ό μ°μ λ΅λ³ |
| κΈ°λ₯ | μν | μ€λͺ |
|---|---|---|
| μ₯μ λ¬Ό νμ§ | μλ£ | yolo11n_320.tflite κΈ°λ° μ¨λλ°μ΄μ€ μΆλ‘ |
| μνλ μ§λ | μλ£ | NONE, SHORT, DOUBLE, URGENT ν¨ν΄ |
| νκ΅μ΄ TTS | μλ£ | νλ©΄ μμ΄ μν©λ³ μλ΄ λ¬Έμ₯ λ°ν |
| μμ± λͺ λ Ή λͺ¨λ | μλ£ | μ₯μ λ¬Ό, μ°ΎκΈ°, μ£Όλ³ νμΈ, 물건 νμΈ |
| μλ² μ μ‘ / DB μ μ₯ | μλ£ | νμ§ JSON, GPS, μ΅κ·Ό μν μ μ₯ |
| μ€μκ° λμ보λ | μλ£ | νμ§ νν©, κ²½λ‘, 24μκ° λ΄μ, μ¬κ³ λ€λ°κ΅¬μ |
| μ€νλΌμΈ 보쑰 μλ΄ | μλ£ | μλ² μμ΄ Android λ΄μ₯ TTSμ μ§λ μ μ§ |
| 곡곡λ°μ΄ν° μλλ¦¬μ€ | μλ£ | 보λΌλ§€μ -> μμΈμλ¨λΆμ₯μ μΈμ’ ν©λ³΅μ§κ΄ κ²½λ‘ λΉκ΅ |
μ΅μ’
λ°ν/λ°λͺ¨μ© λ°μ΄ν°λ data/processed/voiceguide_final/μ μμ΅λλ€. λν μλ리μ€λ 보λΌλ§€μμμ μμΈμλ¨λΆμ₯μ μΈμ’
ν©λ³΅μ§κ΄κΉμ§ μ΄λν λ, λ¨μ μ΅λ¨ κ²½λ‘λ³΄λ€ λ³΄νμ§μμμ€ κ·Όκ±°κ° μλ κ²½λ‘λ₯Ό μ ννλ νλ¦μ
λλ€.
| λ°μ΄ν° νλͺ© | README/λμ보λμμ μ°λ μν |
|---|---|
| ν‘λ¨λ³΄λ μμΉ λ°μ΄ν° | λμꡬ ν‘λ¨λ³΄λ ν보λ₯Ό μ§λ ν¬μΈνΈμ κ²½λ‘ λΉκ΅ κΈ°μ€μ μΌλ‘ μ¬μ© |
| 보νλ±/κ΅ν΅μ νΈ μ 보 | ν‘λ¨ κ°λ₯ μ νΈ μλ΄μ κ·Όκ±°λ‘ μ¬μ© |
| μν₯μ νΈκΈ° μ 보 | μκ°μ₯μ μΈ λ³΄ν μλ΄μ μ€μν μμ μμ€ μ¬λΆλ‘ μ μν |
| 보νμμλμ νΈκΈ° μ 보 | μ¬μ©μκ° μ§μ μ νΈλ₯Ό μμ²ν μ μλ μμ€ μ¬λΆλ‘ μ μν |
| κ³ μμ ν‘λ¨λ³΄λ μ 보 | μ°¨λ κ°μκ³Ό 보νμ λ³΄νΈ κ°λ₯μ±μ λνλ΄λ 보쑰 μ μλ‘ μ¬μ© |
| κ΅ν΅μμ μμ€ μμΈ μ 보 | ν‘λ¨λ³΄λλ³ μ€λͺ κ°λ₯ν μμ κ·Όκ±°λ‘ μ¬μ© |
| 보νμ μ¬κ³ λ€λ°κ΅¬μ | λμ보λ μ§λμμ μ£Όμ ꡬμ λ μ΄μ΄λ‘ νμ |
| μ₯μ μΈ λ³΅μ§μμ€/λͺ©μ μ§ ν보 | λ°λͺ¨ λͺ©μ μ§μ μ κ·Όμ± μλλ¦¬μ€ κ΅¬μ±μ μ¬μ© |
| μ΄λμ§μμΌν° ν보 | λͺ©μ μ§ μ κ·Όμ± μ€λͺ κ³Ό fallback μλ΄ νλ³΄λ‘ μ¬μ© |
μλ³Έ 곡곡λ°μ΄ν°
-> λͺ©μ μ§ / ν‘λ¨λ³΄λ / 보νμ§μμμ€ / μ΄λμ§μμΌν° λΆλ¦¬
-> μ’ν μ κ·ν
-> ν‘λ¨λ³΄λ μ£Όλ³ 30m μμ€ λ§€μΉ
-> 보νλ±, μν₯μ νΈκΈ°, μλμ νΈκΈ°, κ³ μμ, μμΈμ 보 μ μν
-> preferred / recommended / basic / insufficient λ±κΈν
-> λμ보λμ© CSV, GeoJSON, JSON, HTML μ°μΆ
| νμΌ | μ©λ |
|---|---|
final_route_comparison.csv |
보λΌλ§€μ -> μμΈμλ¨λΆμ₯μ μΈμ’ ν©λ³΅μ§κ΄ A/B κ²½λ‘ λΉκ΅ |
final_scenario_dataset.json |
λμ보λκ° μ½λ λν μλλ¦¬μ€ JSON |
final_crosswalk_accessibility.csv |
λμꡬ ν‘λ¨λ³΄λ μ κ·Όμ± μ μν |
final_crosswalk_accessibility.geojson |
μ§λ λ μ΄μ΄μ© ν‘λ¨λ³΄λ ν¬μΈνΈ |
final_tts_guidance.csv |
λ°ν/μ± μλ΄ λ¬Έμ₯ |
final_data_usage_refined.html |
λ°μ΄ν° νμ© κ·Όκ±° μ€λͺ HTML |
λν μλ리μ€λ μ΅λ¨ ν보 A(06-0000016344)λ³΄λ€ λ³΄νλ±, μν₯μ νΈκΈ°, 보νμμλμ νΈκΈ° κ·Όκ±°κ° μλ B(06-0000032157)λ₯Ό μ ννλ νλ¦μ
λλ€. λμ보λμμλ μ΄ κ²°κ³Όλ₯Ό κ²½λ‘ μΉ΄λ, μ κ·Όμ± λ±κΈ, λ³΄κ° μ μ μ§μ , λ°μ΄ν° νμ© κ·Όκ±° λ§ν¬λ‘ νμν©λλ€.
νμ¬ A/B κ²½λ‘μ 거리λ μ§λ κ²½λ‘ API κΈ°λ° μ€μ 보ν λ€νΈμν¬ κ±°λ¦¬κ° μλλΌ λν ν‘λ¨λ³΄λ κ²½μ μ§μ 거리 ν© κΈ°λ° λ°λͺ¨κ°μ λλ€. λ°νμμλ β곡곡λ°μ΄ν° κΈ°λ° μλλ¦¬μ€ λ°μ΄ν°βλ‘ μ€λͺ νκ³ , μ€μ μ΅λ¨ 보ν거리 κ²μ¦μ λ€μ λ¨κ³λ‘ λΆλ¦¬ν©λλ€.
μ¬μμ±:
python tools/build_voiceguide_final_dataset.pyVoiceGuide/
βββ android/app/src/main/
β βββ assets/
β β βββ yolo11n_320.tflite
β β βββ yolo26n_float32.tflite
β β βββ policy_default.json
β βββ java/com/voiceguide/
β βββ MainActivity.kt
β βββ TfliteYoloDetector.kt
β βββ MvpPipeline.kt
β βββ SentenceBuilder.kt
β βββ VoiceGuideConstants.kt
β βββ VoicePolicy.kt
β βββ Detection.kt
β
βββ src/
β βββ api/
β β βββ main.py
β β βββ routes.py
β β βββ db.py
β β βββ tracker.py
β β βββ events.py
β βββ nlg/
β β βββ sentence.py
β β βββ templates.py
β βββ config/
β βββ policy.json
β βββ policy.py
β
βββ templates/dashboard.html
βββ data/processed/voiceguide_final/
βββ docs/
β βββ reports/
β β βββ current_status.html
β β βββ model_tuning_issue.html
β βββ status/
βββ tools/
β βββ build_voiceguide_final_dataset.py
β βββ build_business_plan.js
βββ tests/
βββ Dockerfile
βββ package.json
βββ requirements.txt
pip install -r requirements.txt
cp .env.example .env
uvicorn src.api.main:app --host 0.0.0.0 --port 8000μλ²μλ YOLO λͺ¨λΈμ΄ νμνμ§ μμ΅λλ€. λͺ¨λΈ μΆλ‘ μ Android κΈ°κΈ°μμ μνν©λλ€.
- Android Studioμμ
android/ν΄λ μ΄κΈ° - Gradle Sync
- USB κΈ°κΈ° μ°κ²° λ° USB λλ²κΉ νμ±ν
- Run (
Shift+F10) - μ± μ€μ μμ μλ² URL μ λ ₯
cd android
.\gradlew.bat assembleDebug| λ³μ | κΈ°λ³Έκ° | μ€λͺ |
|---|---|---|
DATABASE_URL |
SQLite | PostgreSQL/Supabase μ°κ²° URL |
API_KEY |
μμ | Bearer λλ X-API-Key μΈμ¦ |
PORT |
8000 |
μλ² ν¬νΈ |
python -m pytest tests/ -v -m "not integration"μ΅μ’ 곡곡λ°μ΄ν°/API κ²μ¦:
python -m pytest tests/test_api.py tests/test_voiceguide_final_dataset.pyνμ¬ Cloud Run μλΉμ€:
https://voiceguide-1063164560758.asia-northeast3.run.app
μ£Όμ νλ©΄:
GET /health
GET /dashboard
GET /voiceguide-final/summary
GET /voiceguide-final/crosswalks.geojson
GET /voiceguide-final/data-usage.html
λ°°ν¬ μμ:
cd C:\VoiceGuide\VoiceGuide
gcloud run deploy voiceguide --source . --region asia-northeast3 --project project-d9b26ccb-c174-4820-b16| λ©μλ | κ²½λ‘ | μ€λͺ |
|---|---|---|
POST |
/detect |
νμ§ κ²°κ³Ό JSON μμ , DB μ μ₯, tracker μ λ°μ΄νΈ |
POST |
/detect_json |
ꡬν νΈν νμ§ JSON μμ |
POST |
/question |
μ΅κ·Ό tracker/DB μν κΈ°λ° μ£Όλ³ νμΈ μλ΅ |
POST |
/gps |
Android μμΉ μ λ°μ΄νΈ |
GET |
/api/policy |
Android μ μ± λκΈ°ν, ETag μΊμ± |
GET |
/status/{session_id} |
μΈμ νμ¬ μν |
GET |
/events/{session_id} |
SSE μ€μκ° μ€νΈλ¦Ό |
GET |
/history/{session_id} |
μΈμ λ³ νμ§ μ΄λ ₯ |
GET |
/heatmap/{session_id} |
μν ννΈλ§΅ |
GET |
/routes/{session_id} |
μ μ₯λ GPS κ²½λ‘ |
GET |
/pedestrian-hotspots/nearby |
GPS κΈ°λ° λ³΄νμ μ¬κ³ λ€λ°κ΅¬μ |
GET |
/voiceguide-final/summary |
μ΅μ’ μλλ¦¬μ€ μμ½ |
GET |
/voiceguide-final/crosswalks.geojson |
ν‘λ¨λ³΄λ μ κ·Όμ± GeoJSON |
GET |
/voiceguide-final/data-usage.html |
λ°μ΄ν° νμ© κ·Όκ±° HTML |
GET |
/dashboard |
μ€μκ° λμ보λ |
| λ¬Έμ | μμΉ | λ΄μ© |
|---|---|---|
| νμ¬ μν© λ³΄κ³ μ | docs/reports/current_status.html |
μμ€ν μν€ν μ², ν΅μ¬ μ΄μ, μλ² μλν¬μΈνΈ, λ‘λλ§΅ |
| λͺ¨λΈ νλ μ΄μ λΆμ | docs/reports/model_tuning_issue.html |
νμΈνλ λͺ¨λΈ μ€μΈμ μμΈκ³Ό κ°μ λ°©ν₯ |
| λλ²κ·Έ 리ν¬νΈ | docs/debug_report.md |
μλ², νΈλ컀, λμ보λ λλ²κΉ κΈ°λ‘ |
| μν λ³΄κ³ μ | docs/status/CURRENT_STATUS_REPORT.md |
Markdown κΈ°λ° νλ‘μ νΈ μν μμ½ |
| μ΅μ’ λ°μ΄ν° μ€λͺ | data/processed/voiceguide_final/README.md |
μ΅μ’ 곡곡λ°μ΄ν° μ°μΆλ¬Ό κΈ°μ€κ³Ό μ£Όμμ¬ν |
AI HUMAN 4κΈ° 3ν Β· 2026