Skip to content

YSH128/on-guard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

788 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

OnGuard

OnGuard Logo

์‹ค์‹œ๊ฐ„ ๋”ฅํŽ˜์ดํฌ ์˜์ƒํ†ตํ™” ํƒ์ง€ ๋ฐ ๋ณด์ด์Šคํ”ผ์‹ฑ ๋ฐฉ์–ด ์‹œ์Šคํ…œ


1. Background

์Šค๋งˆํŠธํฐ ์˜์ƒํ†ตํ™”๊ฐ€ ์ผ์ƒํ™”๋˜๋ฉด์„œ ์ƒ์„ฑํ˜• AI ๊ธฐ๋ฐ˜ ๋”ฅํŽ˜์ดํฌ ๊ธฐ์ˆ ์„ ์•…์šฉํ•œ ๋ณด์ด์Šคํ”ผ์‹ฑ ๋ฒ”์ฃ„๊ฐ€ ๊ธ‰์ฆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š” ์ง€์ธ์˜ ์–ผ๊ตด์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ•ฉ์„ฑํ•˜์—ฌ ์˜์ƒํ†ตํ™”๋ฅผ ์‹œ๋„ํ•˜๋ฉฐ, ํ”ผํ•ด์ž ์ž…์žฅ์—์„œ๋Š” ์˜์ƒ์„ ๋ณด๊ณ ๋„ ๊ฐ€์งœ์ž„์„ ์ธ์ง€ํ•˜๊ธฐ๊ฐ€ ์‚ฌ์‹ค์ƒ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ OnGuard์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
์˜์ƒํ†ตํ™” ์ค‘ ๋”ฅํŽ˜์ดํฌ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†์Œ ์˜จ๋””๋ฐ”์ด์Šค AI ๋ชจ๋ธ(ForensicAdapter)๋กœ ํ†ตํ™” ํ™”๋ฉด์„ ์‹ค์‹œ๊ฐ„ ๋ถ„์„, ์ด์ƒ ๊ฐ์ง€ ์ฆ‰์‹œ ๊ฒฝ๊ณ  ์˜ค๋ฒ„๋ ˆ์ด ํ‘œ์‹œ
๋”ฅํŽ˜์ดํฌ ๊ฐ์ง€ ์‹œ ๋ณดํ˜ธ์ž์—๊ฒŒ ์•Œ๋ฆด ์ˆ˜๋‹จ ์—†์Œ ๊ฐ์ง€ ์ฆ‰์‹œ ๋“ฑ๋ก๋œ ๋ณดํ˜ธ์ž์—๊ฒŒ FCM ํ‘ธ์‹œ ์•Œ๋ฆผ + GPS ์œ„์น˜ ์ž๋™ ๊ณต์œ 
ํ†ตํ™” ์ƒ๋Œ€๋ฐฉ์˜ ์‹ค์ œ ์œ„์น˜ ํ™•์ธ ๋ถˆ๊ฐ€ ์ƒ๋Œ€๋ฐฉ IP ๊ธฐ๋ฐ˜ ๊ตญ๊ฐ€ ์œ„์น˜๋ฅผ ์ง€๋„์— ์‹œ๊ฐํ™”ํ•˜์—ฌ ํ‘œ์‹œ
ํ†ตํ™” ์ค‘ ๋Œ€ํ™” ๋‚ด์šฉ ์‹ค์‹œ๊ฐ„ ๋ถ„์„ ๋„๊ตฌ ์—†์Œ ์˜จ๋””๋ฐ”์ด์Šค Whisper STT + GPT-4o-mini ์œ„ํ—˜ ํ‚ค์›Œ๋“œ ์ž๋™ ํƒœ๊น…
ํ”ผํ•ด ๋ฐœ์ƒ ํ›„ ๋Œ€์‘ ์ˆ˜๋‹จ ๋ถ€์žฌ ๊ธˆ์œต ๊ฑฐ๋ž˜ ์ฐจ๋‹จ ๊ฐ€์ด๋“œ ์˜ค๋ฒ„๋ ˆ์ด, ์ตœ๊ทผ ๊ฐ์ง€ ๊ธฐ๋ก ํƒ€์ž„๋ผ์ธ ์ œ๊ณต

Sub-module README

๋ชจ๋“ˆ ๋งํฌ
Android ์•ฑ (Frontend) frontend/shutter-android/README.md
์˜จ๋””๋ฐ”์ด์Šค AI ๋ชจ๋ธ frontend/shutter-android/app/src/main/cpp/AI_README.md
๋”ฅํŽ˜์ดํฌ ๋ฐœ์‹ ์ž ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ (Demo) frontend/shutter-android/demo/README.md
๋ฐฑ์—”๋“œ ์„œ๋ฒ„ (Backend) shutter-BE/README.md
ํฌํŒ… ๋งค๋‰ด์–ผ exec/ํฌํŒ…๋งค๋‰ด์–ผ.md

2. Key Features & System Architecture

System Architecture

System Architecture
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      OnGuard Android App                             โ”‚
โ”‚                                                                      โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚   โ”‚     Vision Pipeline      โ”‚   โ”‚       Audio Pipeline          โ”‚   โ”‚
โ”‚   โ”‚  MediaProjection ์บก์ฒ˜    โ”‚   โ”‚  Agora ์˜ค๋””์˜ค ์ŠคํŠธ๋ฆผ (PCM)    โ”‚   โ”‚
โ”‚   โ”‚  OpenCV ์–ผ๊ตด ๊ฒ€์ถœ        โ”‚   โ”‚  Whisper BASE STT (์˜จ๋””๋ฐ”์ด์Šค)โ”‚   โ”‚
โ”‚   โ”‚  ForensicAdapter ONNX    โ”‚   โ”‚  GPT-4o-mini ์œ„ํ—˜ ํƒœ๊ทธ ๋ถ„๋ฅ˜  โ”‚   โ”‚
โ”‚   โ”‚  (INT8 + NNAPI/QNN)      โ”‚   โ”‚                              โ”‚   โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                   โ”‚
โ”‚                               โ–ผ                                      โ”‚
โ”‚             ๋”ฅํŽ˜์ดํฌ ๊ฐ์ง€ ๊ฒฝ๊ณ  ์˜ค๋ฒ„๋ ˆ์ด ํ‘œ์‹œ                            โ”‚
โ”‚             ๊ธˆ์œต ์•ฑ ์ฐจ๋‹จ ๊ฐ€์ด๋“œ + ์œ„ํ—˜ ํƒœ๊ทธ ํ‘œ์‹œ                        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                โ”‚ REST API + WebSocket + FCM
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                     Spring Boot Backend (Java 21)                    โ”‚
โ”‚                                                                      โ”‚
โ”‚   OAuth2 (Kakao)  โ”‚  JWT ์ธ์ฆ  โ”‚  Agora RTC ํ† ํฐ  โ”‚  FCM ํ‘ธ์‹œ ์•Œ๋ฆผ  โ”‚
โ”‚   ์‹ค์‹œ๊ฐ„ GPS WebSocket (STOMP)  โ”‚  AI ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ ์ˆ˜์ง‘                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ–ผ           โ–ผ           โ–ผ
                 MySQL        Redis      Grafana
              (์˜๊ตฌ ๋ฐ์ดํ„ฐ)  (GPSยท์บ์‹œ)  (๋ชจ๋‹ˆํ„ฐ๋ง)

์ฃผ์š” ๊ธฐ๋Šฅ

๊ธฐ๋Šฅ ์„ค๋ช…
์‹ค์‹œ๊ฐ„ ๋”ฅํŽ˜์ดํฌ ๊ฐ์ง€ ForensicAdapter ONNX ๋ชจ๋ธ(INT8 ์–‘์žํ™” + NNAPI/QNN ๊ฐ€์†)๋กœ ์˜์ƒํ†ตํ™” ํ™”๋ฉด์„ 1fps ๋ถ„์„, 10ํ”„๋ ˆ์ž„ ํ‰๊ท  ํ™•๋ฅ ๋กœ ํŒ์ •
์˜จ๋””๋ฐ”์ด์Šค STT + LLM ์œ„ํ—˜ ๋ถ„๋ฅ˜ Agora ์˜ค๋””์˜ค ์ŠคํŠธ๋ฆผ์„ Whisper BASE๋กœ ์ „์‚ฌ โ†’ GPT-4o-mini๋กœ #๊ธˆ์œต๊ฑฐ๋ž˜ #๊ฐœ์ธ์ •๋ณด์š”๊ตฌ #ํŠน์ •์žฅ์†Œ์œ ์ธ #์ผ์ƒ๋Œ€ํ™” ํƒœ๊ทธ ๋ถ„๋ฅ˜
๊ฒฝ๊ณ  ์˜ค๋ฒ„๋ ˆ์ด ๋”ฅํŽ˜์ดํฌ ๊ฐ์ง€ ์‹œ ์ƒ๋Œ€๋ฐฉ ์œ„์น˜ โ†’ ๋ณดํ˜ธ์ž ์•Œ๋ฆผ โ†’ GPS ๊ณต์œ  โ†’ ๊ธˆ์œต ์ฐจ๋‹จ ๊ฐ€์ด๋“œ๋ฅผ 5๋‹จ๊ณ„ ์• ๋‹ˆ๋ฉ”์ด์…˜์œผ๋กœ ๋…ธ์ถœ
Agora ์˜์ƒํ†ตํ™” ์นด์นด์˜ค ์นœ๊ตฌ ๋ชฉ๋ก์—์„œ ์ˆ˜์‹ ์ž ์„ ํƒ, FCM ๊ธฐ๋ฐ˜ ์ˆ˜์‹  ์ „ํ™” ์•Œ๋ฆผ(์ž ๊ธˆํ™”๋ฉด/๋ฐฑ๊ทธ๋ผ์šด๋“œ ํฌํ•จ)
์‹ค์‹œ๊ฐ„ GPS ์ถ”์  STOMP over WebSocket์œผ๋กœ ํ”ผ๋ณดํ˜ธ์ž ์œ„์น˜๋ฅผ ๋ณดํ˜ธ์ž ํ™”๋ฉด์— ์‹ค์‹œ๊ฐ„ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…
๋ณดํ˜ธ์ž ๊ด€๋ฆฌ ์นด์นด์˜ค ์นœ๊ตฌ ๋ชฉ๋ก์—์„œ ๋ณดํ˜ธ์ž/ํ”ผ๋ณดํ˜ธ์ž ๊ด€๊ณ„ ๋“ฑ๋กยท์‚ญ์ œ
์ตœ๊ทผ ๊ฐ์ง€ ๊ธฐ๋ก ๋”ฅํŽ˜์ดํฌ ๊ฐ์ง€ ์ด๋ ฅ ํƒ€์ž„๋ผ์ธ (๋‚ ์งœ๋ณ„ ์„ธ์…˜ ์นด๋“œ, ๋‚˜/๋ณดํ˜ธ์ž ํ•„ํ„ฐ)

๊ธฐ์ˆ  ์Šคํƒ

์˜์—ญ ๊ธฐ์ˆ 
Android Kotlin, Jetpack Compose, MVVM + Clean Architecture
์˜จ๋””๋ฐ”์ด์Šค AI ONNX Runtime, PyTorch Android, Whisper BASE (WhisperKit), OpenCV, Qualcomm QNN, NNAPI
์˜์ƒํ†ตํ™” Agora RTC SDK 4.3.0
์ธ์ฆ Kakao OAuth2, JWT (์ž๋™ ๊ฐฑ์‹ )
ํ‘ธ์‹œ ์•Œ๋ฆผ Firebase Cloud Messaging (FCM)
Backend Java 21, Spring Boot 3.5.11, Spring Security, Spring WebSocket (STOMP)
Database MySQL 8+ (์˜๊ตฌ ๋ฐ์ดํ„ฐ), Redis (GPSยท์„ธ์…˜ ์บ์‹œ)
์ธํ”„๋ผ Docker, Docker Compose, Jenkins CI/CD, Nginx, Grafana

Project Structure

S14P21A404/
โ”œโ”€โ”€ frontend/
โ”‚   โ””โ”€โ”€ shutter-android/                  # Android ์•ฑ (Kotlin + Jetpack Compose)
โ”‚       โ”œโ”€โ”€ app/
โ”‚       โ”‚   โ”œโ”€โ”€ src/main/
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ java/com/s14p21a404/shutter/
โ”‚       โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ data/             # Repository ๊ตฌํ˜„์ฒด, ๋”ฅํŽ˜์ดํฌ ํƒ์ง€๊ธฐ, ํ† ํฐ ๊ด€๋ฆฌ
โ”‚       โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ domain/           # UseCase, Repository ์ธํ„ฐํŽ˜์ด์Šค, ๋ชจ๋ธ
โ”‚       โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ network/          # Retrofit, OkHttp, WebSocket ํด๋ผ์ด์–ธํŠธ
โ”‚       โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ presentation/     # Compose ํ™”๋ฉด, ViewModel, ์˜ค๋ฒ„๋ ˆ์ด ๊ด€๋ฆฌ์ž
โ”‚       โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ push/             # FCM ์„œ๋น„์Šค, ํ†ตํ™” ์ด๋ฒคํŠธ ๋ฒ„์Šค
โ”‚       โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ di/               # ServiceLocator (์ˆ˜๋™ DI)
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ cpp/                  # NDK C++ ์ถ”๋ก  ์ฝ”๋“œ (AI_README.md ์ฐธ๊ณ )
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ jniLibs/              # ํ”„๋ฆฌ์ปดํŒŒ์ผ ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (arm64-v8a)
โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ assets/              # AI ๋ชจ๋ธ ํŒŒ์ผ (face_deepfake_v6.onnx)
โ”‚       โ”‚   โ””โ”€โ”€ build.gradle.kts
โ”‚       โ””โ”€โ”€ demo/                         # ๋”ฅํŽ˜์ดํฌ ๋ฐœ์‹ ์ž ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ (โ†’ 5. App Test ์ฐธ๊ณ )
โ”œโ”€โ”€ shutter-BE/                           # Spring Boot ๋ฐฑ์—”๋“œ
โ”‚   โ”œโ”€โ”€ src/main/java/com/shutter/api/
โ”‚   โ”‚   โ”œโ”€โ”€ global/                       # JWT, Security, Redis ์„ค์ •
โ”‚   โ”‚   โ”œโ”€โ”€ user/                         # ๋กœ๊ทธ์ธ, ๋ณดํ˜ธ์ž-ํ”ผ๋ณดํ˜ธ์ž ๊ด€๊ณ„
โ”‚   โ”‚   โ”œโ”€โ”€ rtc/                          # Agora ํ† ํฐ ๋ฐœ๊ธ‰, ํ†ตํ™” ์„ธ์…˜ ์ œ์–ด
โ”‚   โ”‚   โ”œโ”€โ”€ gps/                          # WebSocket ์‹ค์‹œ๊ฐ„ ์œ„์น˜ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…
โ”‚   โ”‚   โ””โ”€โ”€ notification/                 # FCM ํ‘ธ์‹œ ์•Œ๋ฆผ ์ „์†ก
โ”‚   โ”œโ”€โ”€ docker-compose.yml
โ”‚   โ”œโ”€โ”€ Jenkinsfile
โ”‚   โ””โ”€โ”€ README.md
โ”œโ”€โ”€ convention/                           # GitยทJira ํ˜‘์—… ๊ทœ์น™
โ””โ”€โ”€ docs/
    โ””โ”€โ”€ images/                           # README ์ด๋ฏธ์ง€ ๋ฆฌ์†Œ์Šค

3. Setup

Android ์•ฑ

ํ•ญ๋ชฉ ๋ฒ„์ „
Android Studio Ladybug ์ด์ƒ
Kotlin 2.0+
minSdk / targetSdk 33 / 36
NDK 21.4.7075529
JDK 17

frontend/shutter-android/local.properties์— ์•„๋ž˜ ํ‚ค๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

kakao.native.app.key=YOUR_KAKAO_NATIVE_APP_KEY
server.base.url=https://your-server.com/
agora.app.id=YOUR_AGORA_APP_ID
GMS_API_TOKEN=YOUR_GMS_API_TOKEN

app/google-services.json์„ Firebase ์ฝ˜์†”์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ app/ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

๋”ฅํŽ˜์ดํฌ ๊ฐ์ง€ ๋ชจ๋ธ(face_deepfake_v6.onnx)์„ Google Drive์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ app/src/main/assets/์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ Frontend README๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.


๋ฐฑ์—”๋“œ ์„œ๋ฒ„

ํ•ญ๋ชฉ ๋ฒ„์ „
Java 21 LTS
Spring Boot 3.5.11
MySQL 8+
Redis ์ตœ์‹  ์•ˆ์ • ๋ฒ„์ „

shutter-BE/.env ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

DB_HOST=localhost
DB_PORT=3307
DB_NAME=shutter
DB_USERNAME=your_db_username
DB_PASSWORD=your_db_password
REDIS_HOST=localhost
REDIS_PORT=6379
KAKAO_REST_API_KEY=your_kakao_rest_api_key
JWT_SECRET=your_jwt_secret_key_at_least_32_chars

์ž์„ธํ•œ ๋‚ด์šฉ์€ Backend README๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.


4. Usage

Android ์•ฑ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰

cd frontend/shutter-android

# CLI ๋นŒ๋“œ
./gradlew assembleDebug

# ๋˜๋Š” Android Studio์—์„œ ํ”„๋กœ์ ํŠธ ์—ด๊ณ  Run

๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ์‹คํ–‰

cd shutter-BE

# ๋กœ์ปฌ ์ธํ”„๋ผ(MySQL, Redis) ์ปจํ…Œ์ด๋„ˆ ๊ตฌ๋™
docker-compose -f docker-compose.local.yml up -d

# Spring Boot ์‹คํ–‰
./gradlew bootRun

API ๋ช…์„ธ: http://localhost:8080/swagger-ui.html


5. App Test

OnGuard์˜ ๋”ฅํŽ˜์ดํฌ ๊ฐ์ง€ ๊ธฐ๋Šฅ์„ ์‹ค์ œ๋กœ ๊ฒ€์ฆํ•˜๋ ค๋ฉด ๋”ฅํŽ˜์ดํฌ ์˜์ƒ์„ ์†ก์ถœํ•˜๋Š” ๊ณต๊ฒฉ์ž ํ™˜๊ฒฝ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. demo/ ํด๋”์—๋Š” ์›น์บ  ์˜์ƒ์— ์‹ค์‹œ๊ฐ„ ํŽ˜์ด์Šค์Šค์™‘์„ ์ ์šฉํ•˜์—ฌ Agora ์ฑ„๋„๋กœ ์†ก์ถœํ•˜๋Š” ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด OnGuard ์•ฑ์ด ์‹ค์ œ ๋”ฅํŽ˜์ดํฌ ํ†ตํ™”๋ฅผ ์ˆ˜์‹ ํ–ˆ์„ ๋•Œ ๊ฐ์ง€ ๋ฐ ๊ฒฝ๊ณ  ์˜ค๋ฒ„๋ ˆ์ด๊ฐ€ ์ •์ƒ ๋™์ž‘ํ•˜๋Š”์ง€ end-to-end๋กœ ์‹œ์—ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ Demo README๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

Setup

ํ•ญ๋ชฉ ๊ถŒ์žฅ ์‚ฌ์–‘
Python 3.10 ~ 3.12
GPU NVIDIA (CUDA 12.x, cuDNN 9.x) ๊ถŒ์žฅ
cd frontend/shutter-android/demo

python -m venv venv
# Windows
venv\Scripts\activate
# macOS / Linux
source venv/bin/activate

pip install fastapi "uvicorn[standard]" opencv-python insightface pillow "numpy<2"
# GPU ์‚ฌ์šฉ ์‹œ
pip install onnxruntime-gpu

inswapper_128.onnx ๋ชจ๋ธ์„ HuggingFace์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ demo/ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

deepfake-caller.html ์ƒ๋‹จ์˜ ์ƒ์ˆ˜๋ฅผ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

const APP_ID = 'YOUR_AGORA_APP_ID';
const WS_URL = 'ws://localhost:8765';

Usage

# 1. ํŽ˜์ด์Šค์Šค์™‘ ์„œ๋ฒ„ ์‹คํ–‰
# Windows (GPU ์‚ฌ์šฉ ์‹œ cuDNN ๊ฒฝ๋กœ ์ถ”๊ฐ€)
set PATH=venv\Lib\site-packages\nvidia\cudnn\bin;%PATH%
python server.py

# 2. ๋ธŒ๋ผ์šฐ์ € ํด๋ผ์ด์–ธํŠธ ์„œ๋น™
python -m http.server 8080
# โ†’ http://localhost:8080/deepfake-caller.html

์‹œ์—ฐ ์ˆœ์„œ

  1. ๋ธŒ๋ผ์šฐ์ €์—์„œ ์นด์นด์˜ค ๋กœ๊ทธ์ธ
  2. ์†Œ์Šค ์–ผ๊ตด ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ โ†’ ํŽ˜์ด์Šค์Šค์™‘ ON
  3. ํ”ผํ•ด์ž(OnGuard ์•ฑ ์„ค์น˜ ๊ธฐ๊ธฐ) ์นด์นด์˜ค ID ์ž…๋ ฅ โ†’ ํ†ตํ™” ์‹œ์ž‘
  4. OnGuard ์•ฑ์—์„œ ํ†ตํ™” ์ˆ˜๋ฝ โ†’ ๋”ฅํŽ˜์ดํฌ ๊ฐ์ง€ ๊ฒฝ๊ณ  ์˜ค๋ฒ„๋ ˆ์ด ํ™•์ธ

6. Contributors

์ด๋ฆ„ ์—ญํ•  ๋‹ด๋‹น
์œค์ƒํ˜„ Backend / Infra ์นด์นด์˜ค OAuth2ยทJWT ์ธ์ฆ ์ฒด๊ณ„, ๋ณดํ˜ธ์ž-ํ”ผ๋ณดํ˜ธ์ž DB ์„ค๊ณ„, Agora RTC ์„ธ์…˜ ์ œ์–ด, WebSocket GPS ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…, FCM ์•Œ๋ฆผ, Redis ๋ถ„์‚ฐ ๋ฝ, DockerยทJenkins CI/CD
๋ฐ•์ˆ˜๋ฏผ Frontend / Backend ์ „์ฒด ํ™”๋ฉด ๊ตฌํ˜„, GPS ์œ„์น˜ ์ถ”์ , ์นด์นด์˜คํ†ก ์—ฐ๋™, ๋ณดํ˜ธ์ž ๋“ฑ๋กยท๊ด€๋ฆฌ, ์ตœ๊ทผ ๊ธฐ๋ก ํƒ€์ž„๋ผ์ธ, ์„œ๋ฒ„ ์—ฐ๋™, Demo ๋ฐœ์‹ ์ž ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ, Grafana ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ
์ด์„ธ์› Frontend UI/UX ๋””์ž์ธ, ๋”ฅํŽ˜์ดํฌ ๊ฐ์ง€ ๊ฒฝ๊ณ  ์˜ค๋ฒ„๋ ˆ์ด, ์˜์ƒํ†ตํ™” ํƒ์ง€ ์—ฐ๋™, ๊ธˆ์œต ์•ฑ ์ฐจ๋‹จ ์˜ค๋ฒ„๋ ˆ์ด
์ •๋‹ค์ง„ Frontend / AI Agora ์˜์ƒํ†ตํ™”(์š”์ฒญยท์ˆ˜๋ฝยท๊ฑฐ์ ˆ), NDK, ์˜จ๋””๋ฐ”์ด์Šค ๋”ฅํŽ˜์ดํฌ ํƒ์ง€, ์˜์ƒ ์ „์ฒ˜๋ฆฌ, ํƒ์ง€ ๊ฒฐ๊ณผ ์ง‘๊ณ„
์„ฑ์ฃผํฌ Frontend / AI ๋”ฅํŽ˜์ดํฌ ๊ฒฝ๊ณ ์ฐฝยทํƒ์ง€ ์˜์—ญ ํ‘œ์‹œ, NDK, ์˜จ๋””๋ฐ”์ด์Šค STT/LLM ๋Œ€ํ™” ๋ถ„์„, OpenCV ์–ผ๊ตด ํƒ์ง€, HTPโ†’GPUโ†’CPU ํด๋ฐฑ, QNN/NNAPI ์ตœ์ ํ™”, INT8 ์–‘์žํ™”, ํƒ์ง€ ๊ฒฐ๊ณผ ์„œ๋ฒ„ ์ „์†ก
์žฅ์œ ์ง„ AI NDK, ์˜จ๋””๋ฐ”์ด์Šค ๋”ฅํŽ˜์ดํฌ ํƒ์ง€, ๋ชจ๋ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ, CAM ๊ธฐ๋ฐ˜ ROI ์ถ”์ถœ, PyTorchโ†’ONNX ๋ณ€ํ™˜

About

๐Ÿ›ก๏ธAI ๊ธฐ๋ฐ˜ ์˜์ƒ ๋ฐ ์Œ์„ฑ ํ”ผ์‹ฑ(๋”ฅํŽ˜์ดํฌ, ์Šค๋ฏธ์‹ฑ) ํƒ์ง€ ๋ฐ ์˜ˆ๋ฐฉ ์†”๋ฃจ์…˜ | AI-based video and voice phishing (deepfake/smishing) detection and prevention system

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors