206 lines
7.0 KiB
Python
206 lines
7.0 KiB
Python
import os, sys, shutil, subprocess, shlex,oss2,requests
|
|
sys.path.append('e:\\libs\\')
|
|
import config
|
|
import xml.etree.ElementTree as ET
|
|
import common
|
|
def is_already(pid):
|
|
|
|
if not os.path.exists("D://make2/export_build_info/finished.txt"):
|
|
#创建文件
|
|
with open("D://make2/export_build_info/finished.txt", 'w') as f:
|
|
f.write("")
|
|
return False
|
|
#读取已经完成的pid
|
|
with open("D://make2/export_build_info/finished.txt", 'r') as f:
|
|
lines = f.readlines()
|
|
for line in lines:
|
|
if str(pid) == str(line.strip()):
|
|
return True
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
def writeImageList(pid):
|
|
# pid = "185005"
|
|
imageListTxt = f"D://{pid}/{pid}_imageList.txt"
|
|
if not os.path.exists(imageListTxt):
|
|
with open(imageListTxt, 'w') as f:
|
|
f.write("")
|
|
filePath = f"D://{pid}//{pid}.rcproj"
|
|
tree = ET.parse(filePath)
|
|
root = tree.getroot()
|
|
fileName = []
|
|
for input_tag in root.findall(".//input"):
|
|
tempFileName = input_tag.get("fileName")
|
|
if tempFileName:
|
|
fileName.append(tempFileName)
|
|
sourceFileNames = []
|
|
for sourceFile in fileName:
|
|
tempSourceName = sourceFile.replace(f"D:\{pid}\photo1\\","")
|
|
tempSourceName = tempSourceName.replace(f"D:\{pid}\photo2\\","")
|
|
print("tempSourceName",tempSourceName)
|
|
#遍历指定的文件减价
|
|
for file in os.listdir(f"D://{pid}/depthAndMask"):
|
|
if ".jpg.depth.exr" not in file:
|
|
continue
|
|
#截取图片名称
|
|
tempName = file.replace(".depth.exr","")
|
|
if tempName == tempSourceName:
|
|
#sourceFileNames.append(sourceFile)
|
|
#写入到文件中
|
|
print(f"写入到文件-{sourceFile}")
|
|
with open(imageListTxt, 'a+') as f:
|
|
f.write(f"{sourceFile}\n")
|
|
|
|
|
|
def exportInfo(pid):
|
|
newCopyFilePath = f"D://{pid}/{pid}.rcproj"
|
|
#判断是否存在目录,不存在则创建
|
|
depthMaskPath = f"D://{pid}/depthAndMask"
|
|
#删除文件夹
|
|
try:
|
|
shutil.rmtree(depthMaskPath)
|
|
except Exception as e:
|
|
print(e)
|
|
|
|
|
|
if not os.path.exists(f"D://{pid}/depthAndMask"):
|
|
os.makedirs(f"D://{pid}/depthAndMask")
|
|
|
|
imageListTxt = f"D://{pid}/{pid}_imageList.txt"
|
|
try:
|
|
os.remove(imageListTxt)
|
|
except Exception as e:
|
|
print(e)
|
|
|
|
if not os.path.exists(imageListTxt):
|
|
with open(imageListTxt, 'w') as f:
|
|
f.write("")
|
|
|
|
maskPath = f"D://{pid}/mask"
|
|
|
|
try:
|
|
shutil.rmtree(maskPath)
|
|
except Exception as e:
|
|
print(f"删除文件夹失败{e}")
|
|
if not os.path.exists(f"D://{pid}/mask"):
|
|
os.makedirs(f"D://{pid}/mask")
|
|
|
|
depthPath = f"D://{pid}/depth"
|
|
try:
|
|
shutil.rmtree(depthPath)
|
|
except Exception as e:
|
|
print(e)
|
|
|
|
if not os.path.exists(f"D://{pid}/depth"):
|
|
os.makedirs(f"D://{pid}/depth")
|
|
|
|
registrationPath = f"D://{pid}/reg"
|
|
try:
|
|
shutil.rmtree(registrationPath)
|
|
except Exception as e:
|
|
print(e)
|
|
if not os.path.exists(registrationPath):
|
|
os.makedirs(registrationPath)
|
|
|
|
#如果存在则执行打开命令
|
|
cmd = f'{config.rcbin} {config.r2["init"]} -setInstanceName {pid} -load "{newCopyFilePath}" -exportRegistration "D://{pid}/reg/{pid}_registration.out" "D://make2/config/registration_export_config.xml" -exportDepthAndMask "D://{pid}/depthAndMask" "D://make2/config/depth_mask_config.xml" -quit'
|
|
# print(cmd)
|
|
cmd = shlex.split(cmd)
|
|
res = subprocess.run(cmd)
|
|
|
|
writeImageList(pid)
|
|
|
|
#删除掉 depthMaskPath 里 文件名 包含 _1. 的文件
|
|
for file in os.listdir(depthMaskPath):
|
|
#将遍历出来的文件名进行判断,如果是_8.jpg.mask _1.jpg.mask 写入到pid_imgList.txt中
|
|
# if "_8.jpg.mask" in file:
|
|
# jpgPath = f"D://{pid}/photo2/"+file.replace(".mask", "")
|
|
# jpgPath = jpgPath.replace(".png", "")
|
|
# print("_8",jpgPath)
|
|
# with open(imageListTxt, 'a+') as f:
|
|
# f.write(f"{jpgPath}\n")
|
|
|
|
# if "_1.jpg.mask" in file:
|
|
# jpgPath = f"D://{pid}/photo1/"+file.replace(".mask", "")
|
|
# jpgPath = jpgPath.replace(".png", "")
|
|
# print("_1",jpgPath)
|
|
# with open(imageListTxt, 'a+') as f:
|
|
# f.write(f"{jpgPath}\n")
|
|
|
|
if "_1." in file:
|
|
os.remove(f"{depthMaskPath}/{file}")
|
|
|
|
if "_8.jpg.mask" in file:
|
|
try:
|
|
shutil.move(f"{depthMaskPath}/{file}",maskPath)
|
|
except Exception as e:
|
|
print(f"移动文件失败1{e}")
|
|
|
|
|
|
if "_8.jpg.depth" in file:
|
|
try:
|
|
shutil.move(f"{depthMaskPath}/{file}",depthPath)
|
|
except Exception as e:
|
|
print(f"移动文件失败2{e}")
|
|
|
|
|
|
writeImageList(str(pid))
|
|
|
|
#删除已存在数据,防止版本冲突
|
|
try:
|
|
deleteList = []
|
|
for obj in oss2.ObjectIterator(config.oss_bucket,prefix=f'objs/auto/{pid}/model_info_v2'):
|
|
deleteList.append(obj.key)
|
|
config.oss_bucket.batch_delete_objects(deleteList)
|
|
except Exception as e:
|
|
print("")
|
|
|
|
#上传到oss 上
|
|
#将 D:\{pid}\{pid}_registration.out 上传到 oss model_info
|
|
config.oss_bucket.put_object_from_file(f'objs/auto/{pid}/model_info_v2/{pid}_registration.out', f'D://{pid}/reg/{pid}_registration.out')
|
|
# imageList.txt
|
|
config.oss_bucket.put_object_from_file(f'objs/auto/{pid}/model_info_v2/{pid}_imageList.txt', imageListTxt)
|
|
if os.path.exists(f"{depthMaskPath}/imageList.txt"):
|
|
config.oss_bucket.put_object_from_file(f'objs/auto/{pid}/model_info_v2/imageList.txt', f"{depthMaskPath}/imageList.txt")
|
|
# depth 和 mask 上传
|
|
print("上传 mask")
|
|
for file in os.listdir(maskPath):
|
|
config.oss_bucket.put_object_from_file(f'objs/auto/{pid}/model_info_v2/mask/{file}', f"{maskPath}/{file}")
|
|
|
|
print("上传 depth")
|
|
for file in os.listdir(depthPath):
|
|
config.oss_bucket.put_object_from_file(f'objs/auto/{pid}/model_info_v2/depth/{file}', f"{depthPath}/{file}")
|
|
|
|
#上传几遍照片
|
|
print("上传 reg")
|
|
for file in os.listdir(registrationPath):
|
|
if "_1.jpg" in file:
|
|
config.oss_bucket.put_object_from_file(f'objs/auto/{pid}/model_info_v2/reg/photo1/{file}', f"{registrationPath}/{file}")
|
|
|
|
if "_8.jpg" in file:
|
|
config.oss_bucket.put_object_from_file(f'objs/auto/{pid}/model_info_v2/reg/photo2/{file}', f"{registrationPath}/{file}")
|
|
|
|
tempFile = f"D://{pid}//finish.txt"
|
|
#创建文件
|
|
with open(tempFile, 'w') as f:
|
|
f.write("")
|
|
|
|
print(f"完成的PID-{pid}")
|
|
|
|
|
|
#写入到指定的文件中
|
|
with open("D://make2/pid.text", 'a+') as f:
|
|
f.write(f"{pid},")
|
|
|
|
#删除文件
|
|
# common.removeFolder(str(pid))
|
|
# shutil.rmtree(f"D://{pid}",ignore_errors=True)
|
|
|
|
#插入队列
|
|
tempUrl = "https://mp.api.suwa3d.com/api/customerP3dLog/addGaussianRedisQueneu?pid="+str(pid)
|
|
requests.get(tempUrl)
|
|
|
|
# exportInfo("181593") |