카메라 기반 낙상/화장실 감지 + 건강 데이터 예측을 하나의 서버에서 처리합니다.
| 파일 | 설명 |
|---|---|
server.py |
메인 실행 파일 — 카메라 스트리밍, 낙상/화장실 감지, 건강 예측 API 통합 |
detector.py |
YOLOv8-pose 기반 사람 감지 |
zone_monitor.py |
낙상 감지 / 화장실 장시간 미복귀 감지 로직 |
camera_config.py |
포트, 백엔드 URL, 노인 ID 등 설정값 |
yolov8n-pose.pt |
YOLO 포즈 추정 모델 파일 |
xgboost_emergency_model.pkl |
건강 데이터 응급 예측 모델 |
requirements.txt |
의존성 패키지 목록 |
pip install -r requirements.txtcd AI
python server.py노인 ID를 바꾸려면 환경변수로 지정:
ELDERLY_ID=2 python server.pypython server.py 실행
│
├─ XGBoost 모델 로드
├─ Flask 서버 시작 (포트 5000) ← 앱이 바로 연결 가능
├─ 전체 화면을 기본 구역으로 카메라 시작
└─ 백엔드에 저장된 구역이 있으면 자동으로 불러옴
앱에서 서버 주소(http://노트북IP:5000)를 입력하면 영상이 바로 표시됩니다.
구역(거실/화장실)은 앱 설정 탭 → 구간 설정하기 에서 드래그로 설정합니다.
| 메서드 | 경로 | 설명 |
|---|---|---|
GET |
/video/feed |
MJPEG 실시간 스트리밍 |
GET |
/snapshot |
현재 프레임 이미지(JPEG) 1장 |
GET |
/api/status |
낙상/화장실 감지 상태 조회 |
POST |
/api/status/reset |
감지 상태 초기화 |
POST |
/update_config |
앱에서 구역 좌표 전송 및 즉시 적용 |
POST |
/ai/predict |
건강 데이터 응급 여부 예측 |
앱에서 드래그로 거실/화장실 구역을 설정하면 이 엔드포인트로 전송됩니다.
좌표는 이미지 크기 대비 비율(0.0 ~ 1.0) 로 전달합니다.
{
"elderlyId": 1,
"bX": 0.1, "bY": 0.0, "bW": 0.6, "bH": 1.0,
"cX": 0.7, "cY": 0.1, "cW": 0.3, "bH": 0.8
}웨어러블 생체 데이터를 받아 XGBoost 모델로 응급 여부를 판단하고,
이상 시 GPT-3.5가 사회복지사용 설명 문구를 생성합니다.
요청 예시:
{
"elderlyId": 1,
"timestamp": "2025-05-14 23:59",
"Heartrate": 110,
"Breathrate": 22,
"SPO2": 93,
"Walking_steps": 1200,
"Caloricexpenditure": 80
}응답 예시:
{
"elderlyId": 1,
"predictionLabel": "Emergency (비정상)",
"explanation": "심박수와 호흡수가 정상 범위를 초과했습니다. ..."
}GPT 기능을 사용하려면 환경변수
OPENAI_API_KEY설정이 필요합니다.
위험 감지 시 자동으로 POST /api/alert/emergency 로 전송합니다.
{
"elderlyId": 1,
"predictionLabel": "Emergency (비정상) - 낙상",
"explanation": "거실에서 낙상이 감지되었습니다. 즉시 확인이 필요합니다."
}| 변수 | 기본값 | 설명 |
|---|---|---|
ELDERLY_ID |
1 |
모니터링할 노인 DB ID |
BACKEND_URL |
http://localhost:8080 |
백엔드 서버 주소 |
STREAM_PORT |
5000 |
Flask 서버 포트 |
OPENAI_API_KEY |
없음 | GPT 설명 생성용 OpenAI 키 |
ipconfig getifaddr en0앱 설정에 http://[위 IP]:5000 형식으로 입력하세요.