Chat-with-NeRF:三维场景重建与对话式AI的融合实践

news2026/5/18 16:18:38
1. 项目概述当NeRF遇见对话式AI最近在三维视觉和AIGC的交叉领域一个名为“chat-with-nerf”的项目引起了我的注意。简单来说它实现了一个听起来很科幻的功能你上传一张或多张照片系统会基于这些照片重建出一个三维场景这个过程由NeRF技术完成然后你可以像跟一个“导游”聊天一样用自然语言向这个三维场景提问比如“沙发左边有什么”、“从窗户看出去能看到什么”AI会理解你的问题并在三维场景中进行分析和推理最终用文字回答你。这不仅仅是“看图说话”的升级版。传统的视觉问答VQA模型处理的是二维图片它告诉你图片里“有什么”。而“chat-with-nerf”构建的是一个三维的、具有空间关系的数字孪生环境。AI不仅能识别物体更能理解物体之间的相对位置前后、左右、内外、遮挡关系甚至能进行一些简单的空间推理和想象例如推断被遮挡部分的可能样貌。这为机器人环境理解、沉浸式内容交互、智能家居导览等领域打开了一扇新的大门。这个项目巧妙地缝合了两个前沿技术栈一是神经辐射场NeRF负责从图像中高质量地重建三维场景二是大型语言模型LLM负责理解自然语言指令并生成符合三维上下文的回答。对于开发者、三维视觉研究者以及对多模态AI应用感兴趣的工程师来说这是一个绝佳的、可实操的研究与学习样板。接下来我将深入拆解其核心思路、技术选型、实操细节并分享在复现和调试过程中积累的一手经验。2. 核心架构与工作流拆解2.1 整体流程从2D到3D再到对话项目的核心工作流可以清晰地分为三个阶段理解这个流程是后续一切操作的基础。第一阶段三维重建NeRF建模这是整个系统的基石。你提供的图片被送入一个NeRF模型例如Instant-NGP或NeRFStudio框架下的模型进行训练。模型会学习场景的几何和外观最终生成一个可以任意视角渲染的三维表示。这个阶段输出的不是一个传统的三角网格而是一个神经网络的权重文件它隐式地定义了整个场景。第二阶段三维场景理解与特征提取这是连接“三维”和“语言”的桥梁也是最精妙的部分。系统不会让LLM直接去“看”NeRF的原始输出一堆权重那对LLM来说是天书。取而代之的是项目采用了一种“特征注入”的策略。具体来说当用户提出一个问题如“描述一下房间的布局”系统会视角采样根据问题在三维场景中生成一系列有代表性的虚拟相机视角例如房间的四个角落、中心俯视等。渲染与编码从这些视角渲染出RGB图像和对应的深度图。然后使用一个视觉编码器如CLIP的ViT将这些渲染图编码成高维特征向量。这些特征向量捕获了该视角下的视觉语义信息。构建文本化场景描述有时系统还会使用一个图像描述模型如BLIP将关键视角的渲染图转换成一段文本描述例如“这是一个现代风格的客厅中央有一张灰色沙发沙发左侧有一盏落地灯正前方是一台挂在墙上的电视”。这段文本描述将成为后续LLM理解场景的重要上下文。第三阶段基于上下文的对话LLM推理LLM如Vicuna, Llama登场。系统将以下信息整合成一个精心设计的提示词Prompt输入给LLM用户问题 “沙发左边有什么”三维场景的文本描述来自第二阶段生成的场景概述。当前对话历史如果有多轮对话。系统指令 告诉LLM它是一个三维场景的助手回答必须基于提供的场景信息对于不确定或不可见的内容要诚实回答。LLM基于这些丰富的上下文进行推理生成最终的自然语言回答。整个流程实现了“2D图片 → 3D神经场 → 多视角视觉/文本特征 → 上下文增强的LLM → 3D空间相关的回答”的闭环。2.2 技术栈选型背后的考量为什么项目会选择这样的技术组合每一个选择都有其深意。1. NeRF框架Instant-NGP / NeRFStudio项目没有使用最早期的原始NeRF因为其训练速度极慢。Instant-NGP通过哈希编码和多分辨率网格将训练时间从数天缩短到数分钟这对于交互式应用至关重要。NeRFStudio则提供了一个更统一、模块化的框架方便集成各种先进的NeRF变体如NeRF、Mip-NeRF并提供了强大的数据预处理、可视化和导出工具。选择它们是在“重建质量”、“训练速度”和“开发便利性”之间取得的平衡。2. 视觉编码与描述模型CLIP 和 BLIPCLIP 它的强大之处在于其视觉特征与文本特征在共享空间中对齐。这意味着从场景渲染图中提取的CLIP特征与问题文本的CLIP特征在语义上是可比较的。虽然在这个项目中CLIP特征主要作为视觉信息的密集编码但其设计初衷为未来实现“指哪打哪”根据文本在3D空间中定位功能预留了可能性。BLIP 它的任务是生成高质量、描述性的文本。相比于让LLM直接“理解”CLIP特征将视觉信息先转化为LLM的母语——自然语言是一种更高效、更可靠的“降维”策略。这大大降低了LLM理解三维场景的难度提高了问答的准确性和丰富性。3. 大型语言模型Vicuna / Llama 2选择这些开源LLM而非闭源API如GPT-4核心考量是可控性、私有化部署和成本。整个系统涉及敏感的原始图像数据、生成的三维模型以及可能的私有对话内容使用本地部署的LLM能保证数据不出域。此外固定版本的模型确保了系统行为的可复现性避免了因API更新导致的意外变化。Vicuna因其在对话能力上的优化而被青睐。注意 这个架构是典型的“松耦合”设计。NeRF、视觉编码器、LLM相对独立。这意味着你可以随时替换其中的任何一个模块。例如用更快的3D Gaussian Splatting替换NeRF用更强大的InternVL替换CLIP或者用最新的开源LLM替换Vicuna。这种设计极大地提升了项目的可扩展性和生命力。3. 环境搭建与数据准备实操3.1 本地开发环境配置要跑通这个项目你需要一个不算太弱的GPU环境建议RTX 3060 12G及以上。以下是我在Ubuntu 20.04/22.04上验证过的步骤Windows用户可通过WSL2获得类似体验。首先克隆项目仓库并创建Python虚拟环境这是避免依赖冲突的标准操作。git clone https://github.com/sled-group/chat-with-nerf.git cd chat-with-nerf python -m venv nerf_chat_env source nerf_chat_env/bin/activate # Windows: nerf_chat_env\Scripts\activate接下来安装PyTorch。这里有一个关键坑点项目依赖的torch版本可能与NeRF框架如nerfstudio有特定要求。最稳妥的方法是先根据你的CUDA版本安装PyTorch然后再安装项目其他依赖。例如对于CUDA 11.8pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118然后安装项目核心依赖。项目通常会提供requirements.txt但可能需要微调。pip install -r requirements.txt如果安装nerfstudio时遇到问题可以尝试单独安装因为它对open3d、jax等依赖的版本要求比较严格。pip install nerfstudio # 或者从源码安装最新版以获取某些特性 # pip install githttps://github.com/nerfstudio-project/nerfstudio.git实操心得 虚拟环境是必须的。因为NeRF相关的库如tiny-cuda-nn对编译环境非常敏感混用版本极易导致无法编译或运行时错误。建议为这个项目单独创建一个环境并记录下所有成功安装的包版本便于后续复现。3.2 训练数据采集与处理你的对话能力上限很大程度上由你的三维重建质量决定。而重建质量又取决于输入图片。1. 拍摄指南针对室内场景设备 智能手机即可但请关闭广角镜头会产生畸变使用主摄。保持曝光和白平衡锁定避免画面忽明忽暗。拍摄模式 围绕物体或场景缓慢移动拍摄一段视频4K, 30fps比单张拍照更高效。后期可以从视频中均匀抽帧。运动轨迹 想象一个球体你沿着球面拍摄。对于房间从门口开始沿墙壁缓慢平移同时相机始终指向房间中心。然后抬头、低头拍摄不同高度。关键是要有足够的视差变化即同一物体在不同图片中出现在不同位置。数量 一个小物体如椅子需要50-100张一个标准房间需要200-300张。覆盖度比数量更重要。光线 避免强光直射和剧烈光影变化如闪烁的屏幕。柔和、均匀的光线最佳。2. 数据处理流程拿到图片或视频抽帧后不能直接扔给NeRF。需要先进行**运动恢复结构SfM**处理以估计每张图片的相机位姿位置和朝向。nerfstudio提供了傻瓜式工具ns-process-data。# 假设你的图片在 data/my_room/images 目录下 ns-process-data images --data data/my_room/images --output-dir data/my_room/colmap这个命令会调用colmap进行特征点提取、匹配和稀疏重建。生成一个transforms.json文件里面包含了每张图片对应的相机内参焦距、主点和外参旋转矩阵、平移向量。这个json文件就是NeRF训练所需的标准化数据格式。踩坑记录 如果SfM失败常见于纹理重复、玻璃反光或光线太暗的场景transforms.json可能为空或位姿错误。解决方案1) 尝试colmap的图形界面手动添加特征点对。2) 使用hloc等更先进的SfM工具。3) 如果只是少量图片位姿不准可以直接删除这些图片。4. 核心模块深度解析与实现4.1 NeRF模型训练与优化数据准备好后就可以开始训练三维模型了。nerfstudio支持多种模型对于室内场景nerfacto是一个不错的默认选择它在速度和质量上取得了很好的平衡。ns-train nerfacto --data data/my_room/colmap --vis viewer--vis viewer 会在训练时启动一个Web可视化界面默认在http://localhost:7007你可以实时查看训练过程中的渲染效果非常直观。训练参数调整是影响结果的关键迭代次数max-num-iterations 通常15000-30000次迭代足以让室内场景收敛。可以通过可视化界面判断当新视角的渲染图不再有闪烁的浮游物漂浮物且细节清晰时即可停止。分辨率 在nerfstudio的配置中你可以设置最终输出模型的分辨率。更高的分辨率意味着更精细的细节但也会增加模型体积和渲染开销。对于对话应用中等分辨率通常足够。导出模型 训练完成后需要将模型导出为项目后续模块可用的格式。nerfstudio支持导出为.ply点云或.obj网格但对于chat-with-nerf它通常需要的是原始的模型检查点.ckpt文件或特定的特征文件。# 假设训练运行的输出目录是 outputs/my_room/nerfacto/2024-01-01_123456 ns-export poisson --load-config outputs/my_room/nerfacto/2024-01-01_123456/config.yml --output-dir exports/my_room这个命令会使用泊松表面重建算法从NeRF生成一个网格模型。但请注意chat-with-nerf项目可能要求你直接使用训练好的nerf模型进行实时渲染而不是网格。你需要根据项目的具体接口决定是导出网格还是直接提供模型加载路径。4.2 视觉-语言上下文构建器这是项目的“智能”所在。我们来看看它的核心代码逻辑以伪代码/思路形式呈现。首先需要加载训练好的NeRF模型和一个视觉编码器如CLIP。import torch from nerfstudio.models.base_model import Model from PIL import Image import open_clip # 或 transformers 中的 CLIP # 1. 加载 NeRF 模型 nerf_model Model.from_config(nerf_checkpoint_path) nerf_model.eval() # 2. 加载 CLIP 模型 clip_model, preprocess open_clip.create_model_and_transforms(ViT-B-32, pretrainedlaion2b_s34b_b79k) clip_model.eval() def extract_scene_context(nerf_model, question): 根据问题从NeRF场景中提取文本化上下文。 context_parts [] # 策略1生成全局描述 # 渲染几个预设的全局视角如顶视图、四个立面视图 global_views [top, front, back, left, right] for view in global_views: camera_pose calculate_camera_pose_for_view(view, scene_bounds) rgb_render nerf_model.render(camera_pose)[rgb] # 假设渲染函数返回RGB # 将渲染图转为PIL Image rgb_image (rgb_render * 255).astype(np.uint8) pil_image Image.fromarray(rgb_image) # 使用BLIP生成描述 blip_description blip_model.generate(pil_image) context_parts.append(f从{view}视角看{blip_description}) # 策略2如果问题涉及特定物体渲染其特写 # 这里需要一个简单的物体检测或 grounding 模块根据问题关键词定位 # 例如问题含“沙发”则用NeRF的密度场或特征场估计沙发中心并渲染其近景 if 沙发 in question: sofa_center estimate_object_center(nerf_model, sofa) # 假设的函数 close_up_pose generate_close_up_camera(sofa_center) close_up_render nerf_model.render(close_up_pose)[rgb] # ... 同样生成描述 context_parts.append(f沙发特写{blip_description_for_close_up}) # 将所有描述合并成一段连贯的文本 full_context 。.join(context_parts) return full_context这个函数的核心思想是动态且有针对性地生成场景描述。它不是事先生成所有描述而是根据用户的问题智能地选择需要渲染的视角从而生成最相关的上下文减少冗余信息对LLM的干扰。4.3 提示词工程与LLM集成有了场景的文本描述下一步就是构建给LLM的提示词。提示词的设计直接决定了回答的质量和相关性。一个精心设计的提示词模板可能长这样你是一个专业的三维场景分析助手。请基于以下对某个三维场景的描述回答用户的问题。描述是系统从多个视角自动生成的可能不完全精确请基于此进行合理推断。 【三维场景描述】 {scene_context} 【对话历史】 {history} 【当前用户问题】 {question} 请遵守以下规则 1. 回答必须严格基于上述场景描述。 2. 如果描述中没有明确信息可以回答该问题请直接说“根据提供的场景信息无法确定”。 3. 描述中可能包含不确定的词汇如“可能”、“似乎”请在回答中体现这种不确定性。 4. 回答应简洁、准确直接针对问题。 助手将{scene_context}、{history}、{question}替换为实际内容就构成了完整的提示词。然后使用本地部署的LLM如通过text-generation-webui提供的API或直接调用transformers库进行推理。from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer AutoTokenizer.from_pretrained(lmsys/vicuna-7b-v1.5) model AutoModelForCausalLM.from_pretrained(lmsys/vicuna-7b-v1.5, device_mapauto) def ask_llm(prompt): inputs tokenizer(prompt, return_tensorspt).to(model.device) outputs model.generate(**inputs, max_new_tokens150, temperature0.7, do_sampleTrue) answer tokenizer.decode(outputs[0], skip_special_tokensTrue) # 提取“助手”之后的部分作为回答 answer answer.split(助手)[-1].strip() return answer核心技巧 **温度temperature**参数至关重要。设为较低值如0.1-0.3会使回答更确定、更遵循上下文但可能略显呆板设为较高值如0.7-0.9会使回答更有创造性但也更容易“胡编乱造”。对于注重事实准确性的场景问答建议使用较低的温度。5. 系统集成与交互前端搭建5.1 后端服务设计与API暴露一个完整的应用需要将上述模块串联起来并提供标准的API接口。我们可以使用FastAPI来快速构建后端。from fastapi import FastAPI, HTTPException from pydantic import BaseModel from typing import Optional import uvicorn app FastAPI(titleChat with NeRF API) # 内存中保存模型和对话状态生产环境需用数据库 nerf_model_cache {} conversation_sessions {} class QuestionRequest(BaseModel): session_id: str question: str nerf_model_path: str class AnswerResponse(BaseModel): answer: str session_id: str app.post(/ask, response_modelAnswerResponse) async def ask_question(req: QuestionRequest): # 1. 加载或获取缓存的NeRF模型 if req.nerf_model_path not in nerf_model_cache: nerf_model load_nerf_model(req.nerf_model_path) # 自定义加载函数 nerf_model_cache[req.nerf_model_path] nerf_model else: nerf_model nerf_model_cache[req.nerf_model_path] # 2. 获取或初始化对话历史 if req.session_id not in conversation_sessions: conversation_sessions[req.session_id] [] history conversation_sessions[req.session_id] # 3. 构建场景上下文集成上一节的函数 scene_context extract_scene_context(nerf_model, req.question) # 4. 构建提示词并调用LLM prompt build_prompt(scene_context, history, req.question) answer ask_llm(prompt) # 5. 更新对话历史 history.append({user: req.question, assistant: answer}) # 可选只保留最近N轮历史避免提示词过长 if len(history) 5: history history[-5:] conversation_sessions[req.session_id] history return AnswerResponse(answeranswer, session_idreq.session_id) if __name__ __main__: uvicorn.run(app, host0.0.0.0, port8000)这个API设计了一个/ask端点接收会话ID、用户问题和NeRF模型路径返回AI的回答。会话ID用于维护多轮对话的上下文。5.2 轻量级Web前端实现为了让非技术用户也能方便地使用一个简单的Web前端必不可少。我们可以用HTML、JavaScript和一点CSS快速实现。!DOCTYPE html html head titleChat with My 3D Room/title style #chat-box { height: 400px; border: 1px solid #ccc; overflow-y: auto; padding: 10px; } .user-msg { text-align: right; color: blue; } .bot-msg { text-align: left; color: green; } /style /head body h2与你的3D场景对话/h2 div idchat-box/div input typetext idquestion-input placeholder输入你的问题... stylewidth: 70%; button onclicksendQuestion()发送/button script let sessionId user_ Math.random().toString(36).substr(2, 9); const nerfModelPath exports/my_room; // 你的模型路径 function appendMessage(sender, text) { const chatBox document.getElementById(chat-box); const msgDiv document.createElement(div); msgDiv.className sender -msg; msgDiv.innerHTML strong${sender}:/strong ${text}; chatBox.appendChild(msgDiv); chatBox.scrollTop chatBox.scrollHeight; } async function sendQuestion() { const input document.getElementById(question-input); const question input.value.trim(); if (!question) return; appendMessage(用户, question); input.value ; try { const response await fetch(http://localhost:8000/ask, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ session_id: sessionId, question: question, nerf_model_path: nerfModelPath }) }); const data await response.json(); appendMessage(助手, data.answer); } catch (error) { appendMessage(系统, 请求出错 error.message); } } // 回车发送 document.getElementById(question-input).addEventListener(keypress, function(e) { if (e.key Enter) sendQuestion(); }); /script /body /html这个前端页面包含一个聊天框、一个输入框和一个发送按钮。它通过JavaScript调用我们刚刚搭建的FastAPI后端实现实时问答。将nerfModelPath替换为你实际训练好的模型路径即可。6. 性能优化与常见问题排查6.1 推理速度优化技巧整个流程中最耗时的部分是NeRF渲染和LLM推理。1. NeRF渲染加速降低渲染分辨率 用于上下文生成的渲染图不需要4K高清512x512甚至256x256的分辨率通常足够CLIP/BLIP提取特征。缓存渲染结果 对于常见的视角如全局视角其渲染结果和生成的描述文本可以预先计算并缓存。只有当用户问题涉及非常特殊的视角时才进行实时渲染。使用更快的渲染器 考虑使用基于网格的简化表示如从NeRF导出的.obj网格配合传统光栅化器进行快速渲染虽然会损失一些视觉质量但速度可提升数个量级。2. LLM推理加速模型量化 将LLM从FP16精度量化到INT8或INT4可以大幅减少显存占用并提升推理速度对精度损失很小。使用bitsandbytes或GPTQ库可以轻松实现。使用更小的模型 7B参数的模型如Vicuna-7B在大多数场景问答上已经表现不错。如果对响应速度要求极高可以尝试3B甚至1B参数的模型。流式输出 采用流式响应Token-by-Token可以让用户更快地看到回答的开头提升体验感。6.2 常见问题与解决方案实录在实际部署和测试中你肯定会遇到各种问题。下面是我踩过的一些坑和解决办法。问题现象可能原因排查步骤与解决方案NeRF训练失败损失不下降1. 相机位姿估计不准SfM失败。2. 图片曝光不一致或动态物体。3. 学习率设置不当。1. 检查transforms.json用ns-viewer预览位姿确认相机轨迹合理。重新运行SfM或手动修正。2. 检查图片序列删除过曝、过暗或有行人/车辆移动的帧。使用图像处理软件进行简单的曝光均衡。3. 尝试降低学习率如从0.01降到0.001并使用warm-up。LLM回答与场景完全无关胡言乱语1. 场景上下文scene_context太短或信息不足。2. 提示词Prompt设计不佳未给LLM足够的约束。3. LLM温度Temperature参数过高。1. 增加渲染的视角数量或使用更详细的图像描述模型。在extract_scene_context函数中增加特写视角。2. 强化提示词中的规则例如明确要求“必须基于以下描述”并在描述前后添加特殊标记如###场景描述###。3. 将temperature降至0.1-0.3并尝试top_p0.9。回答总是“无法确定”或过于保守1. 场景描述中包含大量“可能”、“似乎”等不确定词汇。2. 提示词中“无法确定”的规则过于严格。1. 调整BLIP的描述生成参数或使用更确定的描述模型。可以对描述进行后处理替换掉过于模糊的词汇。2. 修改提示词将“无法确定”改为“请根据描述进行合理的推断”鼓励LLM在信息不全时进行有限度的推理。系统响应非常慢30秒1. 每次问答都重新渲染多个视角。2. LLM未量化加载和推理慢。3. 硬件性能不足GPU内存小。1. 实现视角渲染缓存机制对相同或相似的问题复用缓存。2. 对LLM进行4-bit或8-bit量化。使用vLLM等高性能推理库。3. 考虑使用云GPU服务或降低NeRF和LLM的模型规模。前端发送请求后收到CORS错误前端页面与后端API域名/端口不同浏览器安全策略阻止。在FastAPI后端添加CORS中间件from fastapi.middleware.cors import CORSMiddleware然后配置允许前端的源。6.3 效果评估与迭代方向项目跑通后如何评估其效果可以设计一些测试用例基础物体识别“房间里有多少把椅子”空间关系理解“电视在沙发的哪个方向”属性查询“沙发的颜色是什么”简单推理“如果我坐在沙发上能看到窗外的树吗” 记录LLM回答的准确率。效果不佳时按以下顺序排查和迭代提升三维重建质量这是上限。确保NeRF模型清晰、无伪影。优化场景描述这是信息传递的桥梁。尝试不同的视角采样策略、不同的描述模型BLIP2、LLaVA等甚至引入物体检测框信息。精调提示词这是LLM的“操作手册”。针对不同类型的错误微调提示词的指令和格式。考虑微调LLM如果领域非常垂直如仅针对室内设计可以考虑用高质量的场景描述问答对微调一个小型LLM使其更擅长空间推理。这个项目像一个精密的“技术钟表”每一个齿轮模块都需要仔细调校。但当它顺畅运转起来看着AI准确地理解并描述你亲手重建的三维世界时那种成就感是无与伦比的。它不仅是一个工具更是一个关于如何让AI更好地感知和理解我们物理世界的生动实验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2622165.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…