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로 오인되는 현상 제거

로그 기반 검증 가능 구조 확보

✍️ 정리

모델 성능보다 판단 로직과 우선순위 설계가 집중도 인식 정확도에 더 큰 영향을 준다는 점을 확인하였다.

results matching ""

    No results matching ""