ทำความเข้าใจสภาพแวดล้อมของผู้ใช้ใน AR Foundation ของ Unity

ดูวิธีใช้ Scene Semantics API ในแอปของคุณเอง

Scene Semantics API จะช่วยให้นักพัฒนาซอฟต์แวร์เข้าใจบรรยากาศรอบตัวผู้ใช้ด้วยการให้ข้อมูลที่มีความหมายแบบเรียลไทม์ตามโมเดล ML ด้วยการแสดงรูปภาพภายนอกอาคาร API จะส่งป้ายกำกับสำหรับแต่ละพิกเซลในชุดคลาสเชิงความหมายที่เป็นประโยชน์ เช่น ท้องฟ้า อาคาร ต้นไม้ ถนน ทางเท้า ยานพาหนะ บุคคล และอื่นๆ นอกจากป้ายกำกับพิกเซลแล้ว Scene Semantics API ยังให้ค่าความเชื่อมั่นสำหรับป้ายกำกับพิกเซลแต่ละป้าย และวิธีที่ใช้งานง่ายในการค้นหาความแพร่หลายของป้ายกำกับหนึ่งๆ ในสภาพแวดล้อมกลางแจ้ง

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

ตัวอย่างรูปภาพอินพุต รูปภาพเชิงความหมาย และรูปภาพความเชื่อมั่นทางความหมาย

ข้อกำหนดเบื้องต้น

ตรวจสอบว่าคุณเข้าใจแนวคิด AR พื้นฐาน และวิธีกำหนดค่าเซสชัน ARCore ก่อนดำเนินการต่อ

เปิดใช้ความหมายของฉาก

ในเซสชัน ARCore ใหม่ ให้ตรวจสอบว่าอุปกรณ์ของผู้ใช้รองรับ Scene Semantics API หรือไม่ อุปกรณ์ที่เข้ากันได้กับ ARCore บางรุ่นอาจไม่รองรับ Scene Semantics API เนื่องจากข้อจำกัดด้านพลังงานในการประมวลผล

Scene Semantics จะปิดใช้โดยค่าเริ่มต้นใน ARCore เพื่อประหยัดทรัพยากร เปิดใช้โหมดความหมายเพื่อให้แอปใช้ Scene Semantics API

ใน ARCoreExtensionsConfig ให้ตั้งค่าโหมดอรรถศาสตร์เป็น "เปิดใช้"

ตั้งค่าโหมดอรรถศาสตร์เป็น "เปิดใช้" แล้ว

หากใช้ iOS ต้องเปิดใช้ความหมายในการตั้งค่าโปรเจ็กต์ด้วย

  1. ไปที่แก้ไข > การตั้งค่าโปรเจ็กต์ > การจัดการปลั๊กอิน XR > ส่วนขยาย ARCore
  2. ในส่วนฟีเจอร์เสริม ให้เลือก Semantics บน iOS

เปิดใช้ความหมายใน iOS ในฟีเจอร์เสริม

รับรูปภาพที่สื่อความหมาย

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

ใช้ ArSemanticManager.TryGetSemanticTexture() เพื่อให้ได้รูปภาพเชิงความหมาย

if (semanticManager.TryGetSemanticTexture(out Texture2D semanticImage))
{
    using (semanticImage)
    {
        // Use the semantic image here.
    }
}

รูปภาพที่สื่อความหมายเอาต์พุตควรพร้อมใช้งานหลังจากเริ่มเซสชันประมาณ 1-3 เฟรม ทั้งนี้ขึ้นอยู่กับอุปกรณ์

รับรูปภาพความเชื่อมั่น

นอกจากรูปภาพเชิงความหมายซึ่งมีป้ายกำกับสำหรับแต่ละพิกเซลแล้ว API ยังมอบรูปภาพความเชื่อมั่นของค่าความเชื่อมั่นของพิกเซลที่เกี่ยวข้องด้วย รูปภาพความเชื่อมั่นคือรูปภาพ TextureFormat.Alpha8 โดยแต่ละพิกเซลจะสอดคล้องกับค่าในช่วง [0, 255] ตามความน่าจะเป็นที่สัมพันธ์กับป้ายกํากับความหมายสําหรับแต่ละพิกเซล

ใช้ ArSemanticManager.TryGetSemanticConfidenceTexture() เพื่อให้ได้รูปภาพความเชื่อมั่นทางความหมาย:

if (semanticManager.TryGetSemanticConfidenceTexture(out Texture2D semanticConfidenceImage))
{
    using (semanticConfidenceImage)
    {
        // Use the semantic confidence image here.
    }
}

รูปภาพความเชื่อมั่นเอาต์พุตควรพร้อมใช้งานหลังจากเริ่มเซสชันประมาณ 1-3 เฟรม ทั้งนี้ขึ้นอยู่กับอุปกรณ์

ค้นหาเศษส่วนของพิกเซลสำหรับป้ายกำกับความหมาย

คุณยังค้นหาเศษส่วนของพิกเซลในเฟรมปัจจุบันซึ่งเป็นของคลาสหนึ่งๆ ได้ด้วย เช่น ท้องฟ้า การค้นหานี้จะมีประสิทธิภาพมากกว่าการแสดงผลรูปภาพเชิงความหมายและการค้นหาแบบพิกเซลสำหรับป้ายกำกับเฉพาะ เศษส่วนที่แสดงผลคือค่าทศนิยมในช่วง [0.0, 1.0]

ใช้ ArSemanticManager.GetSemanticLabelFraction() เพื่อหาเศษส่วนสำหรับป้ายกำกับที่ต้องการ

var fraction = semanticManager.GetSemanticLabelFraction(SemanticLabel.SKY);