針對物件偵測進行疑難排解

本文假設您已將 3D 模型轉換成 Azure Object Anchors 偵測模型,並成功將模型載入應用程式。

疑難排解步驟

  • 確保您偵測到的模型位於支援的 (1-10 公尺) 大小內,以獲得最佳體驗。
  • 新增一些海報,以確保空間有足夠的紋理。
  • 移除目前的全像投影以重設地圖,如以下所示。
  • 更完整地掃描物件。
  • 提供緊密的週框方塊做為包含所有或大部分物件的搜尋區域。
  • 清除空間對應快取並重新掃描物件。
  • 確保模型轉換期間使用了正確的重力方向和資產維度,如以下所述。
  • 以視覺化方式檢查偵測模型,如以下所示。
  • 調整模型查詢值,如以下所述。
  • 擷取診斷,如以下所示。

移除全像投影以重設地圖

如果您發現偵測到的物件有以下的任何問題,移除並重設地圖可以修正此問題:

  • 反轉的方向
  • 不正確的姿勢
  • 傾斜的模型

若要移除全像投影並重設地圖,請開啟 [設定] 應用程式,然後移至 [系統] -> [全像投影]。 然後,選取 [移除所有全像投影] 以從全新的地圖開始。

清除全像投影可確保物件在最近移動時,可以在其目前的位置正確偵測到物件。

藉由穿戴 HoloLens 在環境中四處走動來重新掃描您的環境。 在您想要從 1-2 公尺偵測數次的任何物件週圍走動。

確保重力方向和資產維度單位正確

提交 3D 模型以使用 Object Anchors 轉換 SDK 進行轉換時 (請參閱這裡),您必須為 3D 模型輸入正確的重力方向 (Gravity) 和測量單位 (AssetDimensionUnit)。 如果這些值不正確,則 Object Anchors 不太可能正確偵測您的物件。

重力方向是指向地球的向下向量。 對於 CAD 模型,重力方向通常與向上方向相反。 例如,在許多情況下,+Z 代表向上,在此情況下 -Z 或 Vector3(0.0, 0.0, -1.0) 代表重力方向。 判斷重力時,您也應該考慮模型在執行期間會被看到的方向。 如果您嘗試偵測平坦表面上真實世界中的椅子,重力可能是 Vector3(0.0, 0.0, -1.0)。 不過,如果椅子在 45 度斜坡上,重力可能是 Vector3(0.0, -Sqrt(2)/2, -Sqrt(2)/2)

您可使用 3D 轉譯工具來判斷重力方向,例如 MeshLab

度量單位代表模型的縮放比例。 您可以使用 Microsoft.Azure.ObjectAnchors.Conversion.AssetLengthUnit 列舉來找到支援的單位。

您也可以依照這裡的指示,在 Unity 中將偵測模型視覺化,以視覺化方式檢查重力方向和縮放比例看起來是否正確。

以視覺化方式檢查偵測模型的網格

有時候,以視覺化方式檢查偵測模型的網格可能會很有幫助,使得您可以發現任何方向、縮放比例或特徵問題。 遵循這裡的指示,在 Unity 中將轉換的模型視覺化。

調整物件查詢值

  • 提供緊密的搜尋區域,理想上涵蓋完整的物件,以改善偵測速度和正確性。
  • 預設值 ObjectQuery.MinSurfaceCoverage 通常已足夠,但您可以使用較小的值來獲得更快速的偵測。
  • 如果物件預期為右上,請對 ObjectQuery.ExpectedMaxVerticalOrientationInDegrees 使用較小的值。
  • 應用程式應該一律使用 1:1 物件模型進行偵測。 估計縮放比例應該接近 1,理想上在 1% 誤差內。 應用程式可以將 ObjectQuery.MaxScaleChange 設定為 00.1 來停用或啟用縮放比例估計,並以質化方式評估執行個體姿勢。
  • 如需詳細資訊,請參閱如何偵測不好處理的物件

擷取診斷

應用程式可以使用 ObjectDiagnosticsSession 物件來擷取和儲存診斷封存。

具有 MRTK 的 Unity 範例應用程式會將診斷寫入 TempState 資料夾。 您可以開啟手部功能表,選取 [啟動追蹤]、重現偵測嘗試,然後選取 [停止追蹤] 以儲存診斷封存,以開始診斷工作階段。 然後,您可以使用 Windows 裝置入口網站,以從應用程式的 TempState 資料夾擷取診斷封存。

然後可以將診斷封存與我們共用,以便協助對問題進行偵錯。

下一步

在本疑難排解指南中,您已了解如何使用 Azure Object Anchors 對實體物件的偵測進行疑難排解。 以下是一些相關文章: