8 changed files with 260 additions and 44 deletions
@ -0,0 +1,129 @@
@@ -0,0 +1,129 @@
|
||||
import os, sys, time, shlex, subprocess, shutil, requests, cv2, numpy as np |
||||
from PIL import Image |
||||
import platform |
||||
if platform.system() == 'Windows': |
||||
sys.path.append('e:\\libs\\') |
||||
#sys.path.append('libs') |
||||
else: |
||||
sys.path.append('/data/deploy/make3d/make2/libs/') |
||||
import config, libs, libs_db,main_service_db |
||||
# 2. 手动操作建模做成建模 |
||||
# 2.0 检测是否存在项目,不存在就下载,存在就清除项目其它无用的文件 |
||||
# 2.1 初始化工程, 根据参数 加入 photo1 或者 photo 2 的 照片, 对齐 , 导出坐标, 将坐标复制到 另外一个文件夹, 测距, 重建区域, 然后调用step2 |
||||
|
||||
#根据pid 检测是否存在项目,不存在就下载,存在就清除项目其它无用的文件 |
||||
def check_pid_file(pid): |
||||
#检测是否存在目录 |
||||
path = os.path.join(config.workdir, pid) |
||||
if not os.path.exists(path): |
||||
#不存在就在就下载目录 |
||||
print(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} 开始计算相机位姿...') |
||||
start_time = time.time() |
||||
libs.down_from_oss(config.oss_bucket, config.workdir, pid) |
||||
print(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} {pid} 图片下载完成,共费时{libs.diff_time(start_time)}') |
||||
else: |
||||
#存在的话就检测是否有photo1 和 photo2 之外的目录或者文件,有的话就删除 |
||||
for file in os.listdir(path): |
||||
if file != 'photo1' and file != 'photo2': |
||||
if os.path.isfile(os.path.join(path, file)): |
||||
os.remove(os.path.join(path, file)) |
||||
else: |
||||
shutil.rmtree(os.path.join(path, file)) |
||||
|
||||
#判断photo1 和 photo2 目录里的文件是否存在xmp 文件,不存在的话就删除 |
||||
for file in os.listdir(os.path.join(path, 'photo1')): |
||||
if not file.endswith('.xmp'): |
||||
os.remove(os.path.join(path, 'photo1', file)) |
||||
|
||||
for file in os.listdir(os.path.join(path, 'photo2')): |
||||
if not file.endswith('.xmp'): |
||||
os.remove(os.path.join(path, 'photo2', file)) |
||||
|
||||
|
||||
#根据参数初始化操作 |
||||
def cmd_run(pid,usePhoto = "1",lock=False): |
||||
|
||||
start_time = time.time() |
||||
#文件路径 |
||||
photo1_path = os.path.join(config.workdir, pid, 'photo1') |
||||
photo2_path = os.path.join(config.workdir, pid, 'photo2') |
||||
#计算文件里的数量 |
||||
photos1_count = len(os.listdir(photo1_path)) |
||||
photos2_count = len(os.listdir(photo2_path)) |
||||
print(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} {pid} photo1数量{photos1_count} photo2数量{photos2_count}') |
||||
|
||||
#xmp 坐标是要用 lock的 还是 unlock 的 |
||||
if lock: |
||||
exportxmp = ' -exportXMP "D:\\make2\\config\\exportXMP.config.lock.xml" ' |
||||
else: |
||||
exportxmp = ' -exportXMP "D:\\make2\\config\\exportXMP.config.xml" ' |
||||
|
||||
usePhoto = "photo"+str(usePhoto) |
||||
|
||||
#执行命令 |
||||
cmd = f'{config.rcbin} {config.r2["init"]} -setInstanceName {pid} \ |
||||
-save "{os.path.join(config.workdir, pid, f"{pid}.rcproj")}" \ |
||||
-addFolder "{os.path.join(config.workdir, pid, usePhoto)}" -selectAllImages \ |
||||
-detectMarkers "D:\\make2\\config\\detectMarkers.config.xml" \ |
||||
-align -align \ |
||||
{exportxmp} \ |
||||
-save "{os.path.join(config.workdir, pid, f"{pid}.rcproj")}" -quit' |
||||
print(cmd) |
||||
cmd = shlex.split(cmd) |
||||
res = subprocess.run(cmd) |
||||
|
||||
#根据参数转变路劲,复制photo1 里的xmp 文件到 photo2 里,或者 photo2 里的xmp 文件到 photo1 里 |
||||
sourceFile = photo1_path |
||||
targetFile = photo2_path |
||||
if usePhoto == "photo2": |
||||
sourceFile = photo2_path |
||||
targetFile = photo1_path |
||||
#复制xmp文件 |
||||
for xmp in os.listdir(sourceFile): |
||||
if xmp.endswith('.xmp'): |
||||
shutil.copy(os.path.join(sourceFile, xmp), os.path.join(targetFile,xmp)) |
||||
|
||||
|
||||
#将两组图片进行重新对齐 然后重建区域 |
||||
psid = libs.getPSid(pid) |
||||
cmd = f'{config.rcbin} {config.r2["init"]} -setInstanceName {pid} \ |
||||
-load "{os.path.join(config.workdir, pid, f"{pid}.rcproj")}" {config.r["setTextureFalse"]} \ |
||||
-addFolder "{targetFile}" -selectAllImages \ |
||||
-detectMarkers "D:\\make2\\config\\detectMarkers.config.xml" \ |
||||
{libs.get_defineDistances(psid)} -update -align -align {config.r2["setRegion"]} \ |
||||
{exportxmp} \ |
||||
-exportReconstructionRegion "{os.path.join(config.workdir, pid, f"{pid}.rcbox")}" \ |
||||
-selectImage "'+os.path.join(config.workdir,pid,'photo2')+'\*" -enableTexturingAndColoring true' |
||||
-save "{os.path.join(config.workdir, pid, f"{pid}.rcproj")}"' |
||||
print(cmd) |
||||
cmd = shlex.split(cmd) |
||||
res = subprocess.run(cmd) |
||||
print(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} {pid} step1完成,共费时{libs.diff_time(start_time)}') |
||||
|
||||
#调用step2 |
||||
time.sleep(2) |
||||
os.system(f'python main_step2.py {pid}') |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
if len(sys.argv) == 2: |
||||
pids = sys.argv[1].split(',') |
||||
for pid in pids: |
||||
cmd_run(pid,usePhoto = "1",lock=False) |
||||
elif len(sys.argv) == 3: |
||||
pids = sys.argv[1].split(',') |
||||
for pid in pids: |
||||
if sys.argv[2] == '2': |
||||
cmd_run(pid,usePhoto = "2",lock=False) |
||||
else: |
||||
cmd_run(pid,usePhoto = "1",lock=False) |
||||
elif len(sys.argv) == 4: |
||||
pids = sys.argv[1].split(',') |
||||
usePhoto = sys.argv[2] |
||||
lock = sys.argv[3] |
||||
for pid in pids: |
||||
cmd_run(pid,usePhoto = usePhoto,lock=lock) |
||||
|
||||
else: |
||||
print(f'useage: python {sys.argv[0]} pid1,pid2,pid3 photo = 1/2 lock = True/False') |
||||
sys.exit(1) |
||||
Loading…
Reference in new issue