def read_obj(filename): obj_directory = split(filename)[0] lines = open(filename).read().split('\n') d = {'v': [], 'vn': [], 'f': [], 'vt': [], 'ft': []} mtls = {} for line in lines: line = line.split() if len(line) < 2: continue key = line[0] values = line[1:] if key == 'v': d['v'].append([np.array([float(v) for v in values[:3]])]) elif key == 'f': spl = [l.split('/') for l in values] d['f'].append( [np.array([int(l[0]) - 1 for l in spl[:3]], dtype=np.uint32)]) if len(spl[0]) > 1 and spl[1] and 'ft' in d: d['ft'].append([np.array([int(l[1]) - 1 for l in spl[:3]])]) # TOO: redirect to actual vert normals? #if len(line[0]) > 2 and line[0][2]: # d['fn'].append([np.concatenate([l[2] for l in spl[:3]])]) elif key == 'vn': d['vn'].append([np.array([float(v) for v in values])]) elif key == 'vt': d['vt'].append([np.array([float(v) for v in values])]) elif key == 'mtllib': fname = join(obj_directory, values[0]) if not exists(fname): fname = values[0] if not exists(fname): raise Exception("Can't find path %s" % (values[0])) _update_mtl(mtls, fname) elif key == 'usemtl': cur_mtl = mtls[values[0]] if 'map_Kd' in cur_mtl: src_fname = cur_mtl['map_Kd'][0] dst_fname = join(split(cur_mtl['filename'])[0], src_fname) if not exists(dst_fname): dst_fname = join(obj_directory, src_fname) if not exists(dst_fname): dst_fname = src_fname if not exists(dst_fname): raise Exception( "Unable to find referenced texture map %s" % (src_fname, )) else: d['texture_filepath'] = normpath(dst_fname) im = cv2.imread(dst_fname) sz = np.sqrt(np.prod(im.shape[:2])) sz = int(np.round(2**np.ceil(np.log(sz) / np.log(2)))) d['texture_image'] = cv2.resize(im, (sz, sz)).astype( np.float64) / 255. # fix for python3 for k, v in list(d.items()): if k in ['v', 'vn', 'f', 'vt', 'ft']: if v: d[k] = np.vstack(v) else: del d[k] else: d[k] = v result = Minimal(**d) return result
def read_obj(filename): obj_directory = split(filename)[0] lines = open(filename).read().split('\n') d = {'v': [], 'vn': [], 'f': [], 'vt': [], 'ft': []} mtls = {} for line in lines: line = line.split() if len(line) < 2: continue key = line[0] values = line[1:] if key == 'v': d['v'].append([np.array([float(v) for v in values[:3]])]) elif key == 'f': spl = [l.split('/') for l in values] d['f'].append([np.array([int(l[0])-1 for l in spl[:3]], dtype=np.uint32)]) if len(spl[0]) > 1 and spl[1] and 'ft' in d: d['ft'].append([np.array([int(l[1])-1 for l in spl[:3]])]) # TOO: redirect to actual vert normals? #if len(line[0]) > 2 and line[0][2]: # d['fn'].append([np.concatenate([l[2] for l in spl[:3]])]) elif key == 'vn': d['vn'].append([np.array([float(v) for v in values])]) elif key == 'vt': d['vt'].append([np.array([float(v) for v in values])]) elif key == 'mtllib': fname = join(obj_directory, values[0]) if not exists(fname): fname = values[0] if not exists(fname): raise Exception("Can't find path %s" % (values[0])) _update_mtl(mtls, fname) elif key == 'usemtl': cur_mtl = mtls[values[0]] if 'map_Kd' in cur_mtl: src_fname = cur_mtl['map_Kd'][0] dst_fname = join(split(cur_mtl['filename'])[0], src_fname) if not exists(dst_fname): dst_fname = join(obj_directory, src_fname) if not exists(dst_fname): dst_fname = src_fname if not exists(dst_fname): raise Exception("Unable to find referenced texture map %s" % (src_fname,)) else: d['texture_filepath'] = normpath(dst_fname) im = cv2.imread(dst_fname) sz = np.sqrt(np.prod(im.shape[:2])) sz = int(np.round(2 ** np.ceil(np.log(sz) / np.log(2)))) d['texture_image'] = cv2.resize(im, (sz, sz)).astype(np.float64)/255. for k, v in d.items(): if k in ['v','vn','f','vt','ft']: if v: d[k] = np.vstack(v) else: del d[k] else: d[k] = v result = Minimal(**d) return result
def load_image(filename): return (cv2.imread(filename)[:, :, ::-1] / 255.).copy()
def load_image(filename): return (cv2.imread(filename)[:,:,::-1]/255.).copy()