Skip to content

Commit

Permalink
Code refactoring for easier usability
Browse files Browse the repository at this point in the history
  • Loading branch information
smartslab authored Aug 21, 2022
1 parent 46f1ac9 commit d656eea
Show file tree
Hide file tree
Showing 8 changed files with 380 additions and 442 deletions.
111 changes: 53 additions & 58 deletions training/computePIsFromViewNormalizedPCDs.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,11 @@
@author: Ekta Samani
"""


import cv2
import argparse
import numpy as np
import open3d as o3d
import fnmatch,os
import matplotlib.pyplot as plt
import os
import copy
from gtda.plotting import plot_point_cloud
import pickle
from scipy.spatial.transform import Rotation

from persim import PersistenceImager


Expand Down Expand Up @@ -56,7 +50,6 @@ def computePDBinningNo2DTranslation(pcd):
xes = copy.deepcopy(pcd[:,0])
pcd[:,0] = bins[np.digitize(xes,bins,right=True)]
xesnew = np.unique(pcd[:,0])
newpts = []
dgm = []
for idx,x in enumerate(xesnew):
ymax = np.max(pcd[np.where(pcd[:,0] == x)][:,1])
Expand Down Expand Up @@ -129,60 +122,62 @@ def orientCamBottom(pcd):
pcd.rotate(Rtemp)
return pcd

model_type = 'all'


if model_type == 'all':
def main(data_path):
pidir = './training/libpis/'
os.mkdir(pidir)
cam_a = [i for i in range(0,360,5)]
cam_b = [i for i in range(0,185,5)]
cam_a_remove = []
cam_b_remove = [0,5,175,180]
cam_a_final = list(set(cam_a) - set(cam_a_remove))
cam_b_final = list(set(cam_b) - set(cam_b_remove))



object_list = os.listdir('./library/')
for oname in object_list:
data = {}
print(oname)
maxlayers = 0
instances = {}

for bdeg in cam_b_final:
folder = str(bdeg)+'/0'
for file in cam_a_final:
for aug in range(4):
pcd = o3d.io.read_point_cloud('./library/'+oname+'/'+folder+'/'+'flatpcdwcam/'+str(file)+'.pcd')

trpcd = trXMinusCam(trYMinusCam(trZMinusCam(pcd)))
rotatedpcd = orientCamBottom(trpcd)
finaltrpcd = trXMinusCam(trYMinusCam(trZMinusCam(rotatedpcd)))

rotatedpcd = rotateForLayeringOption2WAug(finaltrpcd,aug)
finalpcd = trXMinusCam(trYMinusCam(trZMinusCam(rotatedpcd)))

pcdpts = np.asarray(finalpcd.points)



rounded = roundinXYZ(pcdpts)


zs = getZs(rounded)
pis = {}
for key,value in zs.items():
layer = getLayer(rounded,zs,key)
dgm = computePDBinningNo2DTranslation(layer)

pers = dgm[:,1] - dgm[:,0]
if (pers > 0.75).any():
print('pers range issue')
img = pimgr.transform([dgm[:,0:2]])
pis[key] = img[0]
maxlayers = max(maxlayers,key+1)
instances['a'+str(aug)+'_'+str(bdeg)+'_'+str(file)] = pis
data[oname] = (instances,maxlayers)
np.save('./libpis/train1_library_allpis_'+oname+'.npy',data)


object_list = os.listdir(data_path)
for oname in object_list:
data = {}
print(oname)
maxlayers = 0
instances = {}

for bdeg in cam_b_final:
folder = str(bdeg)+'/0'
for file in cam_a_final:
for aug in range(4):
pcd = o3d.io.read_point_cloud(data_path+oname+'/'+folder+'/'+'vnpcdwcam/'+str(file)+'.pcd')

trpcd = trXMinusCam(trYMinusCam(trZMinusCam(pcd)))
rotatedpcd = orientCamBottom(trpcd)
finaltrpcd = trXMinusCam(trYMinusCam(trZMinusCam(rotatedpcd)))

rotatedpcd = rotateForLayeringOption2WAug(finaltrpcd,aug)
finalpcd = trXMinusCam(trYMinusCam(trZMinusCam(rotatedpcd)))

pcdpts = np.asarray(finalpcd.points)



rounded = roundinXYZ(pcdpts)


zs = getZs(rounded)
pis = {}
for key,value in zs.items():
layer = getLayer(rounded,zs,key)
dgm = computePDBinningNo2DTranslation(layer)

pers = dgm[:,1] - dgm[:,0]
if (pers > 0.75).any():
print('pers range issue')
img = pimgr.transform([dgm[:,0:2]])
pis[key] = img[0]
maxlayers = max(maxlayers,key+1)
instances['a'+str(aug)+'_'+str(bdeg)+'_'+str(file)] = pis
data[oname] = (instances,maxlayers)
np.save(pidir+'allpis_'+oname+'.npy',data)

if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--data_path')
args = parser.parse_args()
main(args.data_path)
71 changes: 14 additions & 57 deletions training/generateSyntheticData.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@author: Ekta Samani
"""

import numpy as np
import time
import cv2,os,csv
import cv2,os,csv,sys,argparse

from math import pi, sin, cos
from direct.showbase.ShowBase import ShowBase
Expand Down Expand Up @@ -195,17 +193,16 @@ def save_camera_params(self,datadir,obj_name,img_name):



def main(obj_name,objhprs):
def main(obj_name,h,p,r):
h = int(h)
p = int(p)
r = int(r)

obj_height = 0.2
mesh_path = "blendermodels\\"+obj_name+"\\textured.obj"
texture_path = "blendermodels\\"+obj_name+"\\texture_map.png"
mesh_path = "models\\"+obj_name+"\\textured.obj"
texture_path = "models\\"+obj_name+"\\texture_map.png"


h = objhprs[obj_name][0]
p = objhprs[obj_name][1]
r = objhprs[obj_name][2]

app = MyApp(obj_name,mesh_path,texture_path,h,p,r)


Expand Down Expand Up @@ -257,52 +254,12 @@ def main(obj_name,objhprs):


if __name__ == '__main__':
objlist = ["004_sugar_box","006_mustard_bottle","009_gelatin_box","021_bleach_cleanser","035_power_drill","036_wood_block","054_softball","055_baseball",
"005_tomato_soup_can","019_pitcher_base","003_cracker_box","008_pudding_box","007_tuna_fish_can","002_mast_chef_can",
"071_nine_hole_peg_test","077_rubiks_cube","025_mug","056_tennis_ball","057_racquetball","058_golf_ball","053_mini_soccer_ball",
"052_extra_large_clamp","051_large_clamp","061_foam_brick","073-b_lego_duplo","073-c_lego_duplo",
'ice_cream',"001_chips_can",'hot_sauce',"010_potted_meat_can","043_phillips_screwdriver","061_foam_brick_new","048_hammer","037_scissors","031_spoon","038_padlock","029_plate","024_bowl","009_gelatin_box_new"]
objhprs = {}
objhprs["006_mustard_bottle"] = (23,0,0)
objhprs["004_sugar_box"] = (90,0,0)
objhprs["009_gelatin_box"] = (90,90-13,90)
objhprs["021_bleach_cleanser"] = (0,0,0)
objhprs["035_power_drill"] = (0,90,0)
objhprs["036_wood_block"] = (13,0,0)
objhprs["055_baseball"] = (0,0,0)
objhprs["054_softball"] = (0,0,0)
objhprs["005_tomato_soup_can"] = (0,0,0)
objhprs["019_pitcher_base"] = (-45,0,0)
objhprs["003_cracker_box"] = (90,0,0)
objhprs["008_pudding_box"] = (90,-27,90)
objhprs["007_tuna_fish_can"] = (0,90,0)
objhprs["002_mast_chef_can"] = (0,0,0)
objhprs["071_nine_hole_peg_test"] = (90,155,90)
objhprs["077_rubiks_cube"] = (-30,0,0)
objhprs["025_mug"] = (0,0,-90)
objhprs["056_tennis_ball"] = (0,0,0)
objhprs["057_racquetball"] = (0,0,0)
objhprs["058_golf_ball"] = (0,0,0)
objhprs["053_mini_soccer_ball"] = (0,0,0)
objhprs["052_extra_large_clamp"] = (90,-7,90)
objhprs["051_large_clamp"] = (85,-98, 80)
objhprs["061_foam_brick"] = (0,90,0)
objhprs["073-c_lego_duplo"] = (90,90,90)
objhprs["073-b_lego_duplo"] = (-10,0,0) #b and f are same
objhprs["ice_cream"] = (0,+90,0)
objhprs["001_chips_can"] = (0,90,00)
objhprs["hot_sauce"] = (0,90,0)
objhprs["010_potted_meat_can"] = (0,-2,90)
objhprs["043_phillips_screwdriver"] = (0,90,0)
objhprs["061_foam_brick_new"] = (0,0,90)
objhprs["048_hammer"] = (0,90,0)
objhprs["037_scissors"] = (0,-90,0)
objhprs["031_spoon"] = (0,90,0)
objhprs["038_padlock"] = (0,90,0)
objhprs["029_plate"] = (0,90,0)
objhprs["024_bowl"] = (0,90,0)
objhprs["009_gelatin_box_new"] = (0,0,0)
obj_name = objlist[-1]
main(obj_name,objhprs)
parser = argparse.ArgumentParser()
parser.add_argument('--obj_name')
parser.add_argument('--h')
parser.add_argument('--p')
parser.add_argument('--r')
args = parser.parse_args()
main(args.obj_name,args.h,args.p,args.r)


74 changes: 40 additions & 34 deletions training/getPCDsFromSyntheticData.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,39 +6,45 @@
import open3d as o3d
import csv,os
import numpy as np
import ast,cv2
import matplotlib.pyplot as plt
import ast
import argparse


object_list = os.listdir('./library/')

for obj_name in object_list:
print(obj_name)
for cam_b_deg in range(0,185,5):
folder = str(cam_b_deg)+'/0'
if not os.path.exists('./library/'+obj_name+'/'+folder+'/'+'pcd/'):
os.makedirs('./library/'+obj_name+'/'+folder+'/'+'pcd/')
def main(data_path):
object_list = os.listdir(data_path)

for obj_name in object_list:
print(obj_name)
for cam_b_deg in range(0,185,5):
folder = str(cam_b_deg)+'/0'
if not os.path.exists(data_path+obj_name+'/'+folder+'/'+'pcd/'):
os.makedirs(data_path+obj_name+'/'+folder+'/'+'pcd/')

intrinsics = {}
#extrinsics = {}

with open(data_path+obj_name+'/'+folder+'/'+obj_name+'.csv', mode='r') as inp:
reader = csv.reader(inp)
intrinsics = {rows[0]:np.reshape(ast.literal_eval(rows[1]),(3,3)) for rows in reader}


intrinsics = {}
#extrinsics = {}

with open('./library/'+obj_name+'/'+folder+'/'+obj_name+'.csv', mode='r') as inp:
reader = csv.reader(inp)
intrinsics = {rows[0]:np.reshape(ast.literal_eval(rows[1]),(3,3)) for rows in reader}


for k,v in intrinsics.items():
f = 1099 #fov40
depth_img = np.squeeze(np.load('./library/'+obj_name+'/'+folder+'/'+'depth/'+os.path.splitext(k)[0]+'.npy'))
p2d_idx = np.where(depth_img>-1)
us = p2d_idx[0]
vs = p2d_idx[1]
values = np.squeeze(depth_img[us,vs])
p2d_value = np.vstack((us,vs,values)).T
p3d = p2d_value.copy()
p3d[:,0] = -(p3d[:,0]-300)/f#/p3d[:,2]
p3d[:,1] = (p3d[:,1]-400)/f#/p3d[:,2]
objpcd = p3d[np.where(p3d[:,2]< 1.0)]
pcl = o3d.geometry.PointCloud()
pcl.points = o3d.utility.Vector3dVector(objpcd)
o3d.io.write_point_cloud('./library/'+obj_name+'/'+folder+'/'+'pcd/'+os.path.splitext(k)[0]+'.pcd', pcl)
for k,v in intrinsics.items():
f = 1099 #fov40
depth_img = np.squeeze(np.load(data_path+obj_name+'/'+folder+'/'+'depth/'+os.path.splitext(k)[0]+'.npy'))
p2d_idx = np.where(depth_img>-1)
us = p2d_idx[0]
vs = p2d_idx[1]
values = np.squeeze(depth_img[us,vs])
p2d_value = np.vstack((us,vs,values)).T
p3d = p2d_value.copy()
p3d[:,0] = -(p3d[:,0]-300)/f#/p3d[:,2]
p3d[:,1] = (p3d[:,1]-400)/f#/p3d[:,2]
objpcd = p3d[np.where(p3d[:,2]< 1.0)]
pcl = o3d.geometry.PointCloud()
pcl.points = o3d.utility.Vector3dVector(objpcd)
o3d.io.write_point_cloud(data_path+obj_name+'/'+folder+'/'+'pcd/'+os.path.splitext(k)[0]+'.pcd', pcl)

if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--data_path')
args = parser.parse_args()
main(args.data_path)
Loading

0 comments on commit d656eea

Please sign in to comment.