홍든램지의 보일러실

OpenSfM 알아보고 설치하고 실행하기 본문

오픈소스 프로젝트

OpenSfM 알아보고 설치하고 실행하기

예비보일 2023. 3. 31. 02:30
반응형

 

openSfM은 파이썬으로 작성된 모션라이브러리의 Structure 이다.

이 라이브러리는 여러 이미지에서 카메라 포즈와 3D 장면을 재구성하기 위한 처리 파이프라인 역할을 한다.

파이프라인 구축에 중점을 둔 Structure form Motion(피처 인식 /  매칭, 미니멀 솔버)의 기본 모듈로 구성된다.

지리적 Geographical 정렬과 강인성을 위해 외부 센서( GPS, IMU)를 통합한다고 한다.

 

GPS나 IMU도 된다고 하니까 나중에 ROS랑 연동해도 될듯한데 지금은 NeRF가 나와서 그쪽으로 해볼까 한다.

 

그럼 이걸 설치하고 실행해보자!!

 

https://github.com/mapillary/OpenSfM

 

GitHub - mapillary/OpenSfM: Open source Structure-from-Motion pipeline

Open source Structure-from-Motion pipeline. Contribute to mapillary/OpenSfM development by creating an account on GitHub.

github.com

깃허브 링크로 들어가거나 깃허브 링크로 해당 라이브러리를 다운받아보자. 일단 필자는 우분투 써서 윈도우는 잘모른다.

개발은 리눅스로 하는게 뭔가 멋있다고 해야할까 솔직히 경험상 ros도 그렇고 우분투에서 되는게 더 많은거 같다.

 

1. 설치하기

설치과정은 OpenSfM을 참고 했다.

여기서 --recursive 명령어에 대해서 설명하자면 git clone 기본 저장소뿐만 아니라 모든 하위 모듈을 재귀적??으로 다운로드한다.이게 무슨말이냐면 기본적으로 종속성으로 사용되는 다른 Git 리포지토리에 대한 참조이다. --recursive가 없으면 하위 모듈은 기본적으로 다운로드할때 포함 되지 않으며 알아서 초기화하고 업데이트해야 한다. --recursive를 사용하면 모든 종속성을 가져와서 로컬 저장소에서 사용할수 있을 때까지 모든 하위 모듈과 해당 하위 모듈을 다운로드 한다. 이러면 수동으로 할 필요도 없고 시간을 절약할 수 있다.

아래 명령어를 통해 파일을 설치한다.

git clone --recursive https://github.com/mapillary/OpenSfM

다음으로 코드가 이미 있거나 릴리즈를 다운로드한 경우 아래 명령어로르 사용하여 하위 모듈을 업데이트해야한다.

cd OpenSfM
git submodule update --init --recursive

 

이제 설치하기 전에는 설치가 되어 있어야 하는 라이브러리가 있다.

흔히들 아는 opencv는 비전라이브리이고 Ceres Solver는 구글에서 개발한 비선형 최소제곱 문제를 해결하기위한 C++라이브러리이다. SLAM이나 SfM등에서 쓰인다.

  • OpenCV
  • Ceres Solver 

위 라이브러리가 설치되어 있는지 확인해보자

pkg-config --modversion opencv4

필자는 4.2.0 버전이 설치되어 있다.

Ceres가 설치 되어 있지 않아서 설치한다.

 

설치과정은 아래 포스터를 확인하면 된다.

2023.03.30 - [분류 전체보기] - Ceres-solver 라이브러리 설치하고 예제로 확인하기

 

Ceres-solver 라이브러리 설치하고 예제로 확인하기

일단 Ceres-solver가 뭔지 알아보자. Ceres Solver 라이브러리는 nonlinear least-squares 문제를 해결하기 위한 rubust optimization을 제공하는 C++ 라이브러리이다. Google에서 개발했고 컴퓨터 비전, 로봇 공학 및

minhong.tistory.com

또한 C++ 17버전 이상의 컴파일러를 필요로 한다. 설치과정은 아래와 같다.

sudo apt install gcc-10 gcc-10-base gcc-10-doc g++-10
sudo apt install libstdc++-10-dev libstdc++-10-doc

이렇게 설치를 진행하게되면 기존 gcc 버전과 g++ 그리고 10버전이 동시에 존재한다.

버전을 변경하기 위한 자세한 내용은 이전글을 참고하기 바란다.

2023.03.13 - [AI 와 딥러닝] - Instant-ngp 설치 및 사전 준비하기!

 

Instant-ngp 설치 및 사전 준비하기!

https://github.com/NVlabs/instant-ngp GitHub - NVlabs/instant-ngp: Instant neural graphics primitives: lightning fast NeRF and more Instant neural graphics primitives: lightning fast NeRF and more - GitHub - NVlabs/instant-ngp: Instant neural graphics prim

minhong.tistory.com

 

아래 커맨드를 통해 10버전을 등록한다.

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 60
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 60

 

의존성이 모두 설치 되었다면 OpenSfM 폴더에서 아래 커맨드를 통해 python 패키지를 설치한다.

필자는 Ubuntu20.04 python3.8.10 에서 설치를 진행하였다.

pip install -r requirements.txt

로컬 python 환경에서 설치를 진행하다 보니

각 패키지들의 오류가 발생하였다. 이러한 오류를 해결하기위해 가상환경을 생성한후 다시 진행하였다.

가상환경 생성 과정과 실행은  아래와 같다.

virtualenv OpenSfM
source OpenSfM/bin/activate

그리고 추가적인 패키지를 설치해야한다. 우선 패키지 목록을 업데이트한다. 업데이트를 하면 사용가능한 패키지 및 해당 버전 목록이 새로고침 된다.

그리고 Universe 저장소가 추가 되어 있지 않다면 Universe 저장소를 추가해야한다. 해당 저장소에 있는 패키지들이 존재하기 때문이다. 명령어는 아래와 같다.

sudo apt-get update
sudo add-apt-repository universe
sudo apt-get update
sudo apt-get install python3 python3-dev python3-pip python3-tk libjpeg-dev libpng-dev libtiff-dev libglu1-mesa-dev libatlas-base-dev gfortran liblapack-dev libgsl-dev libboost-dev libboost-python-dev libeigen3-dev libgoogle-glog-dev libgflags-dev
python3 setup.py build

 

위 명령어를 통해 설치가 완료되면 예제를 실행해보자.

bin/opensfm_run_all data/berlin

data 폴더에는 예제 폴더가 존재한다. 위명령어를 실행하면 전체 SfM 파이프라인이 실행되고 data/berlin 경로에

reconstruction.meshed.json 파일이 생성된다.

 

이제 view를 세팅해보자.

OpenSfM 폴더에서 아래 커맨드를 실행하자.

아래 커맨드는 viewer에 의존성을 갖는 mapillary-js, gl-matrix, dat.gui 패키지를 npm으로 실행하는 것이다.

./viewer/node_modules.sh

 

준비가 되었으면 마지막으로 viewer 서버를 실행하자.

python3 viewer/server.py -d data/berlin

위 코드를 실행하면 위와 같은 결과가 나온다.

 

이때 터미널 창에 있는 Running on http://[::1]:8080 부분에 ctrl 키를 누른 상태로 마우스로 클릭하면 아래와 같은 창이 나타난다.

주의) 네이버 웨일 브라우저는 마우스가 제대로 먹지않음

여기서 reconstruction.meshed.json 을 선택하고 submit을 누른다.

결과를 보면 다음과 같다.

berlin 모습

오른쪽 탭에 imageVisible 을 체크하면 이미지를 포함한 모습을 볼수있다.!

 

lund 모습

 

 


주의) 만약 python3 setup.py build 에서 아래와 같은 오류가 났다면 ceres-solver를 git clone을 통해 최신버전을 받아 생긴 오류이다.



 

 

 

반응형
Comments