MediaPipe 란?
개발 환경
ubuntu : 18.04
python : 3.7.12
opencv : 4.6.0
mediapipe : 0.8.3
ubuntu에 미디어파이프 환경 build 하기
1. ubuntu package upgrade
~$ sudo apt-get update
~$ sudo apt-get upgrade
2. MediaPipe git download
~$ git clone https://github.com/google/mediapipe.git
~$ git clone https://github.com/google/mediapipe.git
mediapipe git을 통째로 가져온다.
3. 컴파일러 설치
- c++ 컴파일러 설치하기
sudo apt install g++ unzip zip
- jdk 설치
ubuntu 가 16.04 버전이라면 openJDK 8을 설치하고
ubuntu 가 18.04 버전이라면 openJDK 11을 설치한다.
#ubuntu version - 16.04일 때
sudo apt-get install openjdk-8-jdk
#ubuntu version - 18.04일 때
sudo apt-get install openjdk-11-jdk
4. Bazel 설치
- bazel 5.2.0 설치
# bazel 설치파일 다운로드 하기
wget https://github.com/bazelbuild/bazel/releases/download/5.2.0/bazel-5.2.0-installer-linux-x86_64.sh
chmod +x bazel-5.2.0-installer-linux-x86_64.sh
./bazel-5.2.0-installer-linux-x86_64.sh --user
5. opencv 설치
설치 환경
anaconda - mp_env_new
python 3.7.12
opencv 4.6.0
mediapipe 0.8.3.0
# opencv 설치하기
conda install -c conda-forge opencv
opencv 4~version 설치하기 참고
https://webnautes.tistory.com/1186
opencv 설치가 완료되었다면
$ sudo apt-get install -y \
libopencv-core-dev \
libopencv-highgui-dev \
libopencv-calib3d-dev \
libopencv-features2d-dev \
libopencv-imgproc-dev \
libopencv-video-dev
6. FFmpeg 설치
sudo ape install ffmpeg
7. WORKSPACE, open_linuxBUILD, ffmpeg_linux.BUILD 변경
먼저 git에서 다운받았던 mediapipe 폴더로 이동하여 WORKSPACE와 open_linuxBUILD를 수정한다.
- opencv version 2~3일 경우
● WORKSPACE
# WORKSPACE
new_local_repository(
name = "linux_opencv",
build_file = "@//third_party:opencv_linux.BUILD",
path = "/usr",
)
● open_linux.BUILD
# opencv_linux.BUILD for OpenCV 2/3 installed from Debian package
cc_library(
name = "opencv",
linkopts = [
"-l:libopencv_core.so",
"-l:libopencv_calib3d.so",
"-l:libopencv_features2d.so",
"-l:libopencv_highgui.so",
"-l:libopencv_imgcodecs.so",
"-l:libopencv_imgproc.so",
"-l:libopencv_video.so",
"-l:libopencv_videoio.so",
],
)
- opencv version 4일 경우
● WORKSPACE
# WORKSPACE
new_local_repository(
name = "linux_opencv",
build_file = "@//third_party:opencv_linux.BUILD",
path = "/usr",
)
● open_linux.BUILD
cc_library(
name = "opencv",
hdrs = glob([
# Uncomment according to your multiarch value (gcc -print-multiarch):
# "include/aarch64-linux-gnu/opencv4/opencv2/cvconfig.h",
# "include/arm-linux-gnueabihf/opencv4/opencv2/cvconfig.h",
# "include/x86_64-linux-gnu/opencv4/opencv2/cvconfig.h",
"include/opencv4/opencv2/**/*.h*",
]),
includes = [
# Uncomment according to your multiarch value (gcc -print-multiarch):
# "include/aarch64-linux-gnu/opencv4/",
# "include/arm-linux-gnueabihf/opencv4/",
# "include/x86_64-linux-gnu/opencv4/",
"include/opencv4/",
],
linkopts = [
"-l:libopencv_core.so",
"-l:libopencv_calib3d.so",
"-l:libopencv_features2d.so",
"-l:libopencv_highgui.so",
"-l:libopencv_imgcodecs.so",
"-l:libopencv_imgproc.so",
"-l:libopencv_video.so",
"-l:libopencv_videoio.so",
],
)
WORKSPACE와 open_linux.BUILD 수정이 완료되었다면
setup_opencv.sh 파일을 실행하여 opencv 빌드를 자동으로 완료할 수 있다.
8. HELLO WORLD 예제 실행
# HELLO WORLR 예제 실행
export GLOG_logtostderr=1
# CPU로만 RUN하고 싶다면
$ bazel run --define MEDIAPIPE_DISABLE_GPU=1 \
mediapipe/examples/desktop/hello_world:hello_world
# GPU도 같이 RUN하고 싶다면
bazel run --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 \
mediapipe/examples/desktop/hello_world:hello_world
위와 같은 결과가 나온다면 build를 성공한 것이다.
9. FACE_DETECT_BUILD & RUN
mediapipe가 제공하는 solution들 중 face detect 예제를 실행해보자
먼저 바젤 빌드를 face_detection_cpu로 빌드해줍니다
mediapipe$ bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 \
mediapipe/examples/desktop/face_detection:face_detection_cpu
다음으로 빌드된 face_detection_cpu를 bazel에서 실행한다.
# BAZEL BUILD 불러오기
mediapipe$ GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/face_detection/face_detection_cpu
# face detection 계산 그래프 pbtxt 불러오기
--calculator_graph_config_file=mediapipe/graphs/face_detection/face_detection_desktop_live.pbtxt \
# input file path 입력
--input_video_path=/home/juno/workspace/detect/data_files/human_4.mp4 \
# output file path 입력
--output_video_path=/home/juno/workspace/detect/result/face_detect_result4.mp4
# 설명 없는 버전
# BAZEL BUILD 불러오기
mediapipe$ GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/face_detection/face_detection_cpu \
--calculator_graph_config_file=mediapipe/graphs/face_detection/face_detection_desktop_live.pbtxt \
--input_video_path=/home/juno/workspace/detect/data_files/human_4.mp4 \
--output_video_path=/home/juno/workspace/detect/result/face_detect_result4.mp4
10. FACE_DETECT_CPU 실행
bazel run실행에 오류가 있을경우 - bazel 출력 정리
bazel clean
bazel의 clean 명령어는 bazel 인스턴스에서 수행하는 모든 빌드 구성의 출력 디렉터리 혹은 bazel 인스턴스에서 만든 작업 트리 전체를 삭제하고 내부 캐시를 재설정하는 명령어이다.
각 bazel 인스턴스가 단일 작업공간에 연결되어 있어서, clean 명령어는 해당 작업공간에서 해당 bazel 인스턴스로 한 모든 빌드의 모든 출력을 삭제한다.
bazel clean --expunge
bazel clean에 --expunge를 입력하면 bazel 인스턴스에서 만든 전체 작업트리가 완전히 삭제된다.
-- expunge로 실행하면 정리 명령어는 bazel이 마는 모든 임시파일 + 빌드 출력 + 전체 출력 기본트리가 제거 된다.
bazel clean --expunge_async
--expunge_async를 사용하면 백그라운드에서 영구 삭제가 가능하다.
'머신러닝딥러닝 > detection' 카테고리의 다른 글
mediapipe - face detect & pose estimation 동시 실행하기 (0) | 2023.01.20 |
---|---|
mediapipe face detect - webcam 실시간 실행하기 (0) | 2023.01.19 |
mediapipe pose classification model - webcam streaming environment (0) | 2023.01.18 |
ubuntu 18.04 webcam 설치 및 사용하기 (2) | 2023.01.16 |
구글 AI프레임워크 MediaPipe(미디어파이프)란? (0) | 2023.01.13 |
댓글