일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Visual SLAM
- clearPath
- 다가오는 말들
- 환경 구축
- 원격 접속
- VINS_MONO
- GPS
- Open3d
- Visual-Inertial SLAM
- 라이다
- 3D reconstruction
- NTRIP
- Slam
- ExtendedKalmanFilter
- 모두의 딥러닝
- ROS
- autonomous driving
- RTK
- 자율주행
- 20500
- 머신 러닝 초급
- 자율주행 센서
- 갱파카
- SDV
- KalmanFilter
- StatePrediction
- ORB-SLAM3
- RTCM
- Odometer
- Azure Kinect
- Today
- Total
알파카농장
Azure Kinect Dataset 만들기 (feat. NICE-SLAM input) 본문
오랜만에 블로그다.
방학 동안 연구도 하고 삽질도 하고 놀기도 하고 나름 의미 있이? 보냈는데, 기록을 아무것도 안하니까 탱자탱자 논 선비처럼 보이네.. 쨌든 연구실에서 3D reconstruction 연구를 하는 친구들이 있는데, 이번에 논문 제출일 due가 얼마 남지 않아, custom dataset 취득하는 부분을 교수님께서 부탁하셔서 후배 한 명과 이 부분을 같이 진행하게 되었다.
참고한 사이트는 다음과 같다.
http://www.open3d.org/docs/release/tutorial/sensor/azure_kinect.html#install-the-azure-kinect-sdk
Azure Kinect with Open3D — Open3D 0.16.0 documentation
Install Open3D from Pip If you’re using Open3D installed via Pip, Open3D’s Azure Kinect features should work out-of-the box if K4A is installed in the system in the recommended way. Open3D will try to load the K4A dynamic library automatically at runti
www.open3d.org
우선, 우리가 필요한 데이터셋 형태가 Image (Color), Depth, Intrinsic Matrix, Config 4가지 종류의 파일이 필요했는데, Azure Kinect DK 제품을 만든 microsoft 사에서 취득한 Video를 4개의 데이터로 Processing할 수 있는 코드를 만들어놓았다. 이 코드를 실행하기 위해서는 저 링크에 있는 과정을 따라 설치를 할 필요가 있었다.
과정을 요약하자면 다음과 같다.
1. Azure Kincet SDK 설치 (이 SDK가 있어야 뒤의 명령어가 실행이 됐던 것 같다.)
2. Open3d 설치 => 2개를 다 하는게 아니다!!!!
- pip를 통한 설치 : 권장 (가상 환경 만들면 더 쉬움)
- github의 source code로부터 compile을 하기
3. 경로를 맞추어 video를 record하기
4. 취득된 Video를 input으로 output direcotry 이름 정해주기
(이 디렉토리에 자동으로 Image (Color), Depth, Intrinsic Matrix, Config 데이터셋이 포함돼서 들어감)
1번 같은 경우에는, 이 블로그를 참고했다.
https://jihundev.github.io/posts/Install_Azure_Kincet_DK_on_Linux/
Azure Kincet Sensor DK Ubuntu 설치 방법
A minimal, portfolio, sidebar, bootstrap Jekyll theme with responsive web design and focuses on text presentation.
jihundev.github.io
- Microsoft Software Repository를 추가해주고, sudo apt를 통해 package를 깔아준 다음
Git에서 패키지 다운로드를 받아서 udev rule을 추가해주면 된다. 아마 udev rule이 sudo chmod +x 를 안해줘도 바로 인식이 되는 그런 코드인 것 같다. 여태 사용했었던 센서들은 컴퓨터에 마운팅이 됐음을 인식시키기 위해 위의 명령어를 사용해줬는데, 이건 안해도 되더라고? 쨌든 그 다음에 $ k4aviewer를 입력했을 때 이런 UI가 나오면 됨
2번 Install Open3d 이다.
이 부분이 헷갈릴 수 있을 것 같다. 얼핏 보면 open3d를 pip로도 설치하고 cmake도 해야할 것처럼 되어있지만, 문서를 자세히 읽어보면 "If you're using Open3d installed via pip," 라고 써져있는 걸로 봐서 open3d를 설치할 수 있는 방법이 2가지임을 암시적으로,,? 눈치챌 수 있다.
따라서 원하고자 하는 Open3d version (필자는 0.16.0이었고, open3d 0.16.0을 지원해주는 python은 3.7~3.10이기에, anaconda에 python 3.8 환경을 가지는 kinect라는 가상 환경을 만들어 open3d까지 설치해주었다.)
(TMI - 잡설) 사실 교수님께 데이터셋 취득을 요청받았을 때는 make install이 막히는 상태라고 하셨고, 나도 내가 만지던 환경?이 아니라서 어떤 에러가 났는지 파악하는 것보다 새로 시작하는 게 나을 것 같다고 판단해서 새로 시작한 것이다! cmake도 제대로 깔면 수월하게 되겠지만, cmake보다는 pip가 훨씬 편한 것 같으니.. pip 추천!
그리고, 이 과정 중에 같이 설치하는 연구실 후배가 가장 중요한 부분을 catch해주었는데, Ubuntu의 path convention과 Windows에서 depthengine_x_x.dll, k4a.dll, k4arecord.dll을 Open3d Python 모듈이 있는 위치 (혹은 C++ executable file이 있는 위치)에 같이 두어야 한다는 것이다.
참고로 so file은 Ubuntu의 동적 라이브러리 링크 파일로, Windows의 dll과 확장자만 다를 뿐 거의 같은(?) 파일이라는 걸 처음 알았고, 우리는 libk4a.so // libk4arecord.so // libdepthengine.so.2.0 이 3개의 파일을 open3d가 있는 경로에 복사를 해주었다. !!! (개인적으로 이게 핵심인 것 같다. 암시적으로? 정보가 나와있어서 헤매기 쉬운 부분)
python -c "import open3d as o3d; import os; print(os.path.dirname(o3d.__file__))"
그렇게 하고 나면, examples/reconstruction_systems/sensors에 들어가면 우리가 찾는 python file들 (viewer, recorder, reader file을 모두 찾아볼 수 있고, 3번과 4번은 명령어 그대로 쳐서 데이터를 취득할 수 있다!
- 참고로 fragments는 nice-slam input을 만들 때 feature matching을 하느라 생긴 디렉토리라 이 부분 없이 2개의 디렉토리, 2개의 json file만 생기는 게 정상! 이다.
센서 주파수(30Hz)에 맞춰서 동영상에서 Frame이 뽑혀져 나온 것을 확인해볼 수 있다. 이 오른쪽 부분이 취득한 동영상을 read하면서 output으로 바꿔줄 때의 화면이다! depth image의 경우 보여지는 건 color지만, 직접 뽑혀져 나온 data는 흑백 이미지임을 유의하자! (혹시 잘못 뽑혔다고 생각할까봐..)
여기까지가 Azure Kinect DK로 데이터셋을 획득하는 과정이다!!!!!!
++ TMI? 로 nice-slam 에서 돌릴 custom data 만드는 과정까지 이야기를 해보면 https://github.com/cvg/nice-slam
GitHub - cvg/nice-slam: [CVPR'22] NICE-SLAM: Neural Implicit Scalable Encoding for SLAM
[CVPR'22] NICE-SLAM: Neural Implicit Scalable Encoding for SLAM - GitHub - cvg/nice-slam: [CVPR'22] NICE-SLAM: Neural Implicit Scalable Encoding for SLAM
github.com
RUN 부분의 Use your own RGB-D Sequnece from Kinect Azure (optional but highly Recommended)을 보면 5가지의 step이 정리되어 있다. 이 위의 과정이 1,2번까지의 과정이고 3,4번을 실행해야 비로소 nice-slam의 input으로 사용할 수 있다. 이 과정은 명령어를 따라 실행만 하면 되기에.. 더 이상 자세하게 설명하진 않겠다.
쨌든, 우리가 하는 일은 중요한 일은 아니고 데이터셋 취득 과정과 Visual SLAM 코드의 input으로 넣는 과정까지 잘 수행한 것 같아 나름 뿌듯하다 !!!! (내 연구 아닌데 왜 재밌지. 내 연구보다 더 재밌을지도.... 사실 내 연구도 원하는 결과를 뽑았는데 원하는 대로 잘 안나와서?.. 생각보다 너무 너저분한 output이라 방향성 제고 중......... 다음 주에는 더 확실한 랩미팅을 할 수 있기를!)
다들 연구 화이팅 !!!!!!