본문 바로가기
머신러닝딥러닝/detection

linux ubuntu 18.04에 mediapipe build 실행하기

by orangecode 2023. 1. 13.
728x90
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를 사용하면 백그라운드에서 영구 삭제가 가능하다.

 

반응형

댓글