alexander

This commit is contained in:
IDONTSUDO 2024-05-02 17:36:44 +03:00
parent c49beb8218
commit e0a6cd0af1
6 changed files with 254 additions and 19 deletions

View file

@ -5,7 +5,7 @@ import blenderproc as bproc
Реализуемая функция: создание датасета в формате BOP с заданными параметрами рандомизации
Используется модуль blenderproc
19.04.2024 @shalenikol release 0.1
02.05.2024 @shalenikol release 0.1
"""
import numpy as np
import argparse
@ -15,7 +15,6 @@ import shutil
import json
VHACD_PATH = "blenderproc_resources/vhacd"
# DIR_BOP = "bop_data"
DIR_MODELS = "models"
FILE_LOG_SCENE = "res.txt"
FILE_RBS_INFO = "rbs_info.json"
@ -26,15 +25,13 @@ Not_Categories_Name = True # наименование категории в COCO
def _get_path_model(name_model: str) -> str:
# TODO on name_model find path for mesh (model.fbx)
# local_path/assets/mesh/
return os.path.join(rnd_par.output_dir, "assets/mesh/"+name_model+".fbx")
# , d: dict
# return d["model"]
loc = os.path.dirname(os.path.dirname(rnd_par.output_dir))
return os.path.join(loc, "assets/mesh/"+name_model+".fbx")
def _get_path_object(name_obj: str) -> str:
# TODO on name_obj find path for scene object (object.fbx)
return os.path.join(rnd_par.output_dir, "assets/mesh/"+name_obj+".fbx")
# , d: dict
# return d["path"]
loc = os.path.dirname(os.path.dirname(rnd_par.output_dir))
return os.path.join(loc, "assets/mesh/"+name_obj+".fbx")
def convert2relative(height, width, bbox):
"""
@ -198,8 +195,6 @@ def render() -> int:
t = [obj.get_bound_box(local_coords=True).tolist() for obj in all_meshs if obj.get_name() == objn]
rec["cuboid"] = t[0]
data.append(rec)
# ff = os.path.join(args.obj_path, rnd_par.models.filenames[i]) # путь к исходному файлу
# shutil.copy2(ff, models_dir)
shutil.copy2(rnd_par.models.filenames[i], models_dir)
f = (os.path.splitext(rnd_par.models.filenames[i]))[0] + ".mtl" # файл материала
if os.path.isfile(f):
@ -260,21 +255,20 @@ def _get_models(par, data) -> int:
return 0 # no models
# загрузим объекты
par.models.names = [] #list(map(lambda x: x["name"], data)) # obj_names
par.models.filenames = [] #list(map(lambda x: x["model"], data)) #obj_filenames
par.models.names = [] # obj_names
par.models.filenames = [] # obj_filenames
i = 1
for f in data:
nam = f
par.models.names.append(nam)
ff = _get_path_model(nam)
# ff = f["model"] # путь к файлу объекта
par.models.filenames.append(ff)
if not os.path.isfile(ff):
print(f"Error: no such file '{ff}'")
return -1
obj = bproc.loader.load_obj(ff)
all_meshs += obj
obj[0].set_cp("category_id", i) #f["id"]) # начиная с 1
obj[0].set_cp("category_id", i) # начиная с 1
i += 1
return par.models.n_item
@ -293,7 +287,7 @@ def _get_scene(par, data) -> int:
par.scene.objs = []
par.scene.collision_objects = []
for f in objs:
ff = _get_path_object(f["name"]) # f["path"]
ff = _get_path_object(f["name"])
if not os.path.isfile(ff):
print(f"Error: no such file '{ff}'")
return -1
@ -303,7 +297,7 @@ def _get_scene(par, data) -> int:
if len(coll) > 0:
obj[0].enable_rigidbody(False, collision_shape=coll)
par.scene.collision_objects += obj
par.scene.objs += obj #bproc.loader.load_blend(args.scene, data_blocks=["objects"])
par.scene.objs += obj
if not par.scene.collision_objects:
print("Collision objects not found in the scene")
@ -353,7 +347,6 @@ if __name__ == "__main__":
rnd_par.loc_range_high = models_randomization["loc_range_high"]
if not os.path.isdir(rnd_par.output_dir):
# os.mkdir(rnd_par.output_dir)
print(f"Error: invalid path '{rnd_par.output_dir}'")
exit(-3)