반응형

Ubuntu 20.04에 MediaPipe를 설치하여 간단한 예제를 실행시켜 보는 과정을 다루고 있습니다. 

Ubuntu 18.04도 같은 방식으로 진행하면 됩니다. 



MediaPipe가 무엇인지 궁금하시면 다음 두  링크를 방문해보세요..

 

https://github.com/google/mediapipe

 

https://google.github.io/mediapipe/ 



다음과 같은 것들을 할 수 있다고 합니다. . 이제 겨우  설치만 해봐서 이후 단계는 물어보셔도 아직 모릅니다 ^^;

Android, PC, Google Coral, Web을 위한 예제가 준비되어 있습니다.



Face Detection 

Multi-hand Tracking

Hand Tracking 

Hair Segmentation 

Object Detection

Object Detection and Tracking

Objectron: 3D Object Detection and Tracking

AutoFlip




최초작성 2020. 3. 29

              2020. 4. 2    hand tracking 예제 실행방법 추가 

              2020. 5. 8    bazel 2.0으로 변경된 점 반영

              2020. 11. 30 Ubuntu 20.04에서 진행 

              2021. 7. 15  Ubuntu 20.04에서 진행 

                                  Bazel 3.7.2로 변경

                                  opencv_linux.BUILD에서 절대경로 대신 상대 경로로 변경




0. 진행하기전에 우분투의 패키지를 업그레이드 해주었습니다. 반드시 해주세요.

꼭 해줘야 하는 작업은 아닌듯하지만 저는 습관적으로 해주는 편입니다. 

 

webnautes@webnautes-PC:~$ sudo apt-get update

webnautes@webnautes-PC:~$ sudo apt-get upgrade




1. 깃허브에서 MediaPipe를 다운로드합니다. 

 

webnautes@webnautes-PC:~$ pwd

/home/webnautes



webnautes@webnautes-PC:~$ git clone https://github.com/google/mediapipe.git




2. Bazel을 설치합니다. 2.x 버전은 아직 지원하지 않기 때문에  1.0.0 ~ 1.2.1 사이의 버전을 설치해야 한다고 합니다. 

   2.0 이상의 버전을  3.4 3.7.2 버전을 설치하는 것으로 변경되었습니다.  

 

2-1. 우선 C++ 컴파일러와  unzip, zip를 설치합니다. 이미 설치가 되있을 수도 있습니다. 

webnautes@webnautes-PC:~$ sudo apt install g++ unzip zip




2-2. jdk를 설치합니다. 

Ubuntu 16.04라면 OpenJDK 8을 설치하고 Ubuntu 18.04라면 OpenJDK 11을 설치합니다. 

 

sudo apt-get install openjdk-8-jdk

sudo apt-get install openjdk-11-jdk



Ubuntu 20.04를 사용중이라 OpenJDK 11을 설치했습니다. 

webnautes@webnautes-PC:~$ sudo apt-get install openjdk-11-jdk




2-3. bazel 3.4 설치 파일을 다운로드 받아 설치를 진행합니다.

 

webnautes@webnautes-PC:~$ wget https://github.com/bazelbuild/bazel/releases/download/3.7.2/bazel-3.7.2-installer-linux-x86_64.sh

 

webnautes@webnautes-PC:~$ chmod +x bazel-3.7.2-installer-linux-x86_64.sh

 

webnautes@webnautes-PC:~$ ./bazel-3.7.2-installer-linux-x86_64.sh  --user




2-4. ~/.bashrc 파일 끝에 다음처럼 경로를 추가해줍니다. 

export PATH="$PATH:$HOME/bin"

 

편집기를 열어 경로를 추가하고 환경에 반영해줍니다. 

webnautes@webnautes-PC:~$ nano ~/.bashrc 

webnautes@webnautes-PC:~$ source ~/.bashrc




3-1.  다음 포스트를 참고하여 OpenCV를 설치합니다.

 

Ubuntu 18.04에 OpenCV 4.2.0 설치하는 방법

https://webnautes.tistory.com/1186 

 

Ubuntu 20.04에 OpenCV 4.4.0 설치하는 방법

https://webnautes.tistory.com/1433 



FFmpeg를 설치합니다.

$ sudo apt install ffmpeg 



3-2. 깃허브에서 다운로드 받았던 mediapipe 디렉토리로 이동하여 

 

webnautes@webnautes-PC:~$ cd mediapipe

 

webnautes@webnautes-PC:~/mediapipe$ pwd

/home/webnautes/mediapipe




WORKSPACE 파일에서 다음 부분을 찾아 수정합니다. 

여기에서 라이브러리가 있는 루트 디렉토리를 지정하고 아래 cc_library에서 나머지 경로를 지정합니다. 

FFmpeg는 테스트 동작을 못해봤습니다.

 

webnautes@webnautesPC:~/mediapipe$ nano WORKSPACE

 

new_local_repository(

    name = "linux_opencv",

    build_file = "@//third_party:opencv_linux.BUILD",

    path = "/usr/local",

)

 

new_local_repository(

    name = "linux_ffmpeg",

    build_file = "@//third_party:ffmpeg_linux.BUILD",

    path = "/usr",

)



opencv_linux.BUILD 파일을 수정합니다. 

현재 디렉토리를 기준으로 다음 위치에 있습니다.

 

webnautes@webnautes-PC:~/mediapipe$ find . | grep opencv_linux.BUILD

./third_party/opencv_linux.BUILD



webnautes@webnautesPC:~/mediapipe$ nano ./third_party/opencv_linux.BUILD  



cc_library(

    name = "opencv",

    srcs = glob(

        [

            "lib/libopencv_core.so",

            "lib/libopencv_highgui.so",

            "lib/libopencv_imgcodecs.so",

            "lib/libopencv_imgproc.so",

            "lib/libopencv_video.so",

            "lib/libopencv_videoio.so",

        ],

    ),

    hdrs = glob([

        "include/opencv4/opencv2/**/*.h*",

    ]),

    includes = [

        "include/opencv4/",

    ],

    linkstatic = 1,

    visibility = ["//visibility:public"],

)

 

ffmpeg_linux.BUILD파일을 수정합니다. 

현재 디렉토리를 기준으로 다음 위치에 있습니다.

아직 테스트 해보지 않은 부분이라 동작시키려면 수정이 필요할 수 있습니다. 

 

webnautes@webnautes-PC:~/mediapipe$ find . | grep ffmpeg_linux.BUILD

./third_party/ffmpeg_linux.BUILD

 

webnautes@webnautesPC:~/mediapipe$ nano ./third_party/ffmpeg_linux.BUILD 

 

cc_library(

    name = "libffmpeg",

    srcs = glob(

        [

            "lib/x86_64-linux-gnu/libav*.so",

        ],

    ),

    hdrs = glob(["include/x86_64-linux-gnu/libav*/*.h"]),

    includes = ["include"],

    linkopts = [

        "-lavcodec",

        "-lavformat",

        "-lavutil",

    ],

    linkstatic = 1,

    visibility = ["//visibility:public"],

)




4. GPU 가속 관련 옵션 변경은 다음 링크의 4번을 참고하세요.

https://google.github.io/mediapipe/getting_started/install.html#installing-on-debian-and-ubuntu 

 

skip 합니다.




5. Hello World 예제를 실행시켜 봅니다. 

 

webnautes@webnautes-PC:~/mediapipe$ export GLOG_logtostderr=1



CPU만 사용해보았습니다.

webnautes@webnautes-PC:~/mediapipe$ bazel run --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hello_world:hello_world



GPU를 사용하려면 다음 링크의 5번을 참고하세요. 

https://google.github.io/mediapipe/getting_started/install.html#installing-on-debian-and-ubuntu 



잠시 기다리면 다음과 같은 결과를 볼 수 있습니다. 

처음 실행시에만 다운로드 및 빌드(?) 작업을 해서 시간이 걸리고 그 다음부턴 바로 실행이 됩니다. 

 

INFO: Analyzed target //mediapipe/examples/desktop/hello_world:hello_world (0 packages loaded, 0 targets configured).

INFO: Found 1 target...

Target //mediapipe/examples/desktop/hello_world:hello_world up-to-date:

  bazel-bin/mediapipe/examples/desktop/hello_world/hello_world

INFO: Elapsed time: 0.143s, Critical Path: 0.00s

INFO: 0 processes.

INFO: Build completed successfully, 1 total action

INFO: Running command line: bazel-bin/mediapipe/examples/desktop/hello_world/helINFO: Build completed successfully, 1 total action

I20201130 23:07:45.202827 26521 hello_world.cc:56] Hello World!

I20201130 23:07:45.202886 26521 hello_world.cc:56] Hello World!

I20201130 23:07:45.202899 26521 hello_world.cc:56] Hello World!

I20201130 23:07:45.202908 26521 hello_world.cc:56] Hello World!

I20201130 23:07:45.202956 26521 hello_world.cc:56] Hello World!

I20201130 23:07:45.202993 26521 hello_world.cc:56] Hello World!

I20201130 23:07:45.203039 26521 hello_world.cc:56] Hello World!

I20201130 23:07:45.203091 26521 hello_world.cc:56] Hello World!

I20201130 23:07:45.203135 26521 hello_world.cc:56] Hello World!

I20201130 23:07:45.203176 26521 hello_world.cc:56] Hello World!





6. 핸드 트래킹 예제를 컴파일하여 실행시켜봅니다. 

 

webnautes@webnautes-PC:~$ cd mediapipe/

 

webnautes@webnautes-PC:~/mediapipe$ pwd

/home/webnautes/mediapipe

 

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

 

webnautes@webnautes-PC:~/mediapipe$ 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




조명이 어두운 편인데도 손이 잘 인식이 되네요.

이제 어떤 방식으로 MediaPipe를 사용하는지 살펴봐야 겠습니다. 

 

2020. 11. 30 아래 스크린샷에 비해 개선된 결과를 보여줍니다. 오른손 왼손을 구별하고 손가락 스켈레톤을 더 정확히 보여주는 듯합니다. 

아쉽게도 스크린샷은 추후 업데이트시 올리도록 하겠습니다. 

 



 

 

관련 포스트

 

Mediapipe의 Hello_World 예제 사용 방법

https://webnautes.tistory.com/1501

 

 

 

참고

https://google.github.io/mediapipe/getting_started/install.html#installing-on-debian-and-ubuntu 

https://docs.bazel.build/versions/master/install-ubuntu.html 







반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts