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

Unity AR构建维护系统的以AI驱动增强现实知识检索系统

本博客概述了为维护开发的AI驱动增强现实(AR)知识检索系统的开发过程,该系统集成了Unity用于AR、Python服务器用于后端处理,以及ChatGPT用于自然语言处理。该系统允许维护工人通过AR设备(如HoloLens 2)查询特定任务的知识(例如,故障排除步骤),并以全息图形式显示上下文感知的响应。

Unity账户注册

中文账户注册比较困难。它需要额外的验证码验证步骤,有时即使验证成功也不会重定向。如果可能的话,建议使用Google账户注册美国账户,体验会更加流畅。

Unity AR界面设置

Windows设置

  1. 安装Unity Hub
    • 从unity.com下载。
    • 安装Unity Hub并打开。
  2. 安装Unity编辑器
    • 在Unity Hub中,点击Installs > Add
    • 选择2021.3 LTS(或更高版本)。
    • 添加模块:**Universal Windows Platform (UWP)**用于HoloLens,Android Build SupportiOS Build Support
  3. 安装工具
    • Visual Studio 2022:从visualstudio.microsoft.com下载。包含UWP和Unity工作负载。
    • HoloLens模拟器:通过Visual Studio Installer安装(可选)。
    • Git:从git-scm.com下载。
  4. 项目设置
    • 在Unity Hub中创建新的3D项目。
    • 通过Package Manager安装包:
      • Mixed Reality Toolkit (MRTK):添加Git URL com.microsoft.mixedreality.toolkit.unity
      • TextMeshPro:启用内置包。
      • AR Foundation:用于移动AR(可选)。
    • Build Settings中,选择UWP,将Architecture设置为ARM64用于HoloLens。

macOS设置

  1. 安装Unity Hub
    • 从unity.com下载macOS版本。
    • 安装并打开Unity Hub。
  2. 安装Unity编辑器
    • 通过Unity Hub添加2021.3 LTS
    • 包含iOS Build SupportAndroid Build Support(UWP最终构建需要Windows)。
  3. 安装工具
    • Xcode:从Mac App Store下载(约15GB)。
    • Android Studio:从developer.android.com下载。
    • Visual Studio for Mac:从visualstudio.microsoft.com下载。
    • Git:通过Homebrew安装(安装Homebrew后运行brew install git)。
  4. 项目设置
    • 创建3D项目。
    • 如上所述安装MRTKTextMeshProAR Foundation
    • 在macOS上为HoloLens开发,但传输到Windows进行UWP构建。

Unity场景和脚本

  • 场景设置

    • 通过Mixed Reality > Toolkit > Add to Scene and Configure添加MRTK。
    • 使用HoloLens 2配置文件,启用Spatial AwarenessInput System
    • 添加World Space Canvas,包含用于AI响应的TextMeshProUGUI
    • 为3D模型叠加创建空的GameObject。
    • 向画布添加TMP_InputField用于文本输入。
    • 在输入字段旁边添加Button用于提交查询。
  • 语音输入脚本VoiceQuery.cs):

    using UnityEngine;
    using Microsoft.MixedReality.Toolkit.Input;public class VoiceQuery : MonoBehaviour
    {public BackendConnector backend;public void OnSpeechKeywordRecognized(SpeechEventData eventData){backend.SendQuery(eventData.Command.Keyword, "Pump XYZ"); // 模拟上下文}
    }
    
  • 文本输入脚本TextQuery.cs):

    using UnityEngine;
    using TMPro;
    using UnityEngine.UI;public class TextQuery : MonoBehaviour
    {public BackendConnector backend;public TMP_InputField inputField;public Button submitButton;public string context = "Pump XYZ"; // 模拟上下文private void Start(){// 为按钮点击添加监听器submitButton.onClick.AddListener(SubmitQuery);// 为回车键添加监听器inputField.onSubmit.AddListener(_ => SubmitQuery());}private void SubmitQuery(){if (!string.IsNullOrEmpty(inputField.text)){backend.SendQuery(inputField.text, context);inputField.text = ""; // 发送后清除输入}}private void OnDestroy(){// 清理监听器submitButton.onClick.RemoveListener(SubmitQuery);inputField.onSubmit.RemoveListener(_ => SubmitQuery());}
    }
    
  • AR显示脚本ARDisplay.cs):

    using UnityEngine;
    using TMPro;public class ARDisplay : MonoBehaviour
    {public TextMeshProUGUI responseText;public GameObject modelPrefab;public void UpdateDisplay(string aiResponse, Vector3 position){responseText.text = aiResponse;Instantiate(modelPrefab, position, Quaternion.identity);}
    }
    
  • 后端连接器脚本BackendConnector.cs):

    using UnityEngine;
    using UnityEngine.Networking;
    using System.Collections;
    using TMPro;public class BackendConnector : MonoBehaviour
    {public TextMeshProUGUI responseText;private string apiEndpoint = "http://your-backend-url/api/query";public void SendQuery(string query, string context){StartCoroutine(SendQueryCoroutine(query, context));}private IEnumerator SendQueryCoroutine(string query, string context){// 创建请求体var requestBody = new{query = query,context = context};string jsonBody = JsonUtility.ToJson(requestBody);// 创建请求using (UnityWebRequest request = new UnityWebRequest(apiEndpoint, "POST")){byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(jsonBody);request.uploadHandler = new UploadHandlerRaw(bodyRaw);request.downloadHandler = new DownloadHandlerBuffer();request.SetRequestHeader("Content-Type", "application/json");// 发送请求yield return request.SendWebRequest();if (request.result == UnityWebRequest.Result.Success){// 解析并显示响应var response = JsonUtility.FromJson<QueryResponse>(request.downloadHandler.text);responseText.text = response.answer;}else{responseText.text = "错误: " + request.error;}}}
    }[System.Serializable]
    public class QueryResponse
    {public string answer;
    }
    

场景层次结构设置

- MixedRealitySceneContent|- MRTK|- WorldSpaceCanvas|- ResponseText (TextMeshProUGUI)|- InputPanel|- QueryInputField (TMP_InputField)|- SubmitButton (Button)|- ModelContainer (Empty GameObject)

组件配置

  1. TextQuery组件

    • 附加到InputPanel GameObject
    • 分配BackendConnector引用
    • 分配TMP_InputField引用
    • 分配SubmitButton引用
  2. VoiceQuery组件

    • 附加到MixedRealitySceneContent
    • 分配BackendConnector引用
  3. BackendConnector组件

    • 附加到专用的GameObject
    • 分配ResponseText引用
    • 配置apiEndpoint URL

此设置为查询AI系统提供了语音和文本输入选项,具有适当的错误处理和响应显示。

后端Python服务器

Python服务器处理来自Unity的查询,与ChatGPT接口,并返回响应。

设置

  1. 安装Python
    • 从python.org下载Python 3.9+。
    • 确保安装了pip
  2. 安装依赖项
    pip install flask openai
    
  3. 服务器代码server.py):
from flask import Flask, request, jsonify
import openaiapp = Flask(__name__)
openai.api_key = "your-openai-api-key"# 模拟知识库
knowledge_base = {"Pump XYZ": {"E101": "检查阀门对齐并润滑轴承。"}
}@app.route('/api/query', methods=['POST'])
def handle_query():data = request.jsonquery = data.get('query', '')context = data.get('context', '')# 首先检查知识库response = knowledge_base.get(context, {}).get(query, None)if not response:# 回退到ChatGPTtry:chat_response = openai.Completion.create(model="gpt-4",prompt=f"为{context}提供维护解决方案:{query}",max_tokens=100)response = chat_response.choices[0].text.strip()except Exception as e:response = f"错误:{str(e)}"return jsonify(response)if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)
  1. 运行服务器
    python server.py
    
    • 确保服务器在localhost:5000或您的网络IP上运行,以便Unity访问。

ChatGPT集成

Python服务器使用OpenAI的GPT-4 API进行自然语言处理。

设置

  1. 获取API密钥
    • 在openai.com注册,创建API密钥。
    • 将密钥添加到server.pyopenai.api_key)。
  2. 查询逻辑
    • 服务器首先检查本地知识库(例如,类似JSON的字典)。
    • 如果没有匹配项,它会使用上下文(例如,“Pump XYZ”)和查询(例如,“E101”)查询GPT-4。
    • 示例提示:“为Pump XYZ提供维护解决方案:E101”。
  3. 响应处理
    • GPT-4返回简洁的响应(例如,“检查阀门对齐并润滑轴承”)。
    • 服务器格式化为JSON并发送到Unity。

注意事项

  • 成本:GPT-4 API使用会产生费用;通过OpenAI仪表板监控。
  • 替代方案:使用开源模型(例如,Hugging Face)进行免费测试。
  • 延迟:通过在知识库中缓存频繁查询来优化。

测试系统

  1. 运行Python服务器
    • localhost:5000上启动server.py
  2. 测试Unity
    • 在Unity编辑器中,使用MRTK输入模拟触发语音查询。
    • 验证AR显示随服务器响应更新。
    • 为HoloLens(Windows)或iOS/Android(macOS)构建。
  3. 可用性
    • 使用示例查询进行测试(例如,“修复Pump XYZ E101”)。
    • 检查响应准确性和AR叠加定位。

挑战和解决方案

  • 延迟:使用边缘计算或本地模型获得更快的AI响应。
  • HoloLens构建:macOS需要Windows进行UWP;使用VM或双启动。
  • 知识库:预填充综合手册以减少API调用。

参考文献

  • Xu, F., et al. (2024). Augmented reality for maintenance tasks with ChatGPT for automated text-to-action. Journal of Construction Engineering and Management.
  • Nagy, A., et al. (2023). AI-powered interfaces for extended reality to support remote maintenance. IEEE/ACM CCGridW.

该系统结合了Unity的AR功能、Python后端和ChatGPT的AI,以增强工业维护,为知识检索提供了可扩展的原型。

相关文章:

  • 最专业的做网站公司哪家好2021拉新推广佣金排行榜
  • 影楼网站设计顶尖文案
  • 怎么看网站是谁家做的什么是网站
  • 学生做兼职哪个网站小红书推广引流软件
  • 厦门英文网站建设seo全网优化推广
  • 网站开发语言为电子邮件营销
  • [C#]C# winform部署yolov13目标检测的onnx模型
  • VTK中的形态学处理
  • Pytest项目_day03(Postman使用)
  • # RK3588 Linux SDK 完整问题解决记录-编译内核头文件
  • React:利用计算属性名特点更新表单值
  • 鸿蒙边缘智能计算架构实战:从环境部署到分布式推理全流程
  • flutter的包管理#资源管理#调试Flutter应用#Flutter异常捕获
  • 龙蜥Confidential AI:开源机密计算AI解决方案,让云端模型安全运行
  • 推荐一个前端基于vue3.x,vite7.x,后端基于springboot3.4.x的完全开源的前后端分离的中后台管理系统基础项目(纯净版)
  • R语言使用nonrandom包进行倾向评分匹配
  • Golang中的map使用
  • Vue 2 项目中内嵌 md 文件
  • OpenCV计算机视觉实战(13)——轮廓检测详解
  • C++ - vector 的相关练习
  • AMS流媒体服务器-新版(h265-flv)
  • Spring--IOC容器的启动流程图解版
  • 大数据在UI前端的应用深化研究:用户行为模式的挖掘与分析
  • Axure版AntDesign 元件库-免费版
  • 使用Adobe Acrobat DC创建PDF表单域的完整指南
  • Linux网络协议栈的基石:深入剖析inet_hashtables.c的高效设计