반응형
데이터 처리하다가 우연히 발견한 버그인데, pymeshlab의 decimation 기능이 제대로 동작 안할 때가 있다.
import pymeshlab as ml
ms = ml.MeshSet()
ms.load_new_mesh(ply_path)
m = ms.current_mesh()
num_verts = m.vertex_number()
num_faces = m.face_number()
simp_ratio = 0.1
ms.meshing_decimation_quadric_edge_collapse_with_texture(targetperc=simp_ratio)
ms.save_current_mesh(obj_path, save_textures=True, save_vertex_normal=False)
뭐 이런 식으로 pymeshlab으로 mesh 불러와서 vertex, face 수 줄이기 위해서 decimation을 시도했다.
대부분 정상적으로 동작해서 파일 크기가 큰 폭으로 줄어들었는데, 특정 횟수 이상 가면 decimation을 안하고 바로 저장한다.
다행인 건 vertex, face를 제멋대로 바꾸지는 않고 정말 decimation이 동작 안해서 그대로 저장한다.
원인을 알아내려고 좀 디버깅을 해봤는데 정말 원인이 없다. 일단 reproduce부터가 안됨.
경험적으로 200~300MB 쯤되는 500~600 개 정도 처리하는 시점에서 동작을 멈춘다. 용량이 작은 파일 처리할 때는 신기하게도 발생하지 않았다. 거의 9000개 넘는 개수를 처리할 때까지 정상 동작했음.
한 번 실패하기 시작하면 이후 loop도 모두 실패한다. 메모리 문제인가 싶은데 메모리 사용량을 보면 딱히 올라가지도 않는다.
정말 원인 모르겠음... 실패한 샘플도 다시 돌리면 정상적으로 된다.
ply_size = os.path.getsize(ply_path)
obj_size = os.path.getsize(obj_path)
그냥 이처럼 decimation 전후로 파일 사이즈 체크해서 실패했을 경우, 멈추도록 (건너뛰어봤자 그 다음도 실패하니까) 설정해두는게 안전할 것 같다.
Note
reproduce가 안돼서 확인은 못했지만 혹시 모르니 MeshSet하고 Mesh 메모리 해제를 강제로 해주는 것이 도움이 될지도...
del m, ms
반응형
'Trouble > Vision' 카테고리의 다른 글
Open3D rendering 시 이미지 중심/principal point 안 맞는 문제 (0) | 2024.11.05 |
---|---|
Trimesh load_mesh, export 시 texture 제대로 안 읽히고 저장 안될 때 (0) | 2024.09.02 |
Open3d mesh wrong vertex count, face order (Open3d mesh 제멋대로 읽혀질 때) (0) | 2024.08.07 |
Open3D OBJ texture 안 보일 때, enable_post_processing=True로 해결 안 될 때, texture가 검정색으로 뜰 때 확인 사항 (0) | 2024.07.09 |
Opencv cornerSubPix empty array 문제 (0) | 2024.02.27 |