הבנת סביבת המשתמש ב-iOS

רוצים לדעת איך משתמשים ב-Scene Semantics API באפליקציות שלכם?

ה-Scemantics API מאפשר למפתחים להבין את הסצנה שמסביב למשתמש באמצעות מידע סמנטי בזמן אמת שמבוסס על מודל למידת מכונה. בהינתן תמונה של סצנה בחוץ, ה-API מחזיר תווית לכל פיקסל בקבוצה של סיווגים סמנטיים שימושיים, כגון שמיים, בניין, עץ, כביש, מדרכה, כלי רכב, אדם ועוד. בנוסף לתוויות פיקסל, ממשק ה-API 'סמנטיקה של סצינה' מציע גם ערכי מהימנות לכל תווית של פיקסל ודרך קלה לשימוש לשליחת שאילתות לגבי השכיחות של תווית נתונה בסצנה חיצונית.

משמאל לימין דוגמאות של תמונת קלט, התמונה הסמנטית של תוויות הפיקסלים ותמונת הסמך המתאימה:

דוגמה לתמונת קלט, תמונה סמנטית ותמונת מהימנות סמנטית.

דרישות מוקדמות

לפני שממשיכים, חשוב לוודא שאתם מבינים את המושגים הבסיסיים של AR ואת האופן שבו מגדירים סשן של ARCore.

הפעלת סמנטיקה של סצנות

בסשן ARCore חדש, צריך לבדוק אם מכשיר של משתמש תומך ב-Scemantics API. לא כל המכשירים שתואמים ל-ARCore תומכים ב-Scemantics API בגלל אילוצי כוח עיבוד.

כדי לחסוך במשאבים, התכונה 'סמנטיקה' מושבתת כברירת מחדל ב-ARCore. צריך להפעיל מצב סמנטי כדי שהאפליקציה תשתמש ב-Scement Semantics API.

GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
if ([self.garSession isSemanticModeSupported:GARSemanticModeEnabled]) {
    configuration.semanticMode = GARSemanticModeEnabled;
}

NSError *error;
[self.garSession setConfiguration:configuration error:&error];

השגת התמונה הסמנטית

לאחר הפעלת 'סמנטיקה של סצינה', ניתן לאחזר את התמונה הסמנטית. התמונה הסמנטית היא תמונה מסוג kCVPixelFormatType_OneComponent8, שבה כל פיקסל תואם לתווית סמנטית שהוגדרה על ידי GARSemanticLabel.

משתמשים ב-GARFrame.semanticImage כדי לצרף את התמונה הסמנטית:

CVPixelBuffer semanticImage = garFrame.semanticImage;
if (semanticImage) {
    // Use the semantic image here
} else {
    // Semantic images are not available.
    // The output image may be missing for the first couple frames before the model has had a
    // chance to run yet.
}

תמונות סמנטיות של פלט צריכות להיות זמינות לאחר 1-3 פריימים מתחילת הסשן, בהתאם למכשיר.

משיגים את תמונת הביטחון

בנוסף לתמונה הסמנטית, שמספקת תווית לכל פיקסל, ה-API מספק גם תמונת מהימנות של ערכי המהימנות התואמים של הפיקסלים. תמונת המהימנות היא תמונה של kCVPixelFormatType_OneComponent8, שבה כל פיקסל תואם לערך בטווח [0, 255], שתואם להסתברות המשויכת לתווית הסמנטית של כל פיקסל.

שימוש ב-GARFrame.semanticConfidenceImage כדי להשיג את תמונת המהימנות הסמנטית:

CVPixelBuffer confidenceImage = garFrame.semanticConfidenceImage;
if (confidenceImage) {
    // Use the semantic image here
} else {
    // Semantic images are not available.
    // The output image may be missing for the first couple frames before the model has had a
    // chance to run yet.
}

תמונות מהימנות פלט צריכות להיות זמינות לאחר 1-3 פריימים מתחילת הסשן, בהתאם למכשיר.

הרצת שאילתה על חלק הפיקסלים עבור תווית סמנטית

ניתן גם לבצע שאילתה לגבי שבר הפיקסלים במסגרת הנוכחית, ששייכים למחלקה מסוימת, כמו שמיים. השאילתה הזו יעילה יותר מהחזרת התמונה הסמנטית וביצוע חיפוש לפי פיקסלים של תווית ספציפית. השבר המוחזר הוא ערך צף בטווח [0.0, 1.0].

משתמשים ב-fractionForSemanticLabel: כדי לקבל את השבר לתווית נתונה:

// Ensure that semantic data is present for the GARFrame.
if (garFrame.semanticImage) {
    float fraction = [garFrame fractionForSemanticLabel:GARSemanticLabelSky];
}