识别平面语义（C/C++）
=============

#### 约束与限制

从5.0.0(12)开始，识别平面语义能力支持部分Phone、部分Tablet设备。请参考[硬件要求](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arengine-preparations#硬件要求)判断设备是否支持平面语义及物体语义特性（[ARENGINE\_FEATURE\_TYPE\_SEMANTIC](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arengine-capi-arengine#arengine_featuretype)）。

#### 引入AR Engine

开发者可参考管理AR会话章节的[引入AR Engine](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arengine-c-arsession#引入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);

#### 检测环境中的平面

进行平面语义识别之前，需要先检测环境中的平面。开发者可以参考[检测环境中的平面](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arengine-c-get-plane)完成平面检测过程，并获取环境中的平面数量。当存在平面时，就可以继续下面的步骤。

#### 初始化平面语义标签

创建并初始化平面语义标签label，用于描述平面的语义。

AREngine\_ARSemanticPlaneLabel label = ARENGINE\_PLANE\_UNKNOWN;

平面语义标签定义为枚举类型，包括12种枚举值（1种未知类型+11种平面类型）。

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,
    /\*\* Plane Space. \*/
    ARENGINE\_PLANE\_SPACE = 9,
    /\*\* Cube Volume. \*/
    ARENGINE\_CUBE\_VOLUME = 10,
    /\*\* Cube Space. \*/
    ARENGINE\_CUBE\_SPACE = 11,
} AREngine\_ARSemanticPlaneLabel;

#### 识别平面类型

调用[HMS\_AREngine\_ARPlane\_GetLabel](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arengine-capi-arengine#hms_arengine_arplane_getlabel)函数，获取平面类型，结果存放在label中。平面的获取可以参考[获取平面实例](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arengine-c-get-plane#获取平面实例)。

HMS\_AREngine\_ARPlane\_GetLabel(arSession, arPlane, &label);