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
'Deep Learning & Machine Learning > MediaPipe' 카테고리의 다른 글
MediaPipe로 구현한 손으로 그림 그리기 (0) | 2023.10.18 |
---|---|
가위바위보를 인식하는 Mediapipe hand Python 예제 (0) | 2023.10.17 |
mediapipe로 만든 핸드 마우스 (0) | 2023.10.16 |
Mediapipe의 Hello_World 예제 사용 방법 (0) | 2021.07.24 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!