如何基于目录动态生成WebODM所需的Python图像数据结构?
解决方案
你可以用Python标准库直接实现,不需要额外第三方解析器,核心思路是遍历目标目录、筛选图像文件、按要求构造元组结构。
方法1:手动映射MIME类型
import os def generate_webodm_images(image_dir): images_list = [] # 定义需要处理的图像格式扩展名 valid_extensions = (".jpg", ".jpeg", ".png", ".tif", ".tiff") for filename in os.listdir(image_dir): # 只处理指定格式的文件 if filename.lower().endswith(valid_extensions): file_full_path = os.path.join(image_dir, filename) # 根据扩展名匹配MIME类型 ext = os.path.splitext(filename)[1].lower() mime_map = { ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".png": "image/png", ".tif": "image/tiff", ".tiff": "image/tiff" } mime_type = mime_map.get(ext, "image/jpeg") # 构造WebODM要求的元组结构并添加到列表 images_list.append(("images", (filename, open(file_full_path, "rb"), mime_type))) return images_list
方法2:自动识别MIME类型(更灵活)
用mimetypes库自动判断文件的MIME类型,适配更多格式:
import os import mimetypes def generate_webodm_images(image_dir): images_list = [] valid_extensions = (".jpg", ".jpeg", ".png", ".tif", ".tiff") for filename in os.listdir(image_dir): if filename.lower().endswith(valid_extensions): file_full_path = os.path.join(image_dir, filename) # 自动获取MIME类型,无法识别时用默认值 mime_type, _ = mimetypes.guess_type(file_full_path) mime_type = mime_type or "image/jpeg" images_list.append(("images", (filename, open(file_full_path, "rb"), mime_type))) return images_list
使用方式
调用函数传入你的图像目录路径即可:
# 替换为你的图像目录绝对/相对路径 images = generate_webodm_images("/path/to/your/drone/images")
注意事项
- 如果你使用
requests库发送WebODM API请求,请求完成后requests会自动关闭这些打开的文件句柄,无需手动处理;如果是其他场景,记得在使用完后遍历列表关闭文件。 - 可以根据实际需求调整
valid_extensions里的格式,适配你的无人机拍摄的图像类型。
内容的提问来源于stack exchange,提问作者Oom_Ben
相关产品推荐
相关产品推荐

