如何用Python遍历目录文件,批量执行RasterVision栅格图像预测命令
批量调用RasterVision预测栅格图像的Python实现
以下是实现批量遍历目标目录、调用rastervision predict命令生成同名JSON和TIFF结果的Python代码:
import os import subprocess from glob import glob def batch_raster_predict(input_dir, output_dir, model_bundle_path): # 确保输出目录存在,不存在则创建 os.makedirs(output_dir, exist_ok=True) # 遍历输入目录下的所有.tif栅格文件(可根据需要修改后缀规则) raster_files = glob(os.path.join(input_dir, "*.tif")) for raster_path in raster_files: # 提取输入文件的纯文件名(不含路径和后缀) filename = os.path.splitext(os.path.basename(raster_path))[0] # 构建对应输出JSON和TIFF的路径 output_json = os.path.join(output_dir, f"{filename}.json") output_tif = os.path.join(output_dir, f"{filename}.tif") # 组装完整的rastervision命令 cmd = [ "rastervision", "predict", "--vector-label-uri", output_json, model_bundle_path, raster_path, output_tif ] try: # 执行命令并捕获输出 subprocess.run(cmd, check=True, capture_output=True, text=True) print(f"处理完成: {raster_path}") print(f"生成结果: {output_json} | {output_tif}\n") except subprocess.CalledProcessError as e: print(f"处理失败: {raster_path}") print(f"错误详情: {e.stderr}\n") # 配置核心路径参数(请替换为你的实际路径) INPUT_DIR = "/path/to/your/input/raster" OUTPUT_DIR = "/path/to/your/output/results" FIXED_MODEL_BUNDLE = "/path/to/your/model-bundle.zip" # 启动批量预测 batch_raster_predict(INPUT_DIR, OUTPUT_DIR, FIXED_MODEL_BUNDLE)
关键逻辑说明:
- 文件遍历:用
glob快速匹配目标目录下的所有.tif文件,若需支持.tiff等其他后缀,可修改匹配规则为*.tif*或添加多后缀匹配。 - 路径处理:通过
os.path模块解析文件名、拼接输出路径,保证输出文件与输入文件严格同名。 - 命令执行:使用
subprocess.run调用系统命令,check=True会在命令执行失败时抛出异常,方便定位问题;capture_output=True可记录命令的输出和错误日志。 - 目录预创建:
os.makedirs(..., exist_ok=True)确保输出目录存在,避免因目录缺失导致的写入失败。
额外提示:
- 确保本地环境已正确配置RasterVision,
rastervision命令可在终端正常执行。 - 若输入目录存在非栅格的
.tif文件,可添加文件头校验等逻辑过滤无效文件。 - 处理大量文件时,可引入
tqdm库添加进度条,提升可视化体验。
内容的提问来源于stack exchange,提问作者Tobias Rydlinge
相关产品推荐
相关产品推荐

