์ ๋ฉด ์นด๋ฉ๋ผ์ ์์ ์ถ์ (Gaze Tracking) ์ ํ์ฉํด ๋ฒํผ์ ์์ํ์ฌ ๋ฌธ์ฅ์ ๋ฐํ(TTS)ํ๊ฑฐ๋
๊ธด๊ธ(SOS) ๋์์ ์ํํ๋ ์ ๊ทผ์ฑ ๋ณด์กฐ ์ฑ์
๋๋ค.
์น/๊ถํ ๊ฑฐ๋ถ/์๋ฎฌ๋ ์ดํฐ ํ๊ฒฝ์์๋ ํฐ์น ์ ์ค์ฒ๋ก ์์ ์ ๋ชจ์ ์
๋ ฅ(Mock) ํ ์ ์์ต๋๋ค.
- ๊ฐ๋ฐ ๋๊ธฐ
- ํต์ฌ ๊ธฐ๋ฅ
- ๊ธฐ์ ์คํ
- ๊ฐ๋ฐ ํ๊ฒฝ
- ํ๋ก์ ํธ ๊ตฌ์กฐ
- ์ค์น ๋ฐ ์คํ
- ๊ถํ ๋ฐ ํ๋ซํผ ๋์
- ์ฌ์ฉ ๋ฐฉ๋ฒ
- ํ ์คํธ ๋ฐ ๋น๋
- Gitignore ์ฐธ๊ณ
์ฒญ๊ฐยท์ธ์ด ์ฅ์ ๋ก ์ธํด ๋ฐ์ฑ์ด ์ด๋ ต๊ฑฐ๋ ์ ์ฌ์ฉ์ด ์ ํ๋ ์ฌ์ฉ์๊ฐ
์์ ๋ง์ผ๋ก ๋น ๋ฅด๊ณ ์ง๊ด์ ์ธ ์์ฌ ํํ์ ํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- ๋ฐ๋ณต๋๋ ์ผ์ ํํ(๋ฌผยทํ์ฅ์คยท๋์ ์์ฒญ ๋ฑ)์ ๋น ๋ฅด๊ฒ ์ ๋ฌ โ ๋ฐ์ ์๊ฐ ๋จ์ถ / ํผ๋ก๋ ๊ฐ์
- ๋ณดํธ์ ๋ถ์ฌ ์ํฉ์์๋ ๊ธฐ๋ณธ์ ์์ฌ ํํ ๋ฐ ๊ธด๊ธ ํธ์ถ(SOS) ๊ฐ๋ฅ โ ์์ ์ฑ ํฅ์
- ๊ฐ์ธ ๋ง์ถค ๋ณด๋ ๊ตฌ์ฑ ๊ฐ๋ฅ โ ํ์ต ๋ฐ ์ฌํ ํ๊ฒฝ์ ์ ์
๋ชจ๋ ๋ฐ์ดํฐ๋ ์จ๋๋ฐ์ด์ค(on-device) ์ถ๋ก ์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ,
๊ถํ์ด ์๊ฑฐ๋ ๋ฏธ์ง์ ํ๋ซํผ์์๋ Mock Gaze ๋ก ์๋ ์ ํ๋ฉ๋๋ค.
| ๋ถ๋ฅ | ์ค๋ช |
|---|---|
| ์์ ์ถ์ | Google ML Kit ์ผ๊ตด ๊ฒ์ถ ๊ธฐ๋ฐ ์์ ํฌ์ธํธ ๊ณ์ฐ (์๋๋ก์ด๋) |
| ๋ชจ์ ์์ (Mock) | ๊ถํ ๊ฑฐ๋ถยท์นยท๋ฐ์คํฌํฑ ํ๊ฒฝ์์ ํฐ์น๋ก ์์ ๋์ฒด |
| ๋ณด์ (Calibration) | 3ร3 ํ๊น ์์๋ก ์์ ์ขํ โ ํ๋ฉด ์ขํ ๋ณํ ํ๋ ฌ ์์ฑ |
| ์์ ์ ํ(Dwell) | ์ผ์ ์๊ฐ ์์ ์ ์นด๋ ํธ๋ฆฌ๊ฑฐ (๋ง, ์ง๋, ํ๋์ ํผ๋๋ฐฑ) |
| TTS ๋ฐํ | ์ธ์ด/์๋/ํผ์น ์ค์ ๊ฐ๋ฅ, ์ค์๊ฐ ์ฝ์ด์ฃผ๊ธฐ ์ต์ ํฌํจ |
| SOS ๊ธฐ๋ฅ | 112/119/์ฌ์ฉ์ ๋ฒํธ๋ก ํตํยท๋ฌธ์ ๋ฐ์ก, ์ง๋+TTS ์๋ด |
| ๋ณด๋ ํธ์ง๊ธฐ | ์นด๋ ์ถ๊ฐ/์ญ์ /์์ ๋ฐ JSON ์ ์ฅ |
| ์ ๊ทผ์ฑ ์ต์ | ๊ณ ๋๋นยทํฐํธ ์ค์ผ์ผยท๋คํฌ๋ชจ๋ยทํฐ ํฐ์น ํ๊นยท์๊ฐ ํผ๋๋ฐฑ |
| ๋ก๊ทธ ์ ์ฅ | sqflite ๊ธฐ๋ฐ ๋์ ๋ก๊ทธ, CSV ๋ด๋ณด๋ด๊ธฐ ๊ฐ๋ฅ |
| Framework |
|
| ML / Camera |
|
| TTS / Vibration |
|
| Device / Permissions |
|
| Storage / DB |
|
| Localization / UI |
|
- IDE: Visual Studio Code / Android Studio
- Flutter SDK: 3.x ์ด์
- ํ ์คํธ ๊ธฐ๊ธฐ: Pixel 9 (Android 15 Emulator)
final/
โโ lib/
โ โโ main.dart # ์ํธ๋ฆฌ, AppRoot ๊ตฌ๋
โ โโ app.dart # ๋ถํธ์คํธ๋ฉ(TTS/DB/๊ถํ), ๋ผ์ฐํ
/ํ
๋ง
โ โโ core/ # ํ
๋ง/๋ก๊น
/์ ๊ทผ์ฑ
โ โโ data/ # prefs / DB / storage
โ โโ domain/
โ โ โโ gaze/ # ์์ FSM, ๋ณด์ , Mock, Repo
โ โ โโ tts/ # TTS ์๋น์ค
โ โ โโ sos/ # SOS ์๋น์ค
โ โ โโ models/ # Card / Board / Settings ๋ชจ๋ธ
โ โโ platform/ # Android ์ฑ๋ ๊ธฐ๋ฐ Gaze (Stub ํฌํจ)
โ โโ ui/
โ โโ screens/ # ๋ฉ์ธ / ์ค์ / ๋ณด์ / SOS / ํธ์ง ํ๋ฉด
โ โโ widgets/ # ์ปค์, ์นด๋ ๊ทธ๋ฆฌ๋, ์งํ ๋ง ๋ฑ
โโ assets/
โ โโ boards/cards_default.json # ๊ธฐ๋ณธ ๋ณด๋ ํ
ํ๋ฆฟ
โโ l10n/ # ์ธ์ด ๋ฆฌ์์ค(ko/en)
โโ pubspec.yaml
โโ .gitignore
flutter pub get# Android (๊ถ์ฅ)
flutter run -d android
# iOS
flutter run -d ios
# Web (Mock Gaze ์ฌ์ฉ)
flutter run -d chromeflutter build apk # ๋๋ ios / web / windows / macos| ํ๋ซํผ | ๋์ ๋ฐฉ์ |
|---|---|
| Android | ML Kit + Camera ์ด๋ฏธ์ง ์คํธ๋ฆผ์ผ๋ก on-device ์์ ์ถ์ |
| iOS | ML Kit Face Detection ์ง์ (๊ถํ ํ์) |
| Web / ๋ฐ์คํฌํฑ / ๊ถํ ๊ฑฐ๋ถ | 5์ด ๋ด ์ด๋ฒคํธ ์์ ์ Mock Gaze ์๋ ์ ํ |
| ํ๋ฆฌ๋ทฐ ์ฒ๋ฆฌ | GazeHiddenPreview๋ก 1ร1 ์คํ์คํฌ๋ฆฐ ๋ ๋๋ง |
๊ถํ ์์ฒญ: ์นด๋ฉ๋ผ / ์ ํ / ์ง๋
(permission_handler ํจํค์ง๋ก ๋ฐํ์ ์์ฒญ)
- ์นด๋ฉ๋ผ ๋ฐ ์ ํ ๊ถํ์ ํ์ฉ
- ๊ฑฐ๋ถ ์ Mock Gaze ์๋ ํ์ฑํ (์์ฑ ์๋ด)
- 3ร3 ์ ์ ์์ฐจ ์์ โ ๋ณด์ ํ๋ ฌ ์๋ ๊ณ์ฐ ํ ์ ์ฅ
- ์์ ์ปค์๊ฐ ์นด๋์ ๋จธ๋ฌผ๋ฉด ์งํ ๋ง์ด ์ฐจ์ค๋ฅด๊ณ
์๋ฃ ์ TTS ๋ฐํ ๋ฐ ํผ๋๋ฐฑ ์ ๊ณต
- 112/119/์ฌ์ฉ์ ์ง์ ๋ฒํผ ์์ ์
์ง๋ + ์์ฑ ์๋ด ํ ํตํ ๋๋ ๋ฌธ์ ์ ์ก ์๋
- ์์ ์๊ฐ, ์ปค์ ํฌ๊ธฐ, ๊ณ ๋๋น, ๊ธ์ ํฌ๊ธฐ,
TTS ์๋/ํผ์น, Mock Gaze ์ฌ๋ถ, ์ค์๊ฐ ์ฝ์ด์ฃผ๊ธฐ ๋ฑ ์ค์
- ์นด๋ ์ถ๊ฐ/์์ /์ญ์ ๊ฐ๋ฅ
SharedPreferences์ JSON ํํ๋ก ์ ์ฅ๋จ
flutter test # ๋จ์/์์ ฏ ํ
์คํธ
dart format . # ์ฝ๋ ํฌ๋งท ์ ๋ฆฌ
flutter analyze # ๋ฆฐํธ ๊ฒ์ฌํ ์คํธ ํ ํ๋ฆฟ์ ํ์ฌ ๊ตฌ์กฐ(AppRoot)์ ๋ง๊ฒ ๋ณด์ ํ์
๊ณต์ lints(flutter_lints) ์ ์ฉ ์ค
Flutter ํ์ค .gitignore ๊ธฐ๋ฐ:
/build/,.dart_tool/,.pub-cache/,.idea/,.DS_Store- ํ๋ซํผ ๋น๋ ์ฐ์ถ๋ฌผ, IDE ๋ฉํ, ์์ ํ์ผ ๋ฑ ์ ์ธ
- ์ธ๋ถ API ํค/๋น๋ฐ ์ ๋ณด ์์ (ํ์ ์
.gitignore์ ์ถ๊ฐ)
ยฉ 2025 NanoLab-Vibe-Coding โ Ask Eye Flutter Project



