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,以增強工業維護,為知識檢索提供了可擴展的原型。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912213.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912213.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912213.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java面向對象核心:方法值傳遞與封裝機制精講

文章目錄 Java面向對象編程核心筆記一、方法值傳遞機制1. 基本數據類型傳遞2. 引用數據類型傳遞值傳遞總結 二、面向對象核心概念1. 類與對象關系2. 類定義規范3. 對象創建與使用 三、封裝機制詳解1. 封裝三大要素2. 封裝示例&#xff08;GirlFriend類&#xff09;3. 測試類4. …

【Actix Web】構建高性能 Rust API:Actix Web 最佳實踐與進階指南

目錄 一、高性能 API 架構設計1.1 系統架構圖1.2 核心組件 二、項目初始化與配置2.1 創建項目2.2 添加依賴 (Cargo.toml)2.3 配置文件 (config/default.toml) 三、核心模塊實現3.1 應用狀態管理 (src/state.rs)3.2 數據模型定義 (src/models.rs) 四、認證與授權系統4.1 JWT 認證…

vue項目中純前端實現導出pdf文件,不需要后端處理。

在 Vue 項目中&#xff0c;純前端實現導出 PDF 文件是完全可行的。通常可以借助一些 JavaScript 庫來將 HTML 內容或 DOM 元素轉換為 PDF 并下載&#xff0c;無需后端參與。 下面介紹幾種常用的方案和實現方法&#xff1a; 推薦方案&#xff1a;使用 html2canvas jsPDF 安裝…

c++虛擬內存

常見的內存困惑 當你編寫C程序時&#xff0c;是否遇到過&#xff1a; vector申請200MB內存&#xff0c;但系統顯示只占用20MB&#xff1f;程序在低配機器上崩潰&#xff0c;報出std::bad_alloc但內存顯示充裕&#xff1f;遍歷數組時特定位置耗時突然增加&#xff1f;相同代碼…

領域驅動設計(DDD)【22】之限定建模技術

文章目錄 一 限定初識二 限定識別三 限定實現 一 限定初識 一個 員工 可以擁有多份 工作經驗&#xff0c;而各個 工作經驗 的 時間段 不能相互重疊。可以得出一個推論&#xff1a;對于一個 員工 而言&#xff0c;每個 時間段 只能有一條 工作經驗。 UML中第二種表述方式&…

《P6492 [COCI 2010/2011 #6] STEP》

題目描述 給定一個長度為 n 的字符序列 a&#xff0c;初始時序列中全部都是字符 L。 有 q 次修改&#xff0c;每次給定一個 x&#xff0c;若 ax? 為 L&#xff0c;則將 ax? 修改成 R&#xff0c;否則將 ax? 修改成 L。 對于一個只含字符 L&#xff0c;R 的字符串 s&#…

macOS,切換 space 失效,向右切換space(move right a space) 失效

背景 準確來講&#xff0c;遇到的問題是向右切換space&#xff08;move right a space) 失效&#xff0c;并向左是成功的。 在鍵盤-快捷鍵-調度中心中&#xff0c;所有的快捷鍵均可用&#xff0c;但是“向右移動一個空間”總是失效。 已經檢查過不是快捷鍵沖突的問題&#x…

網飛貓官網入口 - 免費高清影視平臺,Netflix一站觀看

網飛貓是一個專注于提供豐富影視資源的在線平臺&#xff0c;涵蓋國內外熱門電影、電視劇、動漫、綜藝等多種類型。它不僅整合了Netflix的獨家內容&#xff0c;還提供了大量高清、藍光畫質的影視作品&#xff0c;支持多語言字幕&#xff0c;滿足不同用戶的觀影需求。網飛貓的界面…

Hyper-v-中的FnOs--飛牛Nas虛擬磁盤擴容(不清除數據)

在Hyper-v下的飛牛Nas要怎么在不刪除原有虛擬磁盤數據的情況下擴容呢 OK下面開始教學&#xff08;適用于Basic模式的虛擬磁盤擴容&#xff0c;Linear沒試過&#xff09; 先關閉飛牛Nas系統 找到飛牛Nas虛擬機&#xff0c;在設置下SCSI控制器找到要擴容的虛擬磁盤&#xff0c; 點…

掌握 MySQL 的基石:全面解讀數據類型及其影響

前言 上篇文章小編講述了關于MySQL表的DDL操作&#xff0c;在那里我多次使用了MySQL的數據類型&#xff0c;但是我并沒有去講述MySQL的數據類型&#xff0c;想必各位讀者已經很好奇MySQL的數據類型都有什么了&#xff0c;今天這篇文章我將會詳細的去講述MySQL的數據類型&#x…

buildadmin 如何制作自己的插件

官方文檔指引 提示&#xff1a;若不計劃發布到應用市場&#xff0c;可省略圖片等非必要功能 參考文檔&#xff1a;https://doc.buildadmin.com/senior/module/basicInfo.html 目錄 官方文檔指引開發說明模塊開發流程模塊包結構示例安裝開發工具 總結 開發說明 目標&#xff…

【數據標注師】關鍵點標注

目錄 一、 **關鍵點標注的四大核心原則**二、 **五階能力培養體系**? **階段1&#xff1a;基礎認知筑基&#xff08;1-2周&#xff09;**? **階段2&#xff1a;復雜場景處理技能? **階段3&#xff1a;三維空間標注&#xff08;進階&#xff09;**? **階段4&#xff1a;效率…

創建網站的基本步驟?如何建設自己的網站?

創建網站是一個系統化的過程&#xff0c;涵蓋規劃、設計、開發、測試和發布等多個階段。以下是詳細步驟及關鍵工具推薦&#xff1a; 一、規劃階段&#xff1a;明確目標與內容 定義目標 1、確定網站目的&#xff08;展示信息、銷售、博客、服務等&#xff09;。 2、分析目標…

FreeSWITCH配置文件解析(2) dialplan 撥號計劃中xml 的action解析

在 FreeSWITCH 的撥號計劃&#xff08;Dialplan&#xff09;中&#xff0c;使用 XML 配置。其中&#xff0c;<action> 標簽用于指定要執行的操作。這些操作通常是應用程序&#xff08;applications&#xff09;或設置變量等。下面列出常見的 <action> 類型及其含義…

MCPA2APPT:基于 A2A+MCP+ADK 的多智能體流式并發高質量 PPT 智能生成系統

&#x1f680; MCPA2APPT / MultiAgentPPT 集成 A2A MCP ADK 架構的智能化演示文稿生成系統&#xff0c;支持多智能體協作與流式并發&#xff0c;實時生成高質量 PPT 內容。 &#x1f9e0; 項目簡介 MultiAgentPPT&#xff08;又名 MCPA2APPT&#xff09;采用 A2A&#xff…

Maven 多模塊項目調試與問題排查總結

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…

debian國內安裝docker

先升級apt和安裝依賴包 apt update apt upgrade apt install curl vim wget gnupg dpkg apt-transport-https lsb-release ca-certificates添加存儲庫的GPG密鑰&#xff08;阿里云&#xff09; curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo gpg…

vue網頁中的一個天氣組件使用高德api

今天寫了一個天氣組件效果如下&#xff1a; 實現代碼如下&#xff1a; <template><div><span click"getLocation" style"cursor: pointer"><span style"color:white;">{{ weatherInfo.area }}</span></span&g…

5 手寫卷積函數

5 手寫卷積函數 背景介紹滑動窗口的方式代碼問題 矩陣乘法的方式原理代碼結果 效果對比對比代碼日志結果 一些思考 背景 從現在開始各種手寫篇章&#xff0c;先從最經典的卷積開始 介紹 對于卷積層的具體操作&#xff0c;我這里就不在具體說卷積具體是什么東西了。 對于手寫…

vue3+element-plus,實現兩個表格同步滾動

需求&#xff1a;現在需要兩個表格&#xff0c;為了方便對比左右的數據&#xff0c;需要其中一邊的表格滾動時&#xff0c;另一邊的表格也跟著一起滾動&#xff0c;并且保持滾動位置的一致性。具體如下圖所示。 實現步驟&#xff1a; 確保兩個表格的寬度一致&#xff1a;如果兩…