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. 安装工具
  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 openai

app = 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.json
    query = data.get('query', '')
    context = data.get('context', '')

    # 首先检查知识库
    response = knowledge_base.get(context, {}).get(query, None)
    if not response:
        # 回退到ChatGPT
        try:
            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,以增强工业维护,为知识检索提供了可扩展的原型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Morpheon

打赏买咖啡~谢了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值