修改odm运行参数

This commit is contained in:
weixin_46229132 2025-02-15 09:49:40 +08:00
parent f6d6f112c9
commit d05f278d79
3 changed files with 16 additions and 39 deletions

View File

@ -1,6 +1,6 @@
import argparse
from datetime import timedelta
from odm_preprocess_fast import PreprocessConfig, ImagePreprocessor
from odm_preprocess import PreprocessConfig, ImagePreprocessor
def parse_args():
parser = argparse.ArgumentParser(description='ODM预处理工具')

View File

@ -75,9 +75,9 @@ class ConvertOBJ:
self.logger.info(f"开始转换网格 {grid_id} 的OBJ文件")
output_osgb = os.path.join(texturing_dir, "Tile.osgb")
cmd = (
f"osgconv {obj_file} {output_osgb} "
f"osgconv {modified_obj} {output_osgb} "
f"--compressed --smooth --fix-transparency "
f"-o 0,1,0-0,0,-1"
# f"-o -90-1,0,0"
)
self.logger.info(f"执行osgconv命令{cmd}")
@ -143,31 +143,6 @@ class ConvertOBJ:
<ModelMetadata version="1">
<SRS>EPSG:4326</SRS>
<SRSOrigin>{self.center_lon},{self.center_lat},0.000000</SRSOrigin>
<TileStructure>
<RootNode>
<BoundingBox>
<MinLat>{min([t['bounds']['min_lat'] for t in tile_infos])}</MinLat>
<MaxLat>{max([t['bounds']['max_lat'] for t in tile_infos])}</MaxLat>
<MinLon>{min([t['bounds']['min_lon'] for t in tile_infos])}</MinLon>
<MaxLon>{max([t['bounds']['max_lon'] for t in tile_infos])}</MaxLon>
</BoundingBox>
<Tiles>"""
for tile in tile_infos:
metadata_content += f"""
<Tile id="{tile['id']}">
<BoundingBox>
<MinLat>{tile['bounds']['min_lat']}</MinLat>
<MaxLat>{tile['bounds']['max_lat']}</MaxLat>
<MinLon>{tile['bounds']['min_lon']}</MinLon>
<MaxLon>{tile['bounds']['max_lon']}</MaxLon>
</BoundingBox>
</Tile>"""
metadata_content += """
</Tiles>
</RootNode>
</TileStructure>
<Texture>
<ColorSource>Visible</ColorSource>
</Texture>
@ -214,7 +189,7 @@ class ConvertOBJ:
x = float(parts[1]) + (east_offset - self.min_east)
y = float(parts[2]) + (north_offset - self.min_north)
z = float(parts[3])
f_out.write(f'v {x:.6f} {y:.6f} {z:.6f}\n')
f_out.write(f'v {x:.6f} {z:.6f} {y:.6f}\n')
else:
# 其他行直接写入
f_out.write(line)

View File

@ -125,16 +125,14 @@ class ODMProcessMonitor:
def run_odm_with_monitor(self, grid_dir: str, grid_id: tuple, produce_dem: bool = False) -> Tuple[bool, str]:
"""运行ODM命令"""
# if produce_dem and self.mode == "快拼模式":
# self.logger.error("快拼模式下无法生成DEM请调整生产参数")
# return False, "快拼模式下无法生成DEM请调整生产参数"
self.logger.info(f"开始处理网格 ({grid_id[0]},{grid_id[1]})")
success = False
error_msg = ""
max_retries = 3
current_try = 0
use_lowest_quality = True # 初始使用lowest quality
# 根据模式设置是否使用lowest quality
use_lowest_quality = self.mode == "快拼模式"
while current_try < max_retries:
current_try += 1
@ -151,6 +149,10 @@ class ODMProcessMonitor:
f"--project-path /datasets project "
f"--max-concurrency 15 "
f"--force-gps "
f"--use-exif "
f"--use-hybrid-bundle-adjustment "
f"--optimize-disk-space "
# f"--feature-quality ultra "
)
# 根据是否使用lowest quality添加参数
@ -170,10 +172,10 @@ class ODMProcessMonitor:
#f"--fast-orthophoto "
f"--skip-3dmodel "
)
elif self.mode == "三维模式":
docker_command += (
f"--skip-orthophoto "
)
# elif self.mode == "三维模式":
# docker_command += (
# f"--skip-orthophoto "
# )
docker_command += "--rerun-all"
self.logger.info(docker_command)
@ -223,7 +225,7 @@ class ODMProcessMonitor:
raise NotOverlapError
except NotOverlapError:
if use_lowest_quality:
if use_lowest_quality and self.mode == "快拼模式":
self.logger.warning(
"检测到not overlap错误移除lowest quality参数后重试")
use_lowest_quality = False