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

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

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

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

דוגמה של תמונת קלט, תמונה סמנטית ותמונה של ביטחון סמנטי.

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

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

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

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

כדי לשמור משאבים, התכונה Scene Semantics מושבתת כברירת מחדל ב-ARCore. יש להפעיל את המצב הסמנטי כדי שהאפליקציה שלך תשתמש ב-Sene 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 פריימים מתחילת הסשן, בהתאם למכשיר.

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

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

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

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