@ -6,7 +6,7 @@ if platform.system() == 'Windows':
@@ -6,7 +6,7 @@ if platform.system() == 'Windows':
else :
sys . path . append ( ' /data/deploy/make3d/make2/libs/ ' )
import config , libs , libs_db , common , main_service_db
redisLocal = config . redis_local
def load_model ( pid ) :
cmd = f ' { config . rcbin } { config . r1 [ " init " ] } -load " { os . path . join ( config . workdir , pid , f " { pid } .rcproj " ) } " '
print ( cmd )
@ -34,32 +34,71 @@ def make3d(pid):
@@ -34,32 +34,71 @@ def make3d(pid):
cmd = f ' { config . rcbin } { config . r1 [ " init " ] } \
- addFolder " { os.path.join(config.workdir, pid, " photo1 " )} " - addFolder " { os.path.join(config.workdir, pid, " photo2 " )} " { add_photo3 } \
- importControlPointsMeasurements " { os.path.join(config.workdir, pid, f " { pid } . controlPoints . csv " )} " \
- align - save " { os.path.join(config.workdir, pid, f " { pid } _wait . rcproj " )} " '
- align - save " { os.path.join(config.workdir, pid, f " { pid } _wait . rcproj " )} " '
print ( cmd )
cmd = shlex . split ( cmd )
res = subprocess . run ( cmd )
print ( f ' { time . strftime ( " % Y- % m- %d % H: % M: % S " , time . localtime ( ) ) } pid: { pid } 定位点导入完成 ' )
time . sleep ( 3 )
# defind_distance
#死循环阻塞获取
while True :
print ( " 循环阻塞开始 " )
time . sleep ( 3 )
#判断是否有 pid_1 的的值
if redisLocal . sismember ( ' model:auto_distance ' , pid + " _1 " ) == False :
print ( pid + " _1 " )
if redisLocal . lpos ( ' model:auto_distance ' , pid + " _1 " ) == None :
continue
#如果存在就移除掉并退出死循环
redisLocal . lrem ( ' model:auto_distance ' , 0 , pid + " _0 " )
break
shutil . move ( os . path . join ( config . workdir , pid , f ' { pid } _wait.rcproj ' ) , os . path . join ( config . workdir , pid , f ' { pid } .rcproj ' ) )
print ( f ' { time . strftime ( " % Y- % m- %d % H: % M: % S " , time . localtime ( ) ) } pid: { pid } 定义定位点距离完成 ' )
#2023-10-27为了解决老版本使用step1 的 重建区域框的问题,这里加入了 -set "sfmEnableCameraPrior=True" -align -set "sfmEnableCameraPrior=False" align 使相机的对齐线统一向下后,再进行重建区域的设置
#最后处理掉redis中的值
redisLocal . lrem ( ' model:auto_distance ' , 0 , pid + " _1 " )
break
print ( time . strftime ( " % Y- % m- %d % H: % M: % S " , time . localtime ( ) ) , " 循环阻塞结束,开始建模 " )
#区域的设置 建模
cmd = f ' { config . rcbin } { config . r1 [ " init " ] } -load " { os . path . join ( config . workdir , pid , f " { pid } .rcproj " ) } " -update \
- set " sfmEnableCameraPrior=True " - align - set " sfmEnableCameraPrior=False " - align - setReconstructionRegion " { os.path.join(config.workdir, pid, f " { pid } . rcbox " )} " \
- mvs - modelSelectMaximalConnectedComponent - modelInvertSelection - modelRemoveSelectedTriangles - closeHoles - clean - simplify { simplify_value } - smooth - unwrap - calculateTexture - renameModel { pid } - exportModel " {pid} " " { os.path.join(config.workdir, pid, " output " , f " { pid } . obj " )} " " d: \\ make2 \\ config \\ ModelExportParams102.xml " - quit '
- mvs - modelSelectMaximalConnectedComponent - modelInvertSelection - modelRemoveSelectedTriangles - closeHoles - clean - simplify { simplify_value } - smooth - unwrap - calculateTexture - renameModel { pid } - save " { os.path.join(config.workdir, pid, f " { pid } . rcproj " )} " - quit '
print ( cmd )
cmd = shlex . split ( cmd )
res = subprocess . run ( cmd )
time . sleep ( 3 )
#修改rcproj文件
flag = common . changeRcprojFile ( pid )
if flag == False :
print ( f ' { time . strftime ( " % Y- % m- %d % H: % M: % S " , time . localtime ( ) ) } pid: { pid } rcproj文件不存在 ' )
return
#保存在导出
#创建指定文件夹
if not os . path . exists ( os . path . join ( config . workdir , pid , " output " ) ) :
os . makedirs ( os . path . join ( config . workdir , pid , " output " ) )
#执行导出
cmd = f ' { config . rcbin } -load " { os . path . join ( config . workdir , pid , f " { pid } .rcproj " ) } " \
- exportModel " {pid} " " { os.path.join(config.workdir, pid, " output " , f " { pid } . obj " )} " " d: \\ make2 \\ config \\ ModelExportParams102.xml " - quit '
print ( cmd )
cmd = shlex . split ( cmd )
res = subprocess . run ( cmd )
#阻塞判断是否导出完成
while True :
#判断 output 目录下是否存在 三个文件
files = os . listdir ( os . path . join ( config . workdir , pid , " output " ) )
if len ( files ) > = 3 :
break
#2023-10-27为了解决老版本使用step1 的 重建区域框的问题,这里加入了 -set "sfmEnableCameraPrior=True" -align -set "sfmEnableCameraPrior=False" align 使相机的对齐线统一向下后,再进行重建区域的设置
# cmd = f'{config.rcbin} {config.r1["init"]} -load "{os.path.join(config.workdir, pid, f"{pid}.rcproj")}" -update \
# -set "sfmEnableCameraPrior=True" -align -set "sfmEnableCameraPrior=False" -align -setReconstructionRegion "{os.path.join(config.workdir, pid, f"{pid}.rcbox")}" \
# -mvs -modelSelectMaximalConnectedComponent -renameModel {pid} -modelInvertSelection -modelRemoveSelectedTriangles -closeHoles -clean -simplify {simplify_value} -smooth -unwrap -calculateTexture -save "{os.path.join(config.workdir, pid, f"{pid}.rcproj")}" -exportModel "{pid}" "{os.path.join(config.workdir, pid, "output", f"{pid}.obj")}" "d:\\make2\\config\\ModelExportParams102.xml" -quit'
# print(cmd)
# cmd = shlex.split(cmd)
# res = subprocess.run(cmd)
else : # new version
#判断是否要进行高精模
if common . task_need_high_model ( pid ) :
@ -99,13 +138,13 @@ def step2(pid,task_distributed_id=""):
@@ -99,13 +138,13 @@ def step2(pid,task_distributed_id=""):
os . system ( f ' python d: \\ make2 \\ main_step3.py { pid } ' )
else :
#暂时 step2 step3 一起连续执行
print ( ' step2 执行完,开始执行step3 ' )
os . system ( f ' python d: \\ make2 \\ main_step3.py { pid } ' )
main_service_db . update_task_distributed ( { " id " : task_distributed_id , " status " : 2 , " finished_at " : time . strftime ( " % Y- % m- %d % H: % M: % S " , time . localtime ( ) ) } )
#main_service_db.update_task_distributed_detail({"task_distributed_id":task_distributed_id,"finished_at":time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())})
return
# return
def main ( pid ) :
redisLocal = config . redis_local
if pid == ' 0 ' :
while True :
# 取本地mysql队列任务,完成第二步的建模任务