فهم بيئة المستخدم على iOS

تعرّف على كيفية استخدام Scene Semantics API في تطبيقاتك الخاصة.

تتيح Scene Semantics API للمطوّرين فهم المشهد المحيط بالمستخدم من خلال توفير معلومات دلالية في الوقت الفعلي مستندة إلى نموذج تعلُّم الآلة. عند توفّر صورة لمشهد خارجي، تعرض واجهة برمجة التطبيقات تصنيفًا لكل وحدة بكسل على مستوى مجموعة من الفئات الدلالية المفيدة، مثل السماء والمبنى والشجرة والطريق والرصيف والمركبة والشخص والمزيد. بالإضافة إلى تصنيفات وحدات البكسل، توفر واجهة برمجة التطبيقات Scene Semantics API أيضًا قيم ثقة لكل تصنيف بكسل وطريقة سهلة الاستخدام للاستعلام عن انتشار تسمية معينة في مشهد خارجي.

من اليسار إلى اليمين، أمثلة لصورة إدخال، والصورة الدلالية لتصنيفات البكسل، وصورة الثقة المقابلة لها:

مثال على صورة الإدخال والصورة الدلالية وصورة الثقة الدلالية

المتطلبات الأساسية

قبل المتابعة، تأكد من فهم مفاهيم الواقع المعزّز الأساسية وكيفية ضبط جلسة ARCore.

تفعيل دلالات المشهد

في جلسة ARCore جديدة، تحقَّق مما إذا كان جهاز المستخدم متوافقًا مع Scene Semantics API. لا تتوافق بعض الأجهزة المتوافقة مع ARCore مع Scene Semantics API بسبب قيود معالجة البيانات.

لحفظ الموارد، يتم إيقاف Scene Semantics تلقائيًا على ARCore. يمكنك تفعيل الوضع الدلالي لكي يستخدم تطبيقك واجهة برمجة تطبيقات Scene Semantics.

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

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

الحصول على الصورة الدلالية

بعد تمكين "Sene Semantics"، يمكن استرداد الصورة الدلالية. الصورة الدلالية هي صورة 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 لقطات من بداية الجلسة، حسب الجهاز.

الحصول على صورة الثقة

بالإضافة إلى الصورة الدلالية التي توفّر تصنيفًا لكل بكسل، توفّر واجهة برمجة التطبيقات أيضًا صورة ثقة لقيم ثقة وحدات البكسل المقابلة. صورة الثقة هي صورة 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.
}

يجب أن تتوفّر صور ثقة في الإخراج بعد إطار واحد إلى 3 لقطات تقريبًا من بداية الجلسة، وذلك حسب الجهاز.

الاستعلام عن جزء البكسل لتصنيف دلالي

يمكنك أيضًا الاستعلام عن كسر البكسل في الإطار الحالي الذي ينتمي إلى فئة معينة، مثل السماء. هذا الاستعلام أكثر كفاءة من عرض الصورة الدلالية وإجراء بحث حسب وحدات البكسل عن تسمية معينة. الكسر الذي يتم عرضه هو قيمة عائمة في النطاق [0.0, 1.0].

استخدِم fractionForSemanticLabel: للحصول على الكسر لتصنيف معيَّن:

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