فهم بيئة المستخدم على حزمة تطوير البرامج (SDK) لنظام التشغيل Android (Kotlin/Java)

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

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

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

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

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

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

تفعيل ميزة "دلالات المشهد"

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

لتوفير الموارد، تكون ميزة "دلالات المشهد" غير مفعّلة تلقائيًا على ARCore. فعِّل الوضع الدلالي ليتمكّن تطبيقك من استخدام واجهة برمجة التطبيقات Scene Semantics API.

JavaKotlin
Config config = session.getConfig();

// Check whether the user's device supports the Scene Semantics API.
boolean isSceneSemanticsSupported =
    session.isSemanticModeSupported(Config.SemanticMode.ENABLED);
if (isSceneSemanticsSupported) {
  config.setSemanticMode(Config.SemanticMode.ENABLED);
}
session.configure(config);
val config = session.config

// Check whether the user's device supports the Scene Semantics API.
val isSceneSemanticsSupported = session.isSemanticModeSupported(Config.SemanticMode.ENABLED)
if (isSceneSemanticsSupported) {
  config.semanticMode = Config.SemanticMode.ENABLED
}
session.configure(config)

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

بعد تفعيل ميزة "دلالات المشهد"، يمكن استرداد الصورة الدلالية. الصورة الدلالية هي صورة ImageFormat.Y8، حيث يتوافق كل بكسل مع تصنيف دلالي يحدّده SemanticLabel.

استخدِم Frame.acquireSemanticImage() للحصول على الصورة الدلالية:

JavaKotlin
// Retrieve the semantic image for the current frame, if available.
try (Image semanticImage = frame.acquireSemanticImage()) {
  // Use the semantic image here.
} catch (NotYetAvailableException e) {
  // No semantic image retrieved for this frame.
  // The output image may be missing for the first couple frames before the model has had a
  // chance to run yet.
}
// Retrieve the semantic image for the current frame, if available.
try {
  frame.acquireSemanticImage().use { semanticImage ->
    // Use the semantic image here.
  }
} catch (e: NotYetAvailableException) {
  // No semantic image retrieved for this frame.
}

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

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

بالإضافة إلى الصورة الدلالية التي تقدّم تصنيفًا لكل بكسل، تقدّم واجهة برمجة التطبيقات أيضًا صورة ثقة لقيم ثقة وحدات البكسل المقابلة. صورة الثقة هي صورة ImageFormat.Y8، حيث يقابل كل بكسل قيمة في النطاق [0, 255]، ما يتوافق مع الاحتمالية المرتبطة بالعلامة الدلالية لكل بكسل.

استخدِم Frame.acquireSemanticConfidenceImage() للحصول على صورة الثقة الدلالية:

JavaKotlin
// Retrieve the semantic confidence image for the current frame, if available.
try (Image semanticImage = frame.acquireSemanticConfidenceImage()) {
  // Use the semantic confidence image here.
} catch (NotYetAvailableException e) {
  // No semantic confidence image retrieved for this frame.
  // The output image may be missing for the first couple frames before the model has had a
  // chance to run yet.
}
// Retrieve the semantic confidence image for the current frame, if available.
try {
  frame.acquireSemanticConfidenceImage().use { semanticConfidenceImage ->
    // Use the semantic confidence image here.
  }
} catch (e: NotYetAvailableException) {
  // No semantic confidence image retrieved for this frame.
}

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

طلب نسبة البكسلات لتصنيف دلالي

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

استخدِم Frame.getSemanticLabelFraction() للحصول على الجزء الخاص بتصنيف معيّن:

JavaKotlin
// Retrieve the fraction of pixels for the semantic label sky in the current frame.
try {
  float outFraction = frame.getSemanticLabelFraction(SemanticLabel.SKY);
  // Use the semantic label fraction here.
} catch (NotYetAvailableException e) {
  // No fraction of semantic labels was retrieved for this frame.
}
// Retrieve the fraction of pixels for the semantic label sky in the current frame.
try {
  val fraction = frame.getSemanticLabelFraction(SemanticLabel.SKY)
  // Use the semantic label fraction here.
} catch (e: NotYetAvailableException) {
  // No fraction of semantic labels was retrieved for this frame.
}