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

本文假設您已將3D 模型轉換成 Azure 物件錨點偵測模型,並成功將模型載入至應用程式。

疑難排解步驟

  • 確定您偵測的模型是在支援的 (1-10 計量) 大小,以獲得最佳體驗。
  • 藉由新增幾個海報來確定房間有足夠的材質。
  • 移除目前的全像,以重設地圖,如下所述。
  • 更完整地掃描物件。
  • 提供嚴格的周框方塊作為搜尋區域,其中包含所有或大部分的物件。
  • 清除空間對應快取,然後重新掃描物件。
  • 請確認模型轉換期間使用正確的引力方向和資產維度,如下所述。
  • 以視覺化方式檢查偵測模型,如下所述。
  • 調整模型查詢值,如下所述。
  • 請依照 下面所述的方式來捕捉診斷。

移除全像影像以重設地圖

如果您看到下列任何問題所偵測到的物件,移除和重設對應可修正此問題:

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

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

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

藉由在 HoloLens 的環境中四處解說來重新掃描您的環境。 針對您想要從1-2 計量偵測到幾次的任何物件進行逐步解說。

確定引力方向和資產維度單位正確

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

引力方向是指向地球的下向量。 針對 CAD 模型,重力方向通常與向上方向相反。 例如,在許多情況下,+ Z 表示 up,在這種情況下,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)來判斷重力方向。

度量單位表示模型的尺規。 您可以使用 ObjectAnchors AssetLengthUnit 列舉來找到支援的單位。

您也可以遵循 此處 的指示,將 Unity 中的偵測模型視覺化,以視覺化方式檢查重力方向和縮放外觀是否正確。

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

有時有助於以視覺化方式檢查偵測模型的網格,讓您可以查看任何方向、規模或功能問題。 請依照 此處 的指示,將 Unity 中已轉換的模型視覺化。

調整物件查詢值

  • 提供嚴格的搜尋區域,讓您在理想的情況下涵蓋完整的物件,以改善偵測速度和正確性。
  • 預設 ObjectQuery.MinSurfaceCoverage 值通常就已足夠,但您可以使用較小的值來取得更快速的偵測。
  • ObjectQuery.ExpectedMaxVerticalOrientationInDegrees如果物件應該是右上方,請使用較小的值。
  • 應用程式應該一律使用 1:1 物件模型來進行偵測。 估計規模在1% 的誤差中應接近1。 應用程式可以設定 ObjectQuery.MaxScaleChange00.1 以停用或啟用調整估計,而品質會評估實例的姿勢。
  • 如需詳細資訊,請參閱 如何偵測困難的物件

捕獲診斷

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

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

然後,您可以與我們共用診斷封存,讓我們可以協助您偵測問題。

下一步

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