81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
import os
|
|
import logging
|
|
import subprocess
|
|
import time
|
|
from typing import Dict
|
|
import pandas as pd
|
|
from utils.odm_monitor import ODMProcessMonitor
|
|
|
|
|
|
class CommandRunner:
|
|
"""执行网格处理命令的类"""
|
|
|
|
def __init__(self, output_dir: str, max_retries: int = 3, mode: str = "快拼模式"):
|
|
"""
|
|
初始化命令执行器
|
|
i
|
|
Args:
|
|
output_dir: 输出目录路径
|
|
max_retries: 最大重试次数
|
|
"""
|
|
self.output_dir = output_dir
|
|
self.max_retries = max_retries
|
|
self.logger = logging.getLogger('UAV_Preprocess.CommandRunner')
|
|
self.monitor = ODMProcessMonitor(max_retries=max_retries, mode=mode)
|
|
self.mode = mode
|
|
|
|
def _run_command(self, grid_idx: int):
|
|
"""执行单个网格的命令"""
|
|
try:
|
|
grid_dir = os.path.join(self.output_dir, f'grid_{grid_idx + 1}')
|
|
grid_dir = grid_dir[0].lower() + grid_dir[1:].replace('\\', '/')
|
|
|
|
# 简化命令构建
|
|
base_command = (
|
|
f"docker run --rm " # 移除 -i 参数
|
|
f"-v {grid_dir}:/datasets "
|
|
f"opendronemap/odm "
|
|
f"--project-path /datasets project "
|
|
f"--max-concurrency 10 "
|
|
f"--force-gps "
|
|
)
|
|
|
|
if self.mode == "快拼模式":
|
|
command = base_command + (
|
|
f"--feature-quality lowest "
|
|
f"--orthophoto-resolution 8 "
|
|
f"--fast-orthophoto "
|
|
f"--skip-3dmodel "
|
|
f"--rerun-all"
|
|
)
|
|
else:
|
|
command = base_command + "--rerun-all"
|
|
|
|
self.logger.info(f"运行命令: {command}")
|
|
success, error_msg = self.monitor.run_odm_with_monitor(
|
|
command, grid_dir, grid_idx)
|
|
|
|
if not success:
|
|
raise Exception(error_msg)
|
|
|
|
except Exception as e:
|
|
self.logger.error(f"网格 {grid_idx + 1} 处理失败: {str(e)}")
|
|
raise
|
|
|
|
def run_grid_commands(self, grid_points: Dict[int, pd.DataFrame]):
|
|
"""
|
|
为每个网格顺序运行指定命令
|
|
|
|
Args:
|
|
grid_points: 网格点数据字典,键为网格索引,值为该网格的点数据
|
|
"""
|
|
|
|
self.logger.info("开始执行网格处理命令")
|
|
|
|
for grid_idx in grid_points.keys():
|
|
try:
|
|
self._run_command(grid_idx)
|
|
except Exception as e:
|
|
self.logger.error(f"网格 {grid_idx + 1} 处理失败,停止后续执行: {str(e)}")
|
|
raise
|