AI 객체 탐지율 향상 및 스트리밍 환경 개선 업데이트
최근 AI 모델이 객체를 제대로 탐지하지 못해 중요 알림이 오지 않는 이슈가 발생함. 이를 해결하기 위해 AI 워커(AI Worker) 파이프라인(YOLO Pose -> Supervision ByteTrack -> LSTM) 전반을 점검하고, 추적이 끊기거나 행동 인식이 안 되는 원인을 세밀하게 분석할 수 있는 진단 시스템과 복구 로직을 도입함.
더불어, 서비스의 전반적인 안정성을 확보하기 위해 내부 논의를 거쳐 스트리밍 방식을 기존의 MJPEG 기반으로 원복하기로 결정함. 이에 따른 프론트엔드 및 UI 개선 작업도 함께 진행됨.
1. AI 포즈 트래킹 진단 및 복구 로직 도입
기존에는 객체를 놓치거나 트래킹 ID가 변경되면 즉각적으로 행동 인식 흐름이 끊기는 단점이 존재했음. 이를 보완하기 위해 시스템을 진단하고 유연하게 대처하는 기능을 추가함.
포즈 트래킹 진단(Pose Tracking Diagnostics) 시스템 AI 워커에서 발생하는 문제 원인을 5가지 주요 상태로 세분화하여 파악함.
- Detector Missing: YOLO 모델이 사람 자체를 감지하지 못한 상태.
- Low Pose Quality: 사람은 감지했으나, 조명이나 해상도 문제로 키포인트(관절) 신뢰도가 낮아진 상태.
- Tracker Association Issue: 정상적인 포즈 감지 후에도 ByteTrack이 기존 트랙과 연결하지 못하고 끊어지는 현상.
- Frequent Track ID Switch: 트래킹은 유지되지만 ID가 잦게 변경되어 연속성이 훼손되는 문제.
- Sequence Buffer Issue: 트래킹 자체는 정상이지만, LSTM 행동 인식을 위한 연속된 프레임 데이터(시퀀스)가 제때 완성되지 않는 문제.
새로운 트래킹 복구 로직 (Grace Period & Relink) 트래킹이 일시적으로 끊기거나 ID가 변경되더라도 유연하게 이어붙일 수 있는 환경변수 기반의 로직을 추가함.
- Grace Period: 일시적으로 트래킹이 사라져도 LSTM 시퀀스 버퍼를 즉시 삭제하지 않고 지정된 시간 동안 대기하며 흐름을 유지함.
- Track Relink: 트래킹 ID가 새롭게 바뀌어 들어오더라도, 바운딩 박스의 겹침 정도(IoU)나 중심점 거리가 이전 데이터와 가깝다면 같은 객체로 간주하여 시퀀스를 재연결함.
세밀한 디버깅 및 모니터링 기능
- 운영 환경의 부하를 막기 위해 기본적으로는 비활성화(Opt-in)되어 있으나, 필요시 상세 로그 출력, 바운딩 박스 이미지 주기적 저장, 프레임 단위 진단 기록(JSONL) 추출 등이 가능해짐.
- 추가된 파이썬 요약 스크립트를 통해 카메라 및 스트림별 요약 리포트를 간편하게 확인할 수 있음.
2. MJPEG 스트리밍 원복 및 UI/UX 개선 사항
AI 탐지 문제를 해결한 이후, 시스템의 범용성과 영상 스트리밍 안정성을 위해 기존에 사용하던 MJPEG 스트리밍 방식을 다시 도입함. 이와 함께 사용자 화면에서 발생하던 불편 사항들을 대폭 개선함.
MJPEG 스트리밍 방식 원상복구
- 저사양 환경에서도 안정적인 영상 출력을 지원했던 MJPEG 스트리밍 관련 설정(환경변수 및 타입 설정 파일 등)을 프로젝트에 다시 복구함.
- 프론트엔드 카메라 정보 처리 단에서도 MJPEG 주소 정보를 정상적으로 라우팅하도록 롤백 및 안정화함.
화면 오버레이 라벨 출력 고도화
- 웹 화면에 인식된 객체의 바운딩 박스를 그릴 때, 시스템의 기본 추적 ID와 백엔드에서 전달하는 표시 라벨(displayLabel)이 겹쳐서 지저분하게 두 번 출력되는 현상이 있었음.
- 이를 해결하기 위해 캔버스 상에서 라벨 데이터를 스마트하게 병합하여 깔끔하게 출력하도록 로직을 개선함.
연결 불안정 카메라의 영상 노출 유지
- 기존 시스템에서는 카메라 서버의 상태가 '에러'나 '연결 끊김'으로 확인되면 즉각 UI에서 오프라인 처리하여 영상을 검게 가리고 "No Signal"을 띄웠음.
- 이제는 이러한 에러 상태들을 '연결 중(connecting)'으로 취급하도록 변경함.
- 이를 통해 AI 워커의 상태가 일시적으로 불안정하더라도, 사용자는 실제 현장 영상 스트림(WebRTC/HLS)을 화면 끊김 없이 계속 확인할 수 있음 (사용자가 의도적으로 비활성화한 경우에만 영상이 차단됨).
비디오 영상 클립 예외 처리(Fallback) 추가
- 알림 이벤트 발생 시 비디오 클립 URL 데이터가 비어있는 경우를 대비한 방어 로직을 추가함.
- 비디오 URL이 없더라도, 스냅샷 주소에 .mp4 확장자가 포함되어 있거나 경로상에 클립 관련 디렉토리가 명시되어 있다면 해당 주소를 비디오 클립으로 대체하여 재생하도록 수정함.
'SK쉴더스 루키즈[개발 5기]' 카테고리의 다른 글
| [SK쉴더스 루키즈] 5회차 멘토링 (7/17) (0) | 2026.07.20 |
|---|---|
| [SK쉴더스 루키즈] 3회차 멘토링 (6/27) (0) | 2026.06.27 |
| [SK쉴더스 루키즈] 2회차 멘토링 (6/13) (0) | 2026.06.16 |
| [SK쉴더스 루키즈] 1회차 멘토링 (5/23) (0) | 2026.05.25 |