def parse_arguments():
"""解析命令行参数并验证"""
if len(sys.argv) < 2:
logger.error("使用方法: python3 {} onnx_model_path [platform] [dtype] [output_rknn_path]".format(sys.argv[0]))
logger.error("平台支持: {}".format(', '.join(SUPPORTED_PLATFORMS)))
logger.error("数据类型支持:")
for platforms, dtypes in SUPPORTED_DTYPES.items():
logger.error(" {}: {}".format(', '.join(platforms), ', '.join(dtypes)))
sys.exit(1)
# 必需参数
model_path = sys.argv[1]
if not os.path.exists(model_path):
logger.error(f"模型文件不存在: {model_path}")
sys.exit(1)
# 可选参数 - 平台
platform = DEFAULT_PLATFORM
if len(sys.argv) > 2:
platform = sys.argv[2]
if platform not in SUPPORTED_PLATFORMS:
logger.error(f"不支持的平台: {platform}")
sys.exit(1)
# 可选参数 - 数据类型
do_quant = DEFAULT_QUANT
if len(sys.argv) > 3:
dtype = sys.argv[3]
# 确定该平台支持的数据类型
valid_dtypes = next((dtypes for platforms, dtypes in SUPPORTED_DTYPES.items() if platform in platforms), [])
if not valid_dtypes:
logger.error(f"未知平台: {platform}")
sys.exit(1)
if dtype not in valid_dtypes:
logger.error(f"平台 {platform} 不支持数据类型: {dtype}")
logger.error(f"支持的数据类型: {', '.join(valid_dtypes)}")
sys.exit(1)
do_quant = dtype in ['i8', 'u8']
# 可选参数 - 输出路径
output_path = DEFAULT_RKNN_PATH
if len(sys.argv) > 4:
output_path = sys.argv[4]
# 确保输出目录存在
output_dir = os.path.dirname(output_path)
if output_dir and not os.path.exists(output_dir):
os.makedirs(output_dir)