본문 바로가기

AI/Computer Vision

체류 시간 분석

728x90
반응형

 

실시간 영상 스트리밍에서 객체를 추적하고, 해당 객체가 특정 영역에 머무는 시간을 계산하는 방법과

특히, 정적 비디오 파일과 실시간 스트리밍의 차이를 강조하면서 실시간 영상 스트리밍에서 발생할 수 있는 문제를 해결하는 방법을 알아보자.

주요 내용:

  1. 정적 비디오 파일 처리 vs. 스트리밍 처리:
    • 정적 비디오 파일의 경우, 프레임률(FPS)이 일정하여, 단순히 프레임 수를 세고 FPS로 나누어 시간 계산을 할 수 있음. 하지만 스트리밍에서는 FPS가 일정하지 않기 때문에, 실시간으로 프레임을 처리하는 모델이 속도를 따라가지 못하면 문제가 발생할 수 있기도 함.
  2. 스트리밍에서의 문제점:
    • 실시간 스트리밍에서는 모델의 처리 속도보다 스트리밍의 FPS가 높을 수 있음. 이 경우, 모델이 프레임을 처리하는 속도가 스트리밍 속도보다 느리면, 프레임이 버퍼에 쌓여서 지연(latency)이 발생하고, 너무 많은 프레임이 쌓여 버퍼가 가득 차면 시스템이 멈추게 됨.
    • 이를 해결하려면 피드백 루프를 사용하여 모델의 처리 속도를 측정하고, 버퍼에 들어가는 프레임 수를 제한하는 방법을 사용해야함.
  3. 시간 계산 방법:
    • 실시간 스트리밍에서는 FPS 기반으로 시간을 계산하는 대신, 시스템 시간을 사용하여 객체가 특정 영역에 들어갈 때 시간을 기록하고, 각 프레임에서 그 시간을 빼서 체류 시간을 계산.
  4. 구현 방법:
    • FPS 기반 타이머: 비디오 파일에서 FPS가 일정하므로, 각 프레임의 번호를 세고 이를 FPS로 나누어 시간을 계산.
    • 시계 기반 타이머: 스트리밍에서는 각 객체가 영역에 들어갈 때 시스템 시간을 기록하고, 각 프레임에서 이 시간을 빼서 체류 시간을 계산.
  5. 프로젝트 설정 및 코드 작성:
    • 코드 구현 과정에서는 모델을 로드하고, 객체를 추적하여 결과를 화면에 표시합니다. 또한, 객체가 특정 영역에 들어왔을 때 그 객체의 시간을 계산하고 이를 화면에 표시하는 방법으로 처리.
    • 'supervision' 패키지와 'inference' 패키지를 사용하여 객체를 추적하고, 감지된 객체에 대해 라벨을 붙여 시각화.
  6. 영역 설정:
    • 사용자가 자신의 영역을 정의할 수 있도록 도와주는 도구를 제공하여, 특정 영역 내에서만 객체를 추적하고 해당 객체의 체류 시간을 계산.

 

실시간 비디오 스트리밍에서 객체 추적 및 시간 계산을 어떻게 효율적으로 처리할 수 있는지에 대해 확인해보자.

1. FPS 기반 타이머 (정적 비디오 파일 처리)

  • 정적 비디오 파일에서는 FPS(초당 프레임 수)를 기반으로 시간을 계산.
    각 프레임의 번호를 세고 FPS로 나누어 객체가 특정 구역에 머무는 시간을 측정. 이를 위해 supervision 패키지의 video info를 사용하여 FPS를 추출하고, 각 구역별로 타이머를 초기화.
  • 객체가 구역에 머무는 시간을 계산한 후, label annotator를 사용하여 결과를 화면에 표시.

2. 스트리밍 처리에서 FPS의 문제

  • 실시간 스트리밍에서는 FPS가 일정하지 않아서 FPS 기반 타이머를 사용할 수 없습니다. 영상 스트리밍에서는 프레임이 계속해서 들어오므로, FPS가 모델의 처리 속도보다 빠르면 지연(latency)이 발생. 이 문제를 해결하려면 피드백 루프를 추가해야 하며, 이를 통해 스트리밍 처리를 안정적으로 할 수 있음.

3. 스트리밍 처리 구현

  • 비디오 스트리밍을 처리하려면 정적 파일 대신 RTSP URL을 통해 실시간 스트리밍을 받아야 함. 이를 위해 get stream frame generator 함수를 사용하여 스트리밍에서 프레임을 받아 처리.
  • FPS 기반 타이머 대신, 시스템 시간을 사용하는 clock-based timer로 변경하여 실시간 스트리밍에서도 시간 계산을 할 수 있도록 함.

4. 스트리밍 테스트

  • RTSP 스트리밍을 실시간으로 테스트하려면 Docker와 같은 도구를 사용하여 비디오 파일을 로컬에서 RTSP 스트리밍으로 전환할 수 있음. VLC와 같은 소프트웨어를 통해 스트리밍이 잘 송출되는지 확인할 수 있다고 함.

5. 효율적인 스트리밍 처리 (Inference Pipeline 사용)

  • 스트리밍에서 발생하는 지연 문제를 해결하기 위해 Inference Pipeline을 사용.
    이 유틸리티는 여러 스레드를 사용하여 비디오 스트림을 효율적으로 처리하며, 프레임을 처리할 때마다 지정된 콜백 함수를 실행.
  • 이 방법을 사용하면 모델의 처리 속도가 스트리밍 FPS와 맞지 않더라도 안정적으로 스트리밍을 처리할 수 있음.

6. 코드 리팩토링

  • 기존의 코드를 리팩토링하여 Inference Pipeline을 활용한 비디오 스트리밍 처리로 전환하고. 이를 위해 CustomSync 클래스를 정의하고, on_prediction 메서드를 통해 각 프레임에 대해 추적 및 시간 계산을 처리.
  • 이 방식으로 여러 스레드를 활용하여 스트리밍을 처리하고, 지연을 최소화.

7. 중요 고려 사항

  • 카메라 설정: 카메라는 고정되어 있어야 하며, 줌 인/아웃이나 팬(회전)을 하면 구역이 정확하게 맞지 않게 되므로 카메라 각도를 잘 설정하는 것이 중요함.
  • 스트리밍 품질 문제: 실시간 스트리밍에서 발생하는 네트워크 불안정성이나 압축으로 인해 객체 감지의 품질이 떨어질 수 있기에. 이로 인해 객체 추적이 불안정해지고, 타이머가 리셋될 수 있음.
  • 테스트 환경: 모델을 실제 하드웨어와 환경에서 테스트하여 예상되는 조건에서 잘 작동하는지 확인하는 것이 중요함. 이를 통해 실제 운영 환경에서 모델이 객체를 정확하게 감지할 수 있도록 함.

8. 결론

  • 정적 비디오 파일 처리에서 실시간 스트리밍 처리로 전환하는 과정과, 스트리밍 처리에서 발생할 수 있는 지연 문제를 해결하는 방법을 확인해봤는데. Inference Pipeline을 활용하면 여러 스레드를 사용하여 효율적으로 스트리밍을 처리할 수 있으며, 이를 통해 안정적인 객체 추적과 시간 계산이 가능함.
728x90
반응형

'AI > Computer Vision' 카테고리의 다른 글

colab javascript  (1) 2025.04.22
numpy clip  (0) 2025.04.06
torch.cat  (0) 2025.04.06
구글 PailGemma  (0) 2025.03.25
YOLO-World: Real-Time, Zero-Shot Objeddt Detecdtion Explained  (0) 2025.03.24