כאן אפשר ללמוד איך להשתמש ב-Scene Semantics API באפליקציות שלכם.
ה-Sene Semantics API מאפשר למפתחים להבין את הסצנה סביב המשתמש באמצעות מידע סמנטי בזמן אמת שמבוסס על מודל של למידת מכונה. בהינתן תמונה של סצנה בחוץ, ה-API מחזיר תווית לכל פיקסל על פני קבוצה של סיווגים סמנטיים שימושיים, כמו שמיים, בניין, עץ, כביש, מדרכה, רכב, אדם ועוד. בנוסף לתוויות פיקסלים, ה-Sene Semantics API מציע גם ערכי מהימנות לכל תווית של פיקסל ודרך קלה לשימוש להריץ שאילתות על השכיחות של תווית נתונה בסביבה בחוץ.
דוגמאות של תמונת קלט, התמונה הסמנטית של תוויות הפיקסלים ותמונת הסמך המתאימה: משמאל לימין:
דרישות מוקדמות
חשוב לוודא שאתם מבינים את המושגים הבסיסיים של AR ואיך להגדיר סשן ARCore לפני שממשיכים.
הפעלת הסמנטיקה של הסצנות
בסשן ARCore חדש, בודקים אם המכשיר של המשתמש תומך ב-Scene Semantics API. חלק מהמכשירים שתואמים ל-ARCore לא תומכים ב-Scene Semantics API בגלל מגבלות כוח העיבוד.
כדי לשמור משאבים, התכונה Scene Semantics מושבתת כברירת מחדל ב-ARCore. יש להפעיל את המצב הסמנטי כדי שהאפליקציה שלך תשתמש ב-Sene Semantics API.
ב-ARCoreExtensionsConfig, מגדירים את המצב הסמנטי ל'מופעל'.
אם אתם משתמשים ב-iOS, צריך להפעיל את התכונה 'סמנטיקה' גם בהגדרות הפרויקט:
- מנווטים אל עריכה > הגדרות פרויקט > ניהול פלאגין XR > ARCore extensions (תוספי ARCore).
- בקטע תכונות אופציונליות, בוחרים באפשרות סמנטיקה ב-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 פריימים מתחילת הסשן, בהתאם למכשיר.
שולחים שאילתה לגבי חלק הפיקסלים עבור תווית סמנטית
אפשר גם לבצע שאילתה לגבי חלק הפיקסלים במסגרת הנוכחית ששייכים למחלקה מסוימת, למשל שמיים. השאילתה הזו יעילה יותר מהחזרת התמונה הסמנטית וביצוע חיפוש ברמת הפיקסלים עבור תווית ספציפית. השבר המוחזר הוא ערך מסוג מספר ממשי (float) בטווח [0.0, 1.0]
.
כדי לקבל את השבר של תווית נתונה, משתמשים ב-ArSemanticManager.GetSemanticLabelFraction()
:
var fraction = semanticManager.GetSemanticLabelFraction(SemanticLabel.SKY);