对于检测到的平面,您可以通过AR Engine识别该平面的语义,包括墙面、地面、座椅面、桌面、天花板、门面、窗面、床面。
创建AR会话
创建AR会话并配置为平面语义识别模式。
- AREngine_ARSession *arSession = nullptr;
- // 创建AR会话。
- HMS_AREngine_ARSession_Create(nullptr, nullptr, &arSession);
- AREngine_ARConfig *arConfig = nullptr;
- // 创建AR会话配置器。
- HMS_AREngine_ARConfig_Create(arSession, &arConfig);
- // 设置语义识别模式为平面语义识别。
- HMS_AREngine_ARConfig_SetSemanticMode(arSession, arConfig, ARENGINE_SEMANTIC_MODE_PLANE);
- // 配置器设置给AR会话。
- HMS_AREngine_ARSession_Configure(arSession, arConfig);
检测环境中的平面
进行平面语义识别之前,您需要先检测环境中的平面。您可以参考检测环境中的平面完成平面检测过程,并获取环境中的平面数量。当存在平面时,您可以继续下面的步骤。
初始化平面语义标签
创建并初始化平面语义标签label,用于描述平面的语义。
- AREngine_ARSemanticPlaneLabel label = ARENGINE_PLANE_UNKNOWN;
平面语义标签定义为枚举类型,包括9种枚举值(1种未知类型+8种平面类型)。
- typedef enum {
- /** Unknown type. */
- ARENGINE_PLANE_UNKNOWN = 0,
- /** Wall. */
- ARENGINE_PLANE_WALL = 1,
- /** Floor. */
- ARENGINE_PLANE_FLOOR = 2,
- /** Seat. */
- ARENGINE_PLANE_SEAT = 3,
- /** Table. */
- ARENGINE_PLANE_TABLE = 4,
- /** Ceiling. */
- ARENGINE_PLANE_CEILING = 5,
- /** Door. */
- ARENGINE_PLANE_DOOR = 6,
- /** Window. */
- ARENGINE_PLANE_WINDOW = 7,
- /** Bed. */
- ARENGINE_PLANE_BED = 8
- } AREngine_ARSemanticPlaneLabel;
识别平面类型
调用HMS_AREngine_ARPlane_GetLabel函数,获取平面类型,结果存放在label中。
- HMS_AREngine_ARPlane_GetLabel(arSession, arPlane, &label);