Concentration Monitor 상태 판단 로직 개선
📌 Today I Learned
AI 집중도 분석 모듈을 모듈형 구조로 리팩토링하고,
핸드폰 사용을 졸음으로 오인하던 문제를 로그 기반으로 해결하였다.
1️⃣ 아키텍처 리팩토링
기존 run.py 단일 파일 구조를 기능별로 분리하였다.
core/ # 설정, 상태 Enum detectors/ # 자리비움 / 졸음 / 핸드폰 감지 fusion/ # 상태 통합 판단 scoring/ # 집중도 점수 계산 run.py # 메인 파이프라인
Detector: 신호 생성만 담당
Fusion: 최종 상태 결정
Scoring: 상태 지속 시간 기반 점수 계산
2️⃣ 문제 상황
핸드폰을 보고 있음에도 DROWSY로 판단되는 현상 발생
상태가 프레임 단위로 튀는 문제(Flickering)
3️⃣ 원인 분석
Pitch 임계값 과도
기존: 0.60
실제 핸드폰 사용 시: 0.40~0.50
상태 우선순위 문제
졸음 판단이 핸드폰 판단보다 먼저 확정됨
4️⃣ 해결 방법 🔧 임계값 조정
Pitch Threshold: 0.60 → 0.40
YOLO phone_conf >= 0.4 시 즉시 Phone 의심 상태
🔁 Fusion 우선순위 변경 Before: ABSENT > DROWSY > PHONE After : ABSENT > PHONE > DROWSY
5️⃣ 결과
핸드폰 감지 시 즉시 PHONE 상태로 안정 전환
DROWSY로 오인되는 현상 제거
로그 기반 검증 가능 구조 확보
✍️ 정리
모델 성능보다 판단 로직과 우선순위 설계가 집중도 인식 정확도에 더 큰 영향을 준다는 점을 확인하였다.