ตอนนี้ ARCore Depth API รองรับความลึกของภูมิสารสนเทศ ซึ่งจะเพิ่มช่วงและความเร็วของ Depth API โดยอัตโนมัติเมื่อเปิดใช้ Streetscape Geometry ไว้ด้วย เมื่ออยู่ในตำแหน่งที่ครอบคลุม VPS และเปิดใช้ Streetscape Geometry รูปภาพเอาต์พุตจาก Depth API จะรวมภูมิประเทศและเรขาคณิตของสิ่งปลูกสร้างที่ดึงมาในพื้นที่ห่างจากตำแหน่งปัจจุบันออกไป 65 เมตร ข้อมูลความลึกที่ดึงมาจากเรขาคณิตนี้จะถูกรวมเข้ากับการสังเกตความลึกในท้องถิ่น และจะอัปเดตเมื่อผู้ใช้ย้ายไปยังสถานที่ใหม่
ตอนนี้การเรียกใช้ ARCore Depth API จะให้ทั้งการสังเกตการณ์ในพื้นที่จากกล้อง อาคารและภูมิประเทศจาก Streetscape Geometry ซึ่งรวมเป็นภาพที่มีความลึกภาพเดียว
ความเข้ากันได้ของอุปกรณ์
ความลึกของภูมิสารสนเทศพร้อมใช้งานในอุปกรณ์ทั้งหมดที่รองรับ Depth API ฟีเจอร์นี้ไม่ต้องใช้เซ็นเซอร์ความลึกของฮาร์ดแวร์ที่รองรับ เช่น เซ็นเซอร์ตรวจจับช่วงเวลาการบิน (ToF) อย่างไรก็ตาม Depth API จะใช้เซ็นเซอร์ของฮาร์ดแวร์ที่รองรับซึ่งอุปกรณ์อาจมี
ผลกระทบต่อประสิทธิภาพ
ความลึกทางภูมิสารสนเทศ จะใช้การคำนวณเล็กๆ น้อยๆ แบบครั้งเดียวเมื่อเริ่มต้นเซสชัน เพื่อผสานรวม Streetscape Geometry ไว้ในการนำเสนอความลึกเมื่อดาวน์โหลดครั้งแรก แต่ไม่สามารถเพิ่มค่าใช้จ่ายสำหรับการคำนวณความลึกได้
ช่วงความลึก
หากไม่มีความลึกของภูมิสารสนเทศ ช่วงภาพโดยทั่วไปจะอยู่ห่างออกไปประมาณ 20-30 เมตร โดยมีความหนาแน่นและความแม่นยำของการสังเกตการณ์ความลึกลดลงนอกเหนือจากช่วงดังกล่าว เมื่อเปิดใช้ความลึกของภูมิสารสนเทศ โดยทั่วไปแล้ว ค่าความลึกที่เก็บตัวอย่างแบบหนาแน่นจะสูงถึง 65.535 เมตร แม้ว่าจะมีการเคลื่อนไหวเล็กน้อยในช่วงแรก
กรณีการใช้งาน
ARCore Depth API ใช้ได้กับ Use Case ที่มีอยู่ทั้งหมดที่รองรับอยู่แล้ว ด้วยความลึกของภูมิสารสนเทศ รูปภาพความลึกที่ได้จากตำแหน่งที่รองรับ VPS จะได้รับการเติมข้อมูลแบบช่วงลึกได้เร็วกว่าเมื่อก่อน ทำให้ Use Case ที่กำหนดเป้าหมายเป็นความลึกแบบระยะไกลในสภาพแวดล้อมกลางแจ้งได้ ตัวอย่างกรณีการใช้งานมีดังนี้
- การบดบังเนื้อหาเสมือนจริงและเอฟเฟกต์ภาพอื่นๆ ในระดับอาคาร
- การนำทางภายนอกอาคาร
- การวัดระยะทาง
ข้อจำกัด
ความลึกของภูมิสารสนเทศใช้ได้เฉพาะในพื้นที่ที่รองรับการแปล VPS และ Streetscape Geometry เท่านั้น ในพื้นที่อื่นๆ แล้ว ARCore Depth API จะทำงานตามปกติโดยไม่มีค่าภูมิสารสนเทศ
ข้อกำหนดเบื้องต้น
ตรวจสอบว่าคุณเข้าใจแนวคิด AR พื้นฐาน และวิธีกําหนดค่าเซสชัน ARCore ก่อนดำเนินการต่อ
เปิดใช้ความลึกของภูมิสารสนเทศ
ในเซสชัน ARCore ใหม่ ตรวจสอบว่าอุปกรณ์ของผู้ใช้รองรับความลึกและ Geospatial API หรือไม่ อุปกรณ์ที่เข้ากันได้กับ ARCore บางรุ่นอาจไม่รองรับ Depth API เนื่องจากข้อจำกัดด้านพลังงานในการประมวลผล
เพื่อประหยัดทรัพยากร ระบบจะปิดใช้ความลึกใน ARCore ตามค่าเริ่มต้น เปิดใช้โหมดความลึกเพื่อให้แอปใช้ Depth API รวมทั้งเปิดใช้งานโหมดภูมิสารสนเทศและเรขาคณิตของถนนเพื่อ ใช้ความลึกของภูมิสารสนเทศ
Java
Config config = session.getConfig(); // Check whether the user's device supports the Depth API. boolean isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC); boolean isGeospatialSupported = session.isGeospatialModeSupported(Config.GeospatialMode.ENABLED); if (isDepthSupported && isGeospatialSupported) { // These three settings are needed to use Geospatial Depth. config.setDepthMode(Config.DepthMode.AUTOMATIC); config.setGeospatialMode(Config.GeospatialMode.ENABLED); config.setStreetscapeGeometryMode(Config.StreetscapeGeometryMode.ENABLED); } session.configure(config);
Kotlin
val config = session.config // Check whether the user's device supports the Depth API. val isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC) val isGeospatialSupported = session.isGeospatialModeSupported(Config.GeospatialMode.ENABLED) if (isDepthSupported && isGeospatialSupported) { // These three settings are needed to use Geospatial Depth. config.depthMode = Config.DepthMode.AUTOMATIC config.geospatialMode = Config.GeospatialMode.ENABLED config.streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED } session.configure(config)
เมื่อเปิดใช้ความลึกของภูมิสารสนเทศแล้ว คุณสามารถเข้าถึงรูปภาพความลึกได้ผ่านการเรียก API ที่มีอยู่ ตามที่อธิบายไว้ในคู่มือนักพัฒนาซอฟต์แวร์เชิงลึก
Java
// Retrieve the depth image for the current frame, if available. Image depthImage = null; try { depthImage = frame.acquireDepthImage16Bits(); // Use the depth image here. } catch (NotYetAvailableException e) { // This means that depth data is not available yet. // Depth data will not be available if there are no tracked // feature points. This can happen when there is no motion, or when the // camera loses its ability to track objects in the surrounding // environment. } finally { if (depthImage != null) { depthImage.close(); } }
Kotlin
// Retrieve the depth image for the current frame, if available. try { frame.acquireDepthImage16Bits().use { depthImage -> // Use the depth image here. } } catch (e: NotYetAvailableException) { // This means that depth data is not available yet. // Depth data will not be available if there are no tracked // feature points. This can happen when there is no motion, or when the // camera loses its ability to track objects in the surrounding // environment. }
สิ่งที่จะเกิดขึ้นหลังจากนี้
- ดูวิธีใช้ Streetscape Geometry ในประสบการณ์การใช้งาน Augmented Reality
- ดูวิธีสร้างแอปของคุณเองด้วยความลึกของภูมิสารสนเทศโดยไปที่ Codelab ความหมายทางภูมิศาสตร์และความลึกของภูมิสารสนเทศ