IT공부

[Mediapipe] Multi-Hand Tracking CPU/GPU 실행

서용이 2020. 9. 15. 18:05
반응형

https://ahnsun98.tistory.com/6

 

[Mediapipe] 라즈베리파이 4B에서의 Mediapipe 설치 및 실행

0. Mediapipe 란? Mediapipe는 파이프라인을 구축하여 비디오 및 오디오와 같은 다양한 형식의 인지 데이터를 처리할 수 있는 오픈 소스 크로스 플랫폼 프레임 워크입니다. Mediapipe의 Hand Tracking에서는 �

ahnsun98.tistory.com

이전 포스팅에서 라즈베리파이에서의 Mediapipe 설치에 대해 알아보았습니다.

이번 포스팅에서는 다중 손 추적(Multi-Hand Tracking)을 수행해보도록 하겠습니다.

 

먼저 저번 포스팅과 같이 mediapipe/examples/desktop/multi_hand_tracking/BUILD 에

아래와 같은 cc_binary를 추가합니다.

 

linkopts = [
    "-latomic",
    "-lopencv_core",
    "-lopencv_highgui",
    "-lopencv_imgproc",
    "-lopencv_videoio"
],

 

추가한 뒤에 카메라를 연결하고 실행합니다.

만약 카메라가 없는 경우 다음과 같은 실행 옵션을 추가합니다.

 

bazel-bin/mediapipe/examples/desktop/multi_hand_tracking/multi_hand_tracking_gpu \
  --calculator_graph_config_file=mediapipe/graphs/hand_tracking/multi_hand_tracking_desktop_live.pbtxt \
  --input_video_path="video.mp4" \
  --output_video_path="video_gpu.mp4"

 

CPU버전은 다음 명령을 사용하여 빌드할 수 있습니다.

 

$ cd ~/mediapipe

$ bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 \ mediapipe/examples/desktop/multi_hand_tracking:multi_hand_tracking_gpu

$ export GLOG_logtostderr=1
$ bazel-bin/mediapipe/examples/desktop/multi_hand_tracking/multi_hand_tracking_gpu \ --calculator_graph_config_file=mediapipe/graphs/hand_tracking/multi_hand_tracking_desktop_live.pbtxt

 

GPU버전은 다음 명령을 사용하여 빌드할 수 있습니다.

 

$ cd ~/mediapipe

$ bazel build -c opt --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 \ mediapipe/examples/desktop/multi_hand_tracking:multi_hand_tracking_gpu

$ export GLOG_logtostderr=1
$ bazel-bin/mediapipe/examples/desktop/multi_hand_tracking/multi_hand_tracking_gpu \ --calculator_graph_config_file=mediapipe/graphs/hand_tracking/multi_hand_tracking_desktop_live.pbtxt

 

하지만 저는 양손을 추적한 랜드마크 값을 이용하여 수화 번역 프로그램을 만들어야 하므로

mediapipe/examples/desktop 에 위치한 아래의 파일들을 다음과 같이 수정해주었습니다.

파일이름을 클릭하면 해당 코드의 수정본이 나옵니다.

(아래 과정들은 랜드마크를 이용할 시에 수정해주시면 됩니다.)

demo_run_graph_main_gpu.cc

end_loop_calculator.h

landmarks_to_render_data_calculator.cc

그리고 mediapipe/examples/desktop/BUILD 의 cc_binary를 다음과 같이 수정합니다.

 

cc_library(
	name = "demo_run_graph_main_gpu",
    srcs = ["demo_run_graph_main_gpu.cc"],
    deps = [ 
    	"//mediapipe/framework:calculator_framework",
    	"//mediapipe/framework/formats:image_frame",
        "//mediapipe/framework/formats:image_frame_opencv",
        "//mediapipe/framework/port:commandlineflags",
        "//mediapipe/framework/port:file_helpers",
        "//mediapipe/framework/port:opencv_highgui",
        "//mediapipe/framework/port:opencv_imgproc",
        "//mediapipe/framework/port:opencv_video",
        "//mediapipe/framework/port:parse_text_proto",
        "//mediapipe/framework/port:status",
        "//mediapipe/gpu:gl_calculator_helper",
        "//mediapipe/gpu:gpu_buffer",
        "//mediapipe/gpu:gpu_shared_data_internal",
        "//mediapipe/framework/formats:landmark_cc_proto",
    ],
)

 

수화 번역을 위해 다운 받은 AI Hub에서의 Open 데이터인 수화비디오 데이터를 이용해서

GPU로 실행시킨 결과 아래와 같이 잘 동작하는 것을 확인할 수 있었습니다.

( AI Hub 사이트 사용법에 대해서는 아래의 포스팅을 참고해주세요. )

https://ahnsun98.tistory.com/9

 

[Tip] 오픈 데이터셋 사이트 AI Hub - 데이터 다운 방법

https://aihub.or.kr/ 홈 | AI Hub AI 허브 공개 데이터를 활용해 개발된 서비스를 체험하고, 서비스 아이디어 실현에 참고하세요. aihub.or.kr 이번 포스팅은 오픈 데이터셋 사이트인 AI Hub에 대해 알아보고

ahnsun98.tistory.com

 

랜드마크를 이용 시, build.py 를 사용하면

다음과 같이 동영상 frame 단위의 랜드마크 좌표를 txt파일로 얻어낼 수 있습니다.

landmark.txt
0.02MB

 

 

이상으로 multi-hand tracking 실행 포스팅을 마치겠습니다.

다음 포스팅부터는 mediapipe와 수화촬영동영상 데이터셋을 이용하여

수화번역프로그램을 만드는 과정에 대해 포스팅하겠습니다.

반응형