当前位置: 首页 > news >正文

Python 参数配置使用 XML 文件的教程 || Python打包 || 模型部署

当配置项存储在外部文件(如 XML、JSON)时,修改配置无需重新编译和发布代码。通过更新 XML 文件即可调整参数,无需更改源代码,从而提升开发效率和代码可维护性。


1. 为什么选择 XML 配置文件

XML 配置文件具有多种优点,如良好的扩展性、可读性和兼容性等。然而,最重要的优势在于其简洁和优雅的结构。

在使用 Python 编写机器学习算法或其他算法时,99%的情况需要调用库并使用他人封装的代码。这过程中常常涉及文件路径、参数配置等问题。当算法开发到一定程度(基本不需要修改大的结构后),此时引入 XML 配置文件来管理输入输出文件及相关参数,不仅方便参数的调整,还简化了模型的打包过程。

以我自己的一个代码项目为例,使用 RANSAC 和 ICP 进行点云配准。在引入 XML 配置文件之前,代码如下:

if __name__ == "__main__":# 设置距离阈值voxel_size = 5distance_threshold = 4print(f"Using voxel size: {voxel_size}")print(f"Using distance threshold: {distance_threshold}")# 加载模型pcd_mri = load_and_convert_to_point_cloud("mri1.stl", num_points=8000)pcd_scan = preprocess_point_cloud(load_and_convert_to_point_cloud("scan2.stl", num_points=10000), voxel_size)pcd_helmet = load_and_convert_to_point_cloud("helmet2.stl", num_points=6000)   ...

虽然将需要修改的路径和参数集中在代码前部是一种良好的习惯,便于自己维护和调参,但对于他人来说,代码后部分仍然存在许多需要调整的参数:

# 使用RANSAC进行 mri -> scan 粗配准
result_ransac_mri_to_scan = o3d.pipelines.registration.registration_ransac_based_on_feature_matching(pcd_mri_down, pcd_scan_down, fpfh_mri, fpfh_scan, True,distance_threshold,o3d.pipelines.registration.TransformationEstimationPointToPoint(False),3,[o3d.pipelines.registration.CorrespondenceCheckerBasedOnEdgeLength(0.8),o3d.pipelines.registration.CorrespondenceCheckerBasedOnDistance(distance_threshold)],o3d.pipelines.registration.RANSACConvergenceCriteria(4000000, 500)
)# 使用RANSAC进行 helmet -> scan 粗配准
result_ransac_helmet_to_scan = o3d.pipelines.registration.registration_ransac_based_on_feature_matching(pcd_helmet_down, pcd_scan_down, fpfh_helmet, fpfh_scan, True,distance_threshold,o3d.pipelines.registration.TransformationEstimationPointToPoint(False),3,[o3d.pipelines.registration.CorrespondenceCheckerBasedOnEdgeLength(0.8),o3d.pipelines.registration.CorrespondenceCheckerBasedOnDistance(distance_threshold)],o3d.pipelines.registration.RANSACConvergenceCriteria(4000000, 500)
)

这些参数通常已经调试好,且不需要频繁修改,但其他开发者可能不清楚这些参数的具体含义和设置。因此,使用 XML 配置文件来规范化参数设置,是一种有效的解决方案。

2. 使用 XML 配置文件存储参数

通过一个 XML 配置文件来存储配准相关的参数,可以显著提升代码的可维护性和灵活性。以下是一个示例配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<config><Preprocessing><VoxelSize>5.0</VoxelSize></Preprocessing><Alignment><DistanceThreshold>4.0</DistanceThreshold></Alignment><ModelFiles><MRI>mri_model.stl</MRI><Scan>scan_model.stl</Scan></ModelFiles><NumPoints><MRI>8000</MRI><Scan>10000</Scan></NumPoints>
</config>

3. 解析 XML 文件并提取配置参数

使用 Python 的 xml.etree.ElementTree 库,可以轻松解析 XML 文件并提取所需的配置参数。以下是示例代码:

import xml.etree.ElementTree as ET# 从 XML 文件中加载参数
def load_parameters_from_xml(xml_file):tree = ET.parse(xml_file)root = tree.getroot()params = {'voxel_size': float(root.find('Preprocessing/VoxelSize').text),'distance_threshold': float(root.find('Alignment/DistanceThreshold').text),'model_files': {'mri': root.find('ModelFiles/MRI').text,'scan': root.find('ModelFiles/Scan').text,},'num_points': {'mri': int(root.find('NumPoints/MRI').text),'scan': int(root.find('NumPoints/Scan').text),}}return params

这样一来,代码不仅更加简洁优雅,还方便了他人的使用和维护。

4. 保存结果到 XML 文件

同样地,输出结果也可以通过 XML 文件进行保存。只要是可以 print 出来的内容,都可以使用 XML 来存储。这一方法的好处在于,若你的算法需要被集成到某个框架中,其他人也可以轻松通过读取 XML 文件来实现输入输出接口。

def save_results_to_xml(file_name, voxel_size, distance_threshold, ransac_results, icp_results):root = ET.Element("Results")# 添加基本参数parameters = ET.SubElement(root, "Parameters")ET.SubElement(parameters, "VoxelSize").text = str(voxel_size)ET.SubElement(parameters, "DistanceThreshold").text = str(distance_threshold)# 添加 RANSAC 和 ICP 结果# 省略具体的添加过程,最后美化 XML 并写入文件with open(file_name, "w", encoding="utf-8") as f:f.write(pretty_xml)

5. 完整示例代码

以下是最终的完整示例代码,展示了如何使用 XML 配置文件来管理参数,并进行点云配准:

if __name__ == "__main__":try:import osimport sysBASE_DIR = os.path.dirname(os.path.realpath(sys.argv[0]))xml_file_path = os.path.join(BASE_DIR, 'AlignPoint_input.xml')params = load_parameters_from_xml(xml_file_path)voxel_size = params['voxel_size']distance_threshold = params['distance_threshold']# 加载和预处理点云mri_file_path = os.path.join(BASE_DIR, params['model_files']['mri'])scan_file_path = os.path.join(BASE_DIR, params['model_files']['scan'])pcd_mri = load_and_convert_to_point_cloud(mri_file_path, params['num_points']['mri'])pcd_scan = preprocess_point_cloud(load_and_convert_to_point_cloud(scan_file_path, params['num_points']['scan']), voxel_size)# 计算 FPFH 特征和下采样点云pcd_mri_down, fpfh_mri = compute_fpfh_features(pcd_mri, voxel_size)pcd_scan_down, fpfh_scan = compute_fpfh_features(pcd_scan, voxel_size)# 执行 RANSAC 和 ICP 配准# ...# 保存结果到 XML 文件save_results_to_xml("AlignPoint_output.xml", voxel_size, distance_threshold, ransac_results, icp_results)# 可视化对齐结果visualize_alignment(pcd_mri, pcd_scan, result_icp_mri_to_scan.transformation)except Exception as e:print("An error occurred:", e)with open("error_log.txt", "w") as f:f.write(str(e))

OVER!

相关文章:

Python 参数配置使用 XML 文件的教程 || Python打包 || 模型部署

当配置项存储在外部文件&#xff08;如 XML、JSON&#xff09;时&#xff0c;修改配置无需重新编译和发布代码。通过更新 XML 文件即可调整参数&#xff0c;无需更改源代码&#xff0c;从而提升开发效率和代码可维护性。 1. 为什么选择 XML 配置文件 XML 配置文件具有多种优点…...

[SV]如何在UVM环境中使用C Model

在UVM环境中使用C Memory 一、C语言实现Memory 1.1 代码说明 Memory 初始化: memory_init() 函数将内存空间初始化为 0,并初始化互斥锁。AXI 写操作 (axi_write): 检查地址范围是否合法。使用 memcpy 将数据从输入缓冲区写入模拟内存。使用互斥锁保证线程安全。AXI 读操作 …...

十大开源的Cursor AI替代方案

随着AI的兴起&#xff0c;所使用的工具也在不断进步。Cursor AI 作为一个强大的编码助手&#xff0c;已经成为开发人员不可或缺的工具。开源替代方案提供了透明性、个性化和成本效益。本文深入探讨了Cursor AI 的十大开源替代方案&#xff0c;这些方案将丰富您的编码体验&#…...

相机光学(四十六)——镜头马达(VCM)控制策略模式

One Step Mode、Linear Slope Control&#xff08;LSC&#xff09;和Acceleration Control是三种不同的控制模式&#xff0c;它们在控制策略和应用场景上有所区别。这些控制模式在VCM中的应用是为了提高其性能&#xff0c;减少振动&#xff0c;加快响应速度&#xff0c;并提高定…...

专业140+总分410+浙江大学842信号系统与数字电路考研经验浙大电子信息与通信工程,真题,大纲,参考书。

考研落幕&#xff0c;本人本中游211&#xff0c;如愿以偿考入浙江大学&#xff0c;专业课842信号系统与数字电路140&#xff0c;总分410&#xff0c;和考前多次模考预期差距不大&#xff08;建议大家平时做好定期模考测试&#xff0c;直接从实战分数中&#xff0c;找到复习的脉…...

了解ARM的千兆以太网——RK3588

1. 简介 本文并不重点讲解调试内容&#xff0c;重点了解以太网在ARM设计中的框架以及在设备树以及驱动的一个整体框架。了解作为一个驱动开发人员当拿到一款未开发过的ARM板卡应该怎么去把网卡配置使用起来。 2. 基础知识介绍 在嵌入式ARM中实现以太网的解决方案通常有以下两种…...

JavaFX使用jfoenix的UI控件

jfoenix还是一个不错的样式&#xff0c;推荐使用&#xff0c;而且也可以支持scene builder中的拖拖拽拽 需要注意的是过高的javafx版本可能会使得某些样式或控件无法使用 比如alert控件&#xff0c;亲测javaFX 19版本可以正常使用 1.在pom.xml中引入依赖 GitHub地址https://gi…...

Linux(Ubuntu)命令大全——已分类整理,学习、查看更加方便直观!(2024年最新编制)

Hello! 认真好学的小伙伴们&#xff0c;大家好呀&#xff08;Respect~&#xff09;&#xff01;我是 H u a z z i Huazzi Huazzi&#xff0c;欢迎观看本篇博客&#xff0c;接下来让我们一起来学习 Ubuntu命令大全 吧&#xff01;祝你有所收获&#xff01; 文章目录 前言&#x…...

单片机:实现教学上下课的自动打玲(附带源码)

单片机实现教学上下课的自动打铃 在学校或其他教育机构中&#xff0c;定时的打铃系统被广泛应用&#xff0c;用于提醒学生和老师上下课的时间。一个简单的自动打铃系统可以通过单片机实现&#xff0c;结合蜂鸣器和定时器控制&#xff0c;可以在设定的时间点自动打铃&#xff0…...

进程通信方式---共享映射区(无血缘关系用的)

5.共享映射区&#xff08;无血缘关系用的&#xff09; 文章目录 5.共享映射区&#xff08;无血缘关系用的&#xff09;1.概述2.mmap&&munmap函数3.mmap注意事项4.mmap实现进程通信父子进程练习 无血缘关系 5.mmap匿名映射区 1.概述 原理&#xff1a;共享映射区是将文件…...

深度学习实战智能交通计数

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对车辆目标数据集进行训练和优化&#xff0c;该数据集包含丰富的车辆目标图像样本…...

【MySQL】MySQL表的操作

【MySQL】MySQL表的操作 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;MySQL&#x1f34b; &#x1f33c;文章目录&#x1f33c; 1. 创建表 2. 查看表结构 3. 修改表 4. 删除表 1. 创建表 create table table_name(表名称)( fiel…...

Redis篇-12--数据结构篇4--Hash内存模型(数组,链表,压缩列表zipList,哈希表,短结构)

Redis的Hash数据结构用于存储键值对&#xff08;key-value形式&#xff09;的集合&#xff08;类似java中HashMap或对象&#xff09;。为了在保证高效性能的同时节省内存&#xff0c;Redis对Hash的底层实现进行了多种优化。特别是通过使用压缩列表&#xff08;ziplist&#xff…...

二、windows环境下vscode使用wsl教程

本篇文件介绍了在windows系统使用vscode如何连接使用wsl&#xff0c;方便wsl在vscode进行开发。 1、插件安装 双击桌面vscode&#xff0c;按快捷键CtrlShiftX打开插件市场&#xff0c;搜索【WSL】点击安装即可。 2、开启WSL的linux子系统 点击左下方图标【Open a Remote Win…...

Qwen2-VL微调体验

1.配置环境 2.数据集准备 3.模型下载 4.注册SwanLab 5.微调 6.训练过程可视化 1.配置环境 本博客使用的是2B模型&#xff0c;所以仅用了单卡3090&#xff0c;若大一点的模型&#xff0c;自行根据实际情况准备显卡 安装Python>3.8 安装Qwen2-VL必要的库 pip install…...

论文的模拟环境和实验环境

模拟环境和实验环境 在撰写SCI计算机领域论文时,模拟环境和实验环境是两个重要的概念,它们之间存在显著的差异。 模拟环境主要是利用计算机、数学方法等手段对实际系统进行描述和分析的过程。在计算机科学中,模拟环境可以用于模拟各种算法、系统或网络的行为,以便在不需要…...

MySQL EXPLAIN 详解:一眼看懂查询计划

在日常的数据库开发中&#xff0c;我们经常需要分析 SQL 查询性能&#xff0c;而 EXPLAIN 是 MySQL 提供的利器&#xff0c;可以帮我们快速理解查询计划&#xff0c;优化慢查询。本文将详细解析 EXPLAIN 的输出字段及其含义&#xff0c;并结合实际案例分享优化思路。 一、什么是…...

自动呼入机器人如何与人工客服进行无缝切换?

自动呼入机器人如何与人工客服进行无缝切换&#xff1f; 原作者&#xff1a;开源呼叫中心FreeIPCC&#xff0c;其Github&#xff1a;https://github.com/lihaiya/freeipcc 自动呼入机器人与人工客服的无缝切换详解 自动呼入机器人与人工客服之间的无缝切换是确保客户体验连续…...

二分类模型的性能评价指标

1. 混淆矩阵 (Confusion Matrix) 预测正类预测负类实际正类 (P)True Positive (TP)False Negative (FN)实际负类 (N)False Positive (FP)True Negative (TN) True Positive (TP): 模型正确预测为正类的样本数。True Negative (TN): 模型正确预测为负类的样本数。False Positi…...

鸿蒙操作系统简介

华为鸿蒙系统&#xff08;HUAWEI HarmonyOS&#xff09;&#xff0c;是华为公司于2019年8月9日在东莞举行的华为开发者大会&#xff08;HDC.2019&#xff09;上正式发布的面向全场景的分布式操作系统&#xff0c;可以创造一个超级虚拟终端互联的世界&#xff0c;将人、设备、场…...

AI 模型调度平台的系统架构

AI模型调度平台的系统架构&#xff1a;智能时代的核心引擎 在人工智能技术飞速发展的今天&#xff0c;AI模型调度平台成为企业实现智能化转型的关键基础设施。它通过高效管理、调度和优化AI模型资源&#xff0c;帮助用户快速部署和运行复杂的AI任务。本文将深入解析AI模型调度…...

大厂真实高频的 LLM 大模型面试 36 题例题详解

一、基础原理篇(8 题) 1. 什么是 Transformer?核心结构是什么? 答:Transformer 是基于自注意力机制的 seq2seq 模型,完全替代 RNN 结构。核心结构: Encoder(编码)+ Decoder(解码) 多头注意力(Multi-Head Attention) 前馈网络 FFN 层归一化、残差连接举例:GPT 只…...

Serverless测试噩梦:冷启动延迟搞垮电商大促

一场被“隐形杀手”击溃的战役凌晨两点&#xff0c;某头部电商平台的“双十一”大促作战指挥中心。流量曲线在预热阶段平稳爬升&#xff0c;技术团队信心满满——所有核心交易链路都已迁移至先进的Serverless架构&#xff0c;理论上具备无限弹性。然而&#xff0c;零点的钟声敲…...

如何高效使用Dism++:Windows系统维护的终极解决方案

如何高效使用Dism&#xff1a;Windows系统维护的终极解决方案 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language 你是否曾为Windows系统运行缓慢而烦恼&#xff1f…...

2026短视频获客决胜点:AI矩阵系统哪家好?深度评测四大“增长黑科技”

摘要&#xff1a;进入2026年&#xff0c;短视频矩阵运营已从“人力的博弈”全面进化为“算法、AI产力与底层架构安全”的代际竞赛。当企业主在决策“AI矩阵系统哪家好”时&#xff0c;考量标准已不再是简单的分发功能&#xff0c;而是国内IP隔离的稳健性、全球大模型&#xff0…...

YouTube面临儿童AI内容监管挑战

专家呼吁YouTube停止向儿童推荐AI视频近日&#xff0c;超200名儿童发展专家及相关机构联名致信谷歌和YouTube高层&#xff0c;强烈要求YouTube及YouTube Kids停止向未成年用户展示或推荐AI生成视频。这些专家指出&#xff0c;大量所谓有“教育用途”的AI视频其实内容空洞、质量…...

打破设备壁垒:VR-Reversal实现3D内容自由视角全设备适配

打破设备壁垒&#xff1a;VR-Reversal实现3D内容自由视角全设备适配 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址: https://gitcode.com/gh_…...

python-langchain框架(1-8-2 缓存机制——验证缓存的效果)

当用户提出一个常见问题时&#xff0c;首次调用大模型需要经历网络传输、排队等待、模型推理等完整链路&#xff0c;响应时间通常在1至3秒。这个时长已超过人类对“流畅交互”的心理阈值&#xff08;200毫秒&#xff09;&#xff0c;用户会明显感知到“卡顿”和“等待焦虑”。而…...

博士论文的“破茧”时刻:好写作AI如何陪你走完最后一公里

一个论文科普博主眼中的“学术极限运动辅助器” 亲爱的博士生朋友们&#xff0c;今天我们聊点“不轻松”的话题。 当你的同学在朋友圈晒工作、晒娃、晒旅游时&#xff0c;你在晒什么&#xff1f;晒图书馆的凌晨三点&#xff0c;晒被导师批注得“血肉模糊”的草稿&#xff0c;晒…...

图网络梯度计算与反向传播:自动微分技术的完整指南

图网络梯度计算与反向传播&#xff1a;自动微分技术的完整指南 【免费下载链接】graph_nets Build Graph Nets in Tensorflow 项目地址: https://gitcode.com/gh_mirrors/gr/graph_nets 在深度学习领域&#xff0c;图网络&#xff08;Graph Networks&#xff09;凭借其处…...