[ToyProjects] mediapipe의 Box Tracking 사용기 (ft. 구글은 ㅅㅂ 위대하다)

2020. 11. 14. 16:29Computer Vision/Toy projects(심심풀이)

구글의 Mediapipe를 사용해본다. 

 

Object_detection + Tracking 조합을 많이 사용하지만 사용중 박스 인식의 떨림(jitter)는 언제나 거슬린다. 

 

구글의 Mediapipe는 CPU를 사용함에도 매우 안정적으로 바운딩 박스를 인식하고 추적한다. 

얼마나 좋은지 한 번 사용해보자. 

 


MediaPipe 설치하기:

  • 정식 홈피 설명서(1). 
  • 홈피 설명을 참고해서 mediapipe 깃허브 클론. 

 

 

Bazel 설치하기

  • 정식 홈피의 설명서 (1).
  • 사용자들의 사용 후기 같은 설명서 (1)(2). 

 

 

MediaPipe Box Tracking 실행하기: 

  • Box Tracking은 아직 Python 실행을 지원하지 않는다. 
  • 이번 포스트에서는 Desktop 버전을 실행해본다 → [ref]

 

 

Object Detection and Tracking 

매 프레임마다 Object detection을 적용하는 것 보다 둘을 섞어서 사용하는게 더 안정적이다 [ref3]

  • 먼저 Object detection 예시를 빌드한다 → 빌드 방법은 홈피 내용 참고.
  • 같은 방식으로 Box Tracking 예시도 빌드한다 → 해당 포스트에는 설명이 없다. Obejct detection에서 사용한 방식대로 하되 경로만 바꿔서 빌드한다. 

(좌)Object Detection Per Frame , (우)Object Detection and Tracking

 

 

Running on CPU

Desktop 실행 예시를 따라한다.

  • 공식 홈피의 예시hand_tracking 내용이 나와있다. 
  • 예시 명령어를 참고해서 위에서 빌드한 examples 의 경로만 수정해서 사용해본다. 

해당 경로를 내가 사용하고 싶은 examples의 경로로 수정.

  • bazel-bin/mediapipe/examples/desktop/object_tracking/object_tracking_cpu 
  • media/graphs/tracking/object_detection_tracking_desktop_live.pbtxt 
~$ GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/object_tracking/object_tracking_cpu \
--calculator_graph_config_file=mediapipe/graphs/tracking/object_detection_tracking_desktop_live.pbtxt

Conclusion 

물체를 인식하는 속도, 화면 전환에 대한 반응 속도가 매우 만족스럽다. 

 

안타까운 부분: 

  • 아직 bazel 사용법을 제대로 모른다. 
  • Mediapipe에 인식된 박스 정보(bbox data)를 Python에서 사용하려면 어떻게 해야할까?
  • Object detection + Tracking 조합이 좋은건 알겠는데 → Object detection은 몇 프레임마다 진행하는게 최적일까? 

여기 Renderer의 역할은 뭐지?

 

 

추후에 좀더 기술적인(technical)한 부분을 공부해서 정리하자. 


Reference 

[1] google, mediapipe, github / 정식 깃허브 

[2] MediaPipe Box Tracking, MediaPipe / 이번 포스트에서 참고하는 자료 

[3] Object Detection and Tracking using MediaPipe, Google Developers / Object detection & Tracking을 같이 쓰는게 더 안정적으로 박스를 추적할 수 있다.