180bpm
리눅스에서 MediaPipeUnityPlugin 빌드하기 본문
github.com/homuler/MediaPipeUnityPlugin
핸드트래킹이 가능한 유니티 프로젝트가 있어서 실행해보려는데 처음 접해보는 빌드방식이라 리마인드차 남김
중요 *안드로이드용 aar은 리눅스에서만 빌드됨*
이 문서 작성중에 docker를 이용한 빌드가 추가되었다. docker 써본적이 없어서 잘 안되길래 나는 그냥 wsl에서 빌드해주는 스크립트를 작성했다.
#########################################################
210928 wsl과 docker를 이용한 빌드 설명 추가
문서 작성시점에서는 정말 잘 안되기도 했고, wsl 2 쓰려면 hyper-v를 켜야 하는데 이게 켜지면 안드로이드 에뮬레이터가 안돌아가서..
오늘 그냥 다른 머신에서 테스트 해봤는데 잘 되더라.
도커 스크립트를 보니 결국 내가 주먹구구식으로 했던 내용이 더 이쁘게 들어가있었다.
1. 도커 윈도우 버전을 설치한다
https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe
2. wsl을 2로 설치해야 한다
https://docs.microsoft.com/ko-kr/windows/wsl/install-manual
wsl2 커널을 설치하고
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
wsl --set-default-version 2 을 주고 배포판을 설치하던가
설치된 배포판의 버전을 2로 바꾸던가 ex. wsl --set-version Ubuntu-20.04 2
3. 설치가 되었으면
cd $home && git clone https://github.com/homuler/MediaPipeUnityPlugin.git && cd MediaPipeUnityPlugin
해서 저장소 복제한 뒤,
4. 1번 이미지 빌드랑 2번 컨테이너 실행하는 명령어는 그대로 터미널에 붙여주고
빌드를 GPU로 할지 CPU로 할지에 따라 명령어만 구분해서 입력해주면 쉽게 끝난다.
https://github.com/homuler/MediaPipeUnityPlugin#docker-for-linux-experimental
5. 빌드가 다 되었으면 exit로 도커에서 빠져나온뒤
explorer.exe .
를 입력하면 현재 작업 디렉토리를 탐색기에서 확인 할 수 있다.
wsl 1때는 바로 접근이 되었는데 wsl 2는 가상디스크에서 동작하기때문에 바로 접근 할 수가 없었다.
#########################################################
github.com/Leuconoe/MediaPipeUnityPluginLinuxInstaller
WSL1을 써야 하거나 docker를 쓸 수 없는 경우가 있으니 wsl1에서 돌아가게 하는 스크립트.
1. WSL
ubuntu 20.04 LTS에서 작업함.
모든 작업은 $home에서 진행하는것을 가정
2. 사전 설치할 것들
nodejs와 pip, 컴파일러들과 빌드시스템, jdk등 설치할것이 상당히 많다.
특히 GPU 빌드를 하려면 python 3.9 이상에서 빌드해야하는데 ubuntu에서는 아직 3.9를 설치 할 수가 없다.
그래서 수동으로 받아서 make 해줘야 함. 이때 기존 python3을 덮어쓰지 않게 altinstall
Anaconda 3을 쓰고 있는 windows 환경도 마찬가지라서 Anaconda Navigator에서 가상환경 하나 만들고 파이썬만 3.9로 업데이트 해서 잘 되는거 확인했다. 생각해보니 win10은 CPU only라고 했는데 왜 된거지..?
2. opencv
패키지 매니저 통해서 설치하면 version.hpp가 없다는 오류가 계속 뜬다.
그래서 소스 받아서 빌드하는것으로 진행. 문서대로 설치하면 opencv4가 설치되는데 프로젝트에선 3기준으로 되어있다. third_party:opencv_linux.BUILD에서 경로를 바꿔도 되는데 나는 자동화가 목적이니 명시적으로 3으로 진행.
wget -O opencv.zip https://github.com/opencv/opencv/archive/refs/tags/3.4.10.zip
ninja가 더 빠르게 빌드된다고 하니 ninja로 빌드.
docs.opencv.org/master/d7/d9f/tutorial_linux_install.html
3 ADK, NDK
프로젝트에서 mediapipe를 쓰니까 설치 스크립트도 호출될줄 알았더니 안되서 빌드 오류가 나서..
따로 받아서 호출함. 근데 이거도 환경변수 기입하는 부분에서 문제가 있는데 해결하지 못해서 스크립트에서 임시로 추가시키는것으로 우회
raw.githubusercontent.com/google/mediapipe/master/setup_android_sdk_and_ndk.sh
4.numpy가 꼬이는경우가 있어서
sudo pip3 install -U numpy
askubuntu.com/questions/748929/no-module-named-numpy
5. 레파지토리 복사
이건 문제 없었음.
6. argparse
기본 설치된 argparse에는 BooleanOptionalAction이 없어서 계속 오류가 난다.
raw.githubusercontent.com/python/cpython/master/Lib/argparse.py
7 그리고 빌드.
그러면 editor linux/macos, android aar 라이브러리가 빌드된다.
윈도우 환경은 추가 작업 필요.
################################
#win10 환경에서 빌드 했던거, 데스크톱 플랫폼에선 잘 되는거 확인.
1. opencv
받아서 프로젝트가 요구하는 폴더에 해제 (보통 c:\opencv)
3.4.10을 쓰라고 명시됨.
github.com/opencv/opencv/releases/download/3.4.10/opencv-3.4.10-vc14_vc15.exe
2. nuget
vs에서 쓰는거랑 별개로 cli 를 받아야 한다.
받아서 환경변수에 경로를 넣어줬다.
3. mediapipe
google.github.io/mediapipe/getting_started/install.html
msys2는 이미 설치되었어서 문서에 나오는대로 진행함.
bazel은 빌드하는데 쓰는거락했고..
5번까지만 따라했다.
4. numpy
python3는 Anaconda로 설치했었다.
7. 빌드
뭐가 빌드가 스무스하게 잘 되지 않는다.
중간에 한참을 대기걸려서 껐다켜고 강종하길 여러번했다.
- 한번 스무스하게 빌드되면 이후에는 잘 된다
트러블 슈팅
bazel이 먹통이어서 껐다가 다시 켰는데 안된다면
server pid를 메시지에서 알려줄텐데 그에 맞는 프로세스를 종료하면 됨. 이름은 OpenJDK Platform binary
################