in utils/house3d.py [0:0]
def _parse(self, levelsToExplore=[0]):
rooms, objects = [], {}
data = self.env.house.house
modelCategoryMapping = {}
import csv
csvFile = csv.reader(open(self.env.house.metaDataFile, 'r'))
headers = next(csvFile)
for row in csvFile:
modelCategoryMapping[row[headers.index('model_id')]] = {
headers[x]: row[x]
for x in range(2, len(headers)) # 0 is index, 1 is model_id
}
for i in levelsToExplore:
for j in range(len(data['levels'][i]['nodes'])):
assert data['levels'][i]['nodes'][j]['type'] != 'Box'
if 'valid' in data['levels'][i]['nodes'][j]:
assert data['levels'][i]['nodes'][j]['valid'] == 1
# Rooms
if data['levels'][i]['nodes'][j]['type'] == 'Room':
if 'roomTypes' not in data['levels'][i]['nodes'][j]:
continue
# Can rooms have more than one type?
# Yes, they can; just found ['Living_Room', 'Dining_Room', 'Kitchen']
# assert len(data['levels'][i]['nodes'][j]['roomTypes']) <= 3
roomType = [
# ' '.join(x.lower().split('_'))
x.lower()
for x in data['levels'][i]['nodes'][j]['roomTypes']
]
nodes = data['levels'][i]['nodes'][j][
'nodeIndices'] if 'nodeIndices' in data['levels'][i][
'nodes'][j] else []
rooms.append({
'type':
roomType,
'bbox':
data['levels'][i]['nodes'][j]['bbox'],
'nodes':
nodes,
'model_id':
data['levels'][i]['nodes'][j]['modelId']
})
# Objects
elif data['levels'][i]['nodes'][j]['type'] == 'Object':
if 'materials' not in data['levels'][i]['nodes'][j]:
material = []
else:
material = data['levels'][i]['nodes'][j]['materials']
objects[data['levels'][i]['nodes'][j]['id']] = {
'id':
data['levels'][i]['nodes'][j]['id'],
'model_id':
data['levels'][i]['nodes'][j]['modelId'],
'fine_class':
modelCategoryMapping[data['levels'][i]['nodes'][j][
'modelId']]['fine_grained_class'],
'coarse_class':
modelCategoryMapping[data['levels'][i]['nodes'][j][
'modelId']]['coarse_grained_class'],
'bbox':
data['levels'][i]['nodes'][j]['bbox'],
'mat':
material
}
return rooms, objects