[Mediapipe] Multi-Hand Tracking CPU/GPU 실행
https://ahnsun98.tistory.com/6
이전 포스팅에서 라즈베리파이에서의 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 에 위치한 아래의 파일들을 다음과 같이 수정해주었습니다.
파일이름을 클릭하면 해당 코드의 수정본이 나옵니다.
(아래 과정들은 랜드마크를 이용할 시에 수정해주시면 됩니다.)
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
랜드마크를 이용 시, build.py 를 사용하면
다음과 같이 동영상 frame 단위의 랜드마크 좌표를 txt파일로 얻어낼 수 있습니다.
이상으로 multi-hand tracking 실행 포스팅을 마치겠습니다.
다음 포스팅부터는 mediapipe와 수화촬영동영상 데이터셋을 이용하여
수화번역프로그램을 만드는 과정에 대해 포스팅하겠습니다.