ดึงข้อมูลเชิงลึกในแอปด้วย ARCore สำหรับ Jetpack XR

แอปของคุณสามารถดึงข้อมูลเชิงลึกผ่าน ARCore สำหรับ Jetpack XR เพื่อ ระบุว่าวัตถุจริงอยู่ใกล้อุปกรณ์มากน้อยเพียงใด

สร้างเซสชัน ARCore สำหรับ Jetpack XR

รับข้อมูลท่าทางของศีรษะผ่านเซสชัน ARCore สำหรับ Jetpack XR ดูทําความเข้าใจวงจรของเซสชันเพื่อรับ Session

กำหนดค่าเซสชัน

ระบบไม่ได้เปิดใช้การดึงข้อมูลแผนที่แสดงความลึกโดยค่าเริ่มต้นในเซสชัน XR หากต้องการเปิดใช้การดึงข้อมูลแผนที่ความลึก ให้กำหนดค่าเซสชันและตั้งค่า DepthEstimationMode ดังนี้

val newConfig = session.config.copy(
    depthEstimation = Config.DepthEstimationMode.SMOOTH_ONLY,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    is SessionConfigureConfigurationNotSupported ->
        TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)
    else ->
        TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */)
}

ค่าของ DepthEstimationMode ที่พร้อมใช้งานมีดังนี้

  • DISABLED: ไม่ได้ระบุข้อมูลเกี่ยวกับความลึกของฉาก
  • RAW_ONLY: เปิดใช้การประมาณความลึกด้วยค่าความลึกดิบและความน่าเชื่อถือ
  • SMOOTH_ONLY: เปิดใช้การประมาณความลึกด้วยค่าความลึกและความน่าเชื่อถือที่ราบรื่น
  • SMOOTH_AND_RAW: เปิดใช้การประมาณความลึกด้วยค่าความลึกและความเชื่อมั่นทั้งแบบดิบและแบบเรียบ

แผนที่ความลึกดิบให้ค่าประมาณความลึกที่มีความแม่นยำสูงกว่า แต่รูปภาพความลึกดิบอาจไม่มีค่าประมาณความลึกสำหรับพิกเซลทั้งหมดในรูปภาพจากกล้อง ในทางตรงกันข้าม แผนที่แสดงความลึกแบบเรียบจะให้ความลึกโดยประมาณสำหรับทุกพิกเซล แต่ข้อมูลความลึกต่อพิกเซลอาจมีความแม่นยำน้อยกว่าเนื่องจากการปรับให้เรียบและการประมาณค่าความลึก

android.permission.SCENE_UNDERSTANDING_FINE

เรียกข้อมูลความลึก

หากต้องการรับข้อมูลเชิงลึกสำหรับกล้องที่ต้องการ ให้ใช้ DepthMap

val depthMap = DepthMap.left(session) ?: return

อุปกรณ์แต่ละเครื่องมีความสามารถแตกต่างกัน อุปกรณ์ที่มีการกำหนดค่ากล้องสเตอริโอจะแสดงแผนที่ความลึกที่ไม่ใช่ค่า Null สำหรับกล้อง left และ right ในทำนองเดียวกัน อุปกรณ์ที่มีกล้องตัวเดียวจะแสดงผลแผนที่ความลึกที่ไม่ใช่ค่าว่างโดยใช้ mono

คำนวณค่าความลึก

คุณสามารถรับค่าความลึกและความเชื่อมั่นจากแผนที่แสดงความลึกที่ได้

val depthMap = DepthMap.left(session) ?: return

เข้าถึงแผนที่ความลึกที่เกี่ยวข้องโดยใช้ smoothDepthMap หรือ rawDepthMap ทั้งนี้ขึ้นอยู่กับการตั้งค่าการกำหนดค่าที่ใช้ การวัดในแผนที่เหล่านี้ แสดงเป็นเมตร นอกจากนี้ คุณยังเข้าถึงค่าความเชื่อมั่นได้โดยใช้ smoothConfidenceMap และ rawConfidenceMap ค่าเหล่านี้มีตั้งแต่ 0 ถึง 255 โดย 255 หมายถึงความเชื่อมั่นสูงสุด

หากต้องการแสดงผลแมปความลึกเพื่อการแก้ไขข้อบกพร่องหรือการแสดงภาพ โปรดดูส่วนความลึกของแอปทดสอบ ARCore