Knowhow 112

BlenderNeRF로 3DGS 에셋 만들기 (.blend to 3DGS .ply)

3DGS가 explicit representation이다 보니 여러 3DGS를 좌표계만 통일한다면 한 공간에 모아서 렌더링할 수 있다. ply를 위치만 맞춰서 합쳐주면 그대로 합쳐진 scene이 된다. 이전 글 참고. 생각보다 재밌는 것들을 많이 해볼 수 있는데 이 때 맘에 드는 scene이나 object를 3DGS로 만들기 좋은 툴을 소개한다. 직접 찍어서 COLMAP + nerfstudio (or gsplat)을 태워서 복원할 수도 있지만 이게 해보면 COLMAP이 안 깨지게 맞추는 것도 어렵고 real scene이기 때문에 퀄리티 높게 복원하기가 쉽지 않다. 추천하는 대안은 블렌더에서 가상 렌더링 이미지 + 카메라 포즈로 복원해내는 것이다. BlenderNeRFhttps://github.com/..

Knowhow/Vision 2025.07.04

[Raspberry Pi 4] Arducam 16MP IMX519 카메라 설정

https://www.youtube.com/watch?v=8-yf_tId62o 위 영상을 보면 공식 지원되는 라즈베리 파이 카메라 모듈 V2/V3/HQ 보다 가격, 화각, distortion, color tone, white balance 등 여러 측면에서 낫다고 판단할 만한 모델이 arducam이다. 개인적으로 화각이 80도에 12MP 해상도를 얻을 수 있는 것도 감지덕지인 것 같은데 왜곡이나 색상 같은 부분도 잘 챙겨서 만든 모델이라 쓰기 좋은 것 같다. 가격도 라즈베리파이 카메라 모듈3와 거의 비슷한 수준. 하나 귀찮은 점은 라즈베리파이의 공식 카메라가 아니다 보니 libcamera 명령어가 바로 가능한 상태는 아니라는 것. 따로 추가 설정을 해두어야 한다. 설정 방법https://docs.ard..

Knowhow/Others 2025.07.03

3D Gaussian splat PLY 파일 합치기/압축하기 (How to merge/compress 3DGS PLYs)

3D gaussian splatting으로 만든 결과물, ply 파일 여러개를 갖고 동시에 편집하는 일이 종종 있다. 예를 들어, scene ply와 object ply를 합쳐서 공간 안에 물체를 넣은 듯한 결과물을 만들고 싶을 때다. GUI 로는 아주 쉽게 할 수 있다. https://superspl.at/editor/ 여기에 모든 파일을 drag and drop으로 던진 뒤, 원하는 편집을 마친 뒤 내보내기를 하면 하나로 합쳐져서 저장된다. 문제는 이걸 코드로 작성해서 자동으로 하고 싶을 때였다. 이게 javascript 코드다 보니까 코드를 봐선 뭔지 모르겠고 그래서 직접 python으로 만들어봤는데 사소하지만 꽤 귀찮은 작업이었기에 메모해둔다. import torchimport numpy as..

Knowhow/Vision 2025.07.03

SMPL part labeling, SMPL segmentation, SMPL 파트 나누기

parametric model을 다룰 때 꽤나 있으면 좋을 정보 중 대표적인게 part label이다. 예를 들어 FLAME이나 BFM face model 같은 경우는 눈, 코, 입, 귀 등 영역 분할 mask를 제공하기 때문에 local한 무언가를 구현하고자 할 때 별 공수 없이 가져다 쓸 수 있게 되어있다. 반면 훨씬 많이 쓰는 SMPL 시리즈는 없길래 그냥 내가 만들었다. head 0left arm 1left foot 2left hand 3left leg 4right arm 5right foot 6right hand 7right leg 8torso 9각 vertex 마다 label을 0-9를 새겨서 총 10개의 영역으로 분할한 mask는 아래와 같다.   SMPL 6890 SMPLX SMPL은 1..

Knowhow/Vision 2025.04.04

Tmux 사용하기. 터미널 닫아도 코드 실행 유지.

학습용 서버든, 서비스용 서버든 보통 원격 접속(GUI가 보통 없으니 ssh)으로 컨트롤하게 되는데, 항상 돌아가야 하는 코드가 있을 경우 원격 접속 터미널을 닫아버리면 서버 코드가지 멈춰버리기 때문에 귀찮다. 실수로라도 로컬 PC 터미널을 닫거나 로컬 PC를 꺼야되는 일은 상당히 빈번한데 이 때마다 서버 코드가 멈춰버리면 힘들다. 이 문제를 해결하기 위해 보통 사용하는 것이 Tmux다. 간단하게 말하면 겉모습은 똑같지만, 터미널을 닫아도 터미널 화면만 닫힐 뿐 PC에서는 계속 터미널이 떠있는 것과 같이 만든다. 따라서 tmux session 내에서 원격 접속을 해둘 경우, 터미널을 닫아도 원격 접속이 계속 유지되는 상태로 만들 수 있다. 여러 사용 커맨드들이 있지만 최소로 불편하지 않을 정도로 사용..

Knowhow/Linux 2024.12.27

SMPLX uv mapping/coordinate 사용 시 유의점

SMPLX 모델 사용한 연구들이 요새 UV domain도 많이 염두하기 때문에 각 vertex의 uv coordinate 정보도 다루기 시작한 것 같다. 근데 내가 직접 다뤄보니 생각보다 잡고생해야 될 숨은 오류들이 많은데, 미리 적어두려고 한다.  1. SMPLX_NEUTRAL.pkl / SMPLX_MALE.pkl  /SMPLX_FEMALE.pkl 모델 안에 있는 "vt" 사용 금지pkl 모델 자체를 열어보면 안에 vt라는 변수로 총 11313개 uv coordinate가 저장되어 있다. 먼저 왜 모델 vertex 개수인 10475랑 다르냐고 궁금할 수 있는데 3차원 모델을 2차원 uv map으로 쪼개는 과정에서 어쩔 수 없이 여러 번 mapping 해야 되는 경계 vertex들이 있기 때문이다. 예를..

Knowhow/Vision 2024.11.22

BFM 모델 vertex index / uv unwrap coordinates

Face template 모델 중에 FLAEM 다음으로 유명한게 BFM 모델인데 제작된 건 53490 vertex로 구성되어 있다. 하지만 3DDFA에서 inner mouth vertex를 제거해서 295개를 제거해서 53215개로 만들었고, Deep3DFaceReconstruction (Microsoft)에서는 목과 귀를 추가 제거해서 35709개로 만들었다.  후속 연구 각각에서 vertex 개수도 줄이고, UV unwrapped coordinates는 또 53215개 vertex에 대해서만 계산해뒀고 헷갈리는 점이 많아서 따로 정리했다.  Vertex index 위 파일은 초기 full BFM face vertex 53490개 중 inner mouth를 제거한 vertex 53215개로 축소하고 싶..

Knowhow/Vision 2024.11.19

argparse 사용 시 list를 argument로 넘겨주기

python 코딩할 때 무조건 쓰게 되는게 argparse인데 argument로 list를 전달해야 될 때 귀찮은 일이 많다. 예를 들어, 아래와 같이 쓰면 될 것이라고 쓰면 된다고 생각하는데parser = argparse.ArgumentParser()parser.add_argument("--something", type=list)args= parser.parse_args() 이렇게 하면 python run.py --something a b c 와 같이 썼을 때 오류 난다. 의도와 다르게 된다. 정석이 대신 아래와 같이 쓰는게 좋다.parser = argparse.ArgumentParser()parser.add_argument("--something", nargs="+")args= parser.parse..