MediaPipe 파헤치기 (1)
포스트
취소

MediaPipe 파헤치기 (1)

MediaPipe를 사용해보기 위해서 분석을 시작한 글입니다.

정확하지 않을 수 있으며 처음이다보니 틀린 부분이 많이 있을 수 있습니다. 잘못된 내용이나 사실과 다르게 작성된 내용은 댓글 남겨주시면 바로 수정하도록 하겠습니다!

먼저 MediaPipe는 딥러닝 모델을 여러 환경 (모바일, 웹, 데스크탑 등등)에서 사용할 수 있도록 구글에서 출시한 프레임워크 입니다. 여러 모델을 제공하고 있습니다.

자세한 내용은 공식 홈페이지를 참고 해주세요. (작성일 기준 알파버전 이라고 합니다.)

python이나 javascript 같은경우는 API를 제공하지만 빠른 속도를 위해서 C++을 사용하는 경우 직접 빌드해서 사용해야합니다.

Bazel은 오픈소스 빌드 툴입니다. mediaPipe는 오픈 소스이며 Bazel을 통해 C++ 코드를 빌드 하도록 되어있습니다. bazel에 대한 자세한 내용은 사이트를 참고해주세요.

Bazel build

Bazel로 빌드하기 위해서는 2가지 기본 요소가 필요합니다. 첫번째는 WORKSPACE 파일, 두번째는 BUILD 파일 입니다.

MediaPipe의 프로젝트를 보면 이 두가지 파일이 모두 있는것을 볼 수 있습니다.

이제 bazel을 이용해서 Mediapipe 예제를 동작시켜 보겠습니다. 우선 Dockerfile를 이용해서 이미지를 만들고, container를 실행 시킨 상황을 가정하겠습니다.

mediapipe 폴더로 들어가면 WORKSPACE와 BUILD 파일이 보입니다. 해당 루트에서 아래와 같이 코드를 빌드해 줍니다.

1
$ bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hand_tracking:hand_tracking_cpu

이제 프로젝트 루트를 보면 아래와 같이 심볼릭 링크된 bazel-bin 폴더를 볼 수 있습니다.
Alt text

빌드된 프로그램을 실행시키기 위해서는 해당 폴더에 위치한 빌드된 파일을 실행 시켜줘야 합니다. 실행은 아래의 코드로 진행합니다.

1
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/hand_tracking/hand_tracking_cpu --calculator_graph_config_file=mediapipe/graphs/hand_tracking/hand_tracking_desktop_live.pbtxt

여기서 GLOG_logtostderr=1에 대해 알아봅시다. GLOG는 Google Logging Library(glog) 에서 사용되는 접두어로써 어플리케이션의 로그를 수행하는 라이브러리 입니다.

logtostderr은 로그를 기본 출력 장치로 출력하겠다는 의미로 화면으로 로그가 출력되게 됩니다.

이렇게 하면 빌드된 파일을 실행할 수 있습니다. 하지만 docker를 사용하셨다면 아래와 같은 오류를 확인 할 수 있습니다.

Alt text

capture.isOpened()에서 오류가 납니다. container에서 실제 연결된 웹캠에 접근을 못해서 발생하는 이슈입니다. ​

container와 로컬의 캠을 연결 시켜주는 방법도 있지만 웹캠이 아닌 실제 사진이나 영상을 가지고 테스트 해보기 위해서 빌드된 코드를 살펴봅니다.

다음 포스팅에서 빌드에 사용된 그래프와 코드를 살펴보고 사진이나 영상데이터로 추론이 가능하도록 수정해 보겠습니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

원격서버의 container로 ssh 접속하기

MediaPipe 파헤치기 (2)