本博客概述了為維護開發的AI驅動增強現實(AR)知識檢索系統的開發過程,該系統集成了Unity用于AR、Python服務器用于后端處理,以及ChatGPT用于自然語言處理。該系統允許維護工人通過AR設備(如HoloLens 2)查詢特定任務的知識(例如,故障排除步驟),并以全息圖形式顯示上下文感知的響應。
Unity賬戶注冊
中文賬戶注冊比較困難。它需要額外的驗證碼驗證步驟,有時即使驗證成功也不會重定向。如果可能的話,建議使用Google賬戶注冊美國賬戶,體驗會更加流暢。
Unity AR界面設置
Windows設置
- 安裝Unity Hub:
- 從unity.com下載。
- 安裝Unity Hub并打開。
- 安裝Unity編輯器:
- 在Unity Hub中,點擊Installs > Add。
- 選擇2021.3 LTS(或更高版本)。
- 添加模塊:**Universal Windows Platform (UWP)**用于HoloLens,Android Build Support,iOS Build Support。
- 安裝工具:
- Visual Studio 2022:從visualstudio.microsoft.com下載。包含UWP和Unity工作負載。
- HoloLens模擬器:通過Visual Studio Installer安裝(可選)。
- Git:從git-scm.com下載。
- 項目設置:
- 在Unity Hub中創建新的3D項目。
- 通過Package Manager安裝包:
- Mixed Reality Toolkit (MRTK):添加Git URL
com.microsoft.mixedreality.toolkit.unity
。 - TextMeshPro:啟用內置包。
- AR Foundation:用于移動AR(可選)。
- Mixed Reality Toolkit (MRTK):添加Git URL
- 在Build Settings中,選擇UWP,將Architecture設置為ARM64用于HoloLens。
macOS設置
- 安裝Unity Hub:
- 從unity.com下載macOS版本。
- 安裝并打開Unity Hub。
- 安裝Unity編輯器:
- 通過Unity Hub添加2021.3 LTS。
- 包含iOS Build Support,Android Build Support(UWP最終構建需要Windows)。
- 安裝工具:
- Xcode:從Mac App Store下載(約15GB)。
- Android Studio:從developer.android.com下載。
- Visual Studio for Mac:從visualstudio.microsoft.com下載。
- Git:通過Homebrew安裝(安裝Homebrew后運行
brew install git
)。
- 項目設置:
- 創建3D項目。
- 如上所述安裝MRTK、TextMeshPro和AR Foundation。
- 在macOS上為HoloLens開發,但傳輸到Windows進行UWP構建。
Unity場景和腳本
-
場景設置:
- 通過Mixed Reality > Toolkit > Add to Scene and Configure添加MRTK。
- 使用HoloLens 2配置文件,啟用Spatial Awareness和Input 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)
組件配置
-
TextQuery組件:
- 附加到InputPanel GameObject
- 分配BackendConnector引用
- 分配TMP_InputField引用
- 分配SubmitButton引用
-
VoiceQuery組件:
- 附加到MixedRealitySceneContent
- 分配BackendConnector引用
-
BackendConnector組件:
- 附加到專用的GameObject
- 分配ResponseText引用
- 配置apiEndpoint URL
此設置為查詢AI系統提供了語音和文本輸入選項,具有適當的錯誤處理和響應顯示。
后端Python服務器
Python服務器處理來自Unity的查詢,與ChatGPT接口,并返回響應。
設置
- 安裝Python:
- 從python.org下載Python 3.9+。
- 確保安裝了
pip
。
- 安裝依賴項:
pip install flask openai
- 服務器代碼(
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)
- 運行服務器:
python server.py
- 確保服務器在
localhost:5000
或您的網絡IP上運行,以便Unity訪問。
- 確保服務器在
ChatGPT集成
Python服務器使用OpenAI的GPT-4 API進行自然語言處理。
設置
- 獲取API密鑰:
- 在openai.com注冊,創建API密鑰。
- 將密鑰添加到
server.py
(openai.api_key
)。
- 查詢邏輯:
- 服務器首先檢查本地知識庫(例如,類似JSON的字典)。
- 如果沒有匹配項,它會使用上下文(例如,“Pump XYZ”)和查詢(例如,“E101”)查詢GPT-4。
- 示例提示:“為Pump XYZ提供維護解決方案:E101”。
- 響應處理:
- GPT-4返回簡潔的響應(例如,“檢查閥門對齊并潤滑軸承”)。
- 服務器格式化為JSON并發送到Unity。
注意事項
- 成本:GPT-4 API使用會產生費用;通過OpenAI儀表板監控。
- 替代方案:使用開源模型(例如,Hugging Face)進行免費測試。
- 延遲:通過在知識庫中緩存頻繁查詢來優化。
測試系統
- 運行Python服務器:
- 在
localhost:5000
上啟動server.py
。
- 在
- 測試Unity:
- 在Unity編輯器中,使用MRTK輸入模擬觸發語音查詢。
- 驗證AR顯示隨服務器響應更新。
- 為HoloLens(Windows)或iOS/Android(macOS)構建。
- 可用性:
- 使用示例查詢進行測試(例如,“修復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,以增強工業維護,為知識檢索提供了可擴展的原型。