Knowhow/Vision 44

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

Open3D Normal map rendering, Normal 이미지 얻는 방법

Open3D에서 주어진 mesh의 normal을 얻어내는 방법은 쉽다. Document에서도 이 기능만 설명한다.import open3d as o3dmesh = o3d.io.read_triangle_mesh(MESH_PATH)mesh.compute_vertex_normals() # vertex normals are filled inmesh.compute_triangle_normals() # face normals are filled in 그런데 normal map 즉 2D 형태로 얻는 방법은 명확히 없다. normal rendering을 하는 방법이 뚜렷하지 않다.  vis = o3d.visualization.Visualizer() vis.create_window(visible=True) opt =..

Knowhow/Vision 2024.11.05

Opencv camera index 찾기, device index 찾기

2022.06.13 - [Knowhow/Vision] - Opencv multi webcam 사용 시 인식 확인 Opencv multi webcam 사용 시 인식 확인opencv에서 라이브 웹캠을 2개 이상 사용하고자 할 때, 보통 아래와 같이 접근한다. import cv2 cam0 = cv2.VideoCapture(0) cam1 = cv2.VideoCapture(1) ... camN = cv2.VideoCapture(N) #N is a camera index 이 때, 분명 카메라 N대jseobyun.tistory.com 이전 글에서 cv2.VideoCapture()를 사용할 때 필요한 camera index를 어떻게 찾는지 정리한 바 있는데, 글 말미에서는 USB 포트를 바꿀 때마다 혹은 USB 포트가..

Knowhow/Vision 2024.10.29

Facescape 모델 68 keypoint/landmark index

https://facescape.nju.edu.cn/ FaceScape facescape.nju.edu.cn 위 데이터셋 중 TU model은 topology가 통일되어 있으므로 landmark에 해당하는 vertex index만 알면 모든 데이터의 landmark를 찾아낼 수 있다.  https://github.com/zhuhao-nju/facescape/tree/master/toolkit/predef facescape/toolkit/predef at master · zhuhao-nju/facescapeFaceScape (PAMI2023 & CVPR2020). Contribute to zhuhao-nju/facescape development by creating an account on GitHub...

Knowhow/Vision 2024.08.28

obj 파일 v, vt, f 등 직접 저장하기, obj save

obj 파일은 v, vn (normal), vt(texture uv), f 등 vertex 위치와 face 구성 외에 몇가지 정보를 같이 들고 있을 수 있다. https://en.wikipedia.org/wiki/Wavefront_.obj_file Wavefront .obj file - WikipediaFrom Wikipedia, the free encyclopedia Geometry definition file format OBJ (or .OBJ) is a geometry definition file format first developed by Wavefront Technologies for its Advanced Visualizer animation package. The file format is..

Knowhow/Vision 2024.08.28

Facescape 모델 displacement map 사용법, detailed mesh 얻어내는 방법

https://facescape.nju.edu.cn/ FaceScape facescape.nju.edu.cn Face mesh 데이터셋 중 오래됐지만 여전히 많이 쓰이는 데이터 중 하나인 facescape 데이터셋. TU model이라는 이름으로 topology를 맞춰놓은 데이터가 특히 사용하기 좋다.  TU model은 근데 생각보다 해상도(mesh vertex, face 수)가 높지 않은데 데이터 자체의 용량을 줄이기 위해서 coarse와 fine을 분리해놨기 때문이다. 그냥 obj 파일에 담겨있는 mesh는 coarse 즉 vertex 수도 적고 face도 적은 기본 template mesh를 registration해둔 결과다. 그 이외 fine detail은 displacement map담겨 있다..

Knowhow/Vision 2024.08.28

Unit cube vertices, faces index (pytorch3d cube 만들기)

open3d는 다음과 같은 method가 주어져서 cube를 만드는게 뚝딱이다. cube = o3d.geometry.TriangleMesh.create_box() 아쉽게도 pytorch3d에는 이게 없어서 직접 cube의 8개 vertex와 face를 지정해준 뒤 직접 만들어야 하는데, 이게 매번 할 때마다 엄청 귀찮다. 정육면체니까 6개 face만 만들면 될 것 같지만 triangle face기 때문에 12개의 face를 만들어야 하고, 구성하는 vertex indexing 순서에 따라 normal이 뒤집힐 수도 있기 때문에 렌더링까지 잘되게 하려면 face 방향도 매번 신경써야 한다. 엄청 귀찮다... 반복 노동을 줄이기 위해 복사 붙여넣기 용으로 기록해둔다. from pytorch3d.structu..

Knowhow/Vision 2024.08.05

BFM face model 파라미터로 변형하기 (cropped BFM 2009 버전 예시)

https://faces.dmi.unibas.ch/bfm/index.php?nav=1-1-0&id=details MorphaceThis page is part of the old Basel Face Model from 2009, find most recent Basel Face Model here. Basel Face Model - Details Details of the Basel Face Model The geometry of the BFM consists of 53,490 3D vertices connected by 160,470 triangles. Faces of difffaces.dmi.unibas.ch BFM은 2009년 처음 만들어진 모델이지만 2017년, 2019년 총 2차례에 걸쳐 리뉴얼..

Knowhow/Vision 2024.07.30

Open3d mesh uv coordinate

이전 글 Trimesh to Open3d TriangleMesh 에서 짧게 적어두긴 했는데, open3d는 기존 graphic tool에서 쓰는 uv 좌표계랑 다르게 쓰는 특징이 있다.  OBJ가 들고 있는 UV 값이 있을 때, 이를 trimesh나 meshlab 등 각종 라이브러리나 툴에서 이를 읽을 때와 open3d로 읽을 때 방향이 반대다.  위와 같이 mesh와 uv map이 주어졌다고 보자.  trimesh.load_mesh()로 불러온 mesh와 o3d.io.read_triangle_mesh()로 불러온 mesh 내에 UV 값 자체는 똑같다.Convention trimesh나 다른 툴들은 그 값을 갖고 texture map을 읽을 때, 위와 같이 좌측 하단에 원점을 두고 UV 값을 읽는다. (..

Knowhow/Vision 2024.07.30