# VKSession

> 基础库 2.20.0 开始支持，低版本需做[兼容处理](1003706)。

vision kit 会话对象。

## 属性

### number state

会话状态

**state 的合法值**

| 值 | 说明 | 最低版本 |
| -- | ---- | ---- |
| 0 | 不可用 |  |
| 1 | 运行中 |  |
| 2 | 暂停中 |  |
| 3 | 初始化中 | [2.29.0](1003706) |

### Object config

会话配置


```json
[
  {
    "属性": "version",
    "类型": "string",
    "说明": "vision kit 版本。",
    "最低版本": "[2.22.0](1003706)",
    "子项": [
      {
        "合法值": "v1",
        "说明": "v1适用于用户在平面场景下，例如桌面，地面，泛平面场景，放置虚拟物体，不提供真实世界距离。用户放置物体时，手机相机倾斜向下对着目标平面点击即可，具有广泛的机型支持"
      },
      {
        "合法值": "v2",
        "说明": "v2提供真实物理距离的 ar 定位功能，提供平面识别功能，用户在平面范围点击放置虚拟物体的功能，具有[有限的机型支持](/miniprogram/dev/framework/open-ability/visionkit/plane.md#%E9%99%84%E5%BD%95)。iOS 设备在基础库 2.22.0 开始支持v2。安卓设备在基础库 2.25.1 开始支持v2，另外，安卓v2不支持竖直平面。**使用v2算法需要初始化，移动手机进行左右平移初始化效果最佳。**"
      }
    ]
  },
  {
    "属性": "track",
    "类型": "Object",
    "说明": "跟踪能力配置，目前不同的跟踪能力之间是互斥的，默认使用平面跟踪能力。需要注意目前 track 中不同的跟踪配置存在互斥关系（比如 marker 跟踪配置和 OSD 跟踪配置不能同时存在），请按需配置。",
    "最低版本": "",
    "子项": [
      {
        "结构属性": "plane",
        "类型": "Object",
        "说明": "平面跟踪配置",
        "最低版本": "",
        "子项": [
          {
            "结构属性": "mode",
            "类型": "number",
            "说明": "平面跟踪配置模式",
            "最低版本": "",
            "子项": [
              {
                "合法值": "1",
                "说明": "检测横向平面",
                "最低版本": ""
              },
              {
                "合法值": "2",
                "说明": "检测纵向平面，只有 v2 版本支持",
                "最低版本": "[2.22.0](1003706)"
              },
              {
                "合法值": "3",
                "说明": "检测横向和纵向平面，只有 v2 版本支持",
                "最低版本": "[2.22.0](1003706)"
              }
            ]
          },
          {
            "结构属性": "force",
            "类型": "boolean",
            "说明": "是否开启强制使用V2的模式，只有 v2 版本支持",
            "最低版本": "[3.6.5](1003706)"
          }
        ]
      },
      {
        "结构属性": "marker",
        "类型": "boolean",
        "说明": "marker 跟踪配置，基础库(3.0.0)开始允许同时支持v2的水平面检测能力",
        "最低版本": "[2.24.5](1003706)"
      },
      {
        "结构属性": "OSD",
        "类型": "boolean",
        "说明": "OSD 跟踪配置",
        "最低版本": "[2.24.5](1003706)"
      },
      {
        "结构属性": "depth",
        "类型": "Object",
        "说明": "深度识别配置。用法详情[指南文档](/miniprogram/dev/framework/open-ability/visionkit/depth.md)。",
        "最低版本": "[3.0.0](1003706)",
        "子项": [
          {
            "结构属性": "mode",
            "类型": "number",
            "说明": "深度识别模式",
            "最低版本": "[3.0.0](1003706)",
            "子项": [
              {
                "合法值": "1",
                "说明": "通过摄像头实时检测",
                "最低版本": "[3.0.0](1003706)"
              },
              {
                "合法值": "2",
                "说明": "静态图片检测",
                "最低版本": "[3.0.0](1003706)"
              }
            ]
          }
        ]
      },
      {
        "结构属性": "face",
        "类型": "Object",
        "说明": "人脸检测配置。用法详情[指南文档](/miniprogram/dev/framework/open-ability/visionkit/face.md)。安卓微信8.0.25开始支持，iOS微信8.0.24开始支持。",
        "最低版本": "[2.25.0](1003706)",
        "子项": [
          {
            "结构属性": "mode",
            "类型": "number",
            "说明": "人脸检测模式",
            "最低版本": "[2.25.0](1003706)",
            "子项": [
              {
                "合法值": "1",
                "说明": "通过摄像头实时检测",
                "最低版本": "[2.25.0](1003706)"
              },
              {
                "合法值": "2",
                "说明": "静态图片检测",
                "最低版本": "[2.25.0](1003706)"
              }
            ]
          }
        ]
      },
      {
        "结构属性": "OCR",
        "类型": "Object",
        "说明": "OCR检测配置。用法详情[指南文档](/miniprogram/dev/framework/open-ability/visionkit/ocr.md)。",
        "最低版本": "[2.27.0](1003706)",
        "子项": [
          {
            "结构属性": "mode",
            "类型": "number",
            "说明": "OCR检测模式",
            "最低版本": "[2.27.0](1003706)",
            "子项": [
              {
                "合法值": "1",
                "说明": "通过摄像头实时检测",
                "最低版本": "[2.27.0](1003706)"
              },
              {
                "合法值": "2",
                "说明": "静态图片检测",
                "最低版本": "[2.27.0](1003706)"
              }
            ]
          }
        ]
      },
      {
        "结构属性": "IDCard",
        "类型": "Object",
        "说明": "身份证检测配置。用法详情[指南文档](/miniprogram/dev/framework/open-ability/visionkit/idcard.md)。",
        "最低版本": "[3.3.0](1003706)",
        "子项": [
          {
            "结构属性": "mode",
            "类型": "number",
            "说明": "身份证检测模式",
            "最低版本": "[3.3.0](1003706)",
            "子项": [
              {
                "合法值": "2",
                "说明": "静态图片检测",
                "最低版本": "[3.3.0](1003706)"
              }
            ]
          }
        ]
      },
      {
        "结构属性": "body",
        "类型": "Object",
        "说明": "人体检测配置。用法详情[指南文档](/miniprogram/dev/framework/open-ability/visionkit/body.md)。",
        "最低版本": "[2.28.0](1003706)",
        "子项": [
          {
            "结构属性": "mode",
            "类型": "number",
            "说明": "人体检测模式",
            "最低版本": "[2.28.0](1003706)",
            "子项": [
              {
                "合法值": "1",
                "说明": "通过摄像头实时检测",
                "最低版本": "[2.28.0](1003706)"
              },
              {
                "合法值": "2",
                "说明": "静态图片检测",
                "最低版本": "[2.28.0](1003706)"
              }
            ]
          }
        ]
      },
      {
        "结构属性": "hand",
        "类型": "Object",
        "说明": "手势检测配置。用法详情[指南文档](/miniprogram/dev/framework/open-ability/visionkit/hand.md)。",
        "最低版本": "[2.28.0](1003706)",
        "子项": [
          {
            "结构属性": "mode",
            "类型": "number",
            "说明": "手势检测模式",
            "最低版本": "[2.28.0](1003706)",
            "子项": [
              {
                "合法值": "1",
                "说明": "通过摄像头实时检测",
                "最低版本": "[2.28.0](1003706)"
              },
              {
                "合法值": "2",
                "说明": "静态图片检测",
                "最低版本": "[2.28.0](1003706)"
              }
            ]
          }
        ]
      },
      {
        "结构属性": "shoe",
        "类型": "Object",
        "说明": "鞋部检测配置。用法详情[指南文档](/miniprogram/dev/framework/open-ability/visionkit/shoe.md)。",
        "最低版本": "[3.2.1](1003706)",
        "子项": [
          {
            "结构属性": "mode",
            "类型": "number",
            "说明": "鞋部检测模式",
            "最低版本": "[3.2.1](1003706)",
            "子项": [
              {
                "合法值": "1",
                "说明": "通过摄像头实时检测",
                "最低版本": "[3.2.1](1003706)"
              }
            ]
          }
        ]
      },
      {
        "结构属性": "threeDof",
        "类型": "boolean",
        "说明": "提供基础AR功能，输出相机旋转的3个自由度的位姿，利用手机陀螺仪传感器，实现快速稳定的AR定位能力，适用于简单AR场景。",
        "最低版本": "[2.28.0](1003706)"
      }
    ]
  },
  {
    "属性": "gl",
    "类型": "WebGLRenderingContext",
    "说明": "绑定的 WebGLRenderingContext 对象",
    "最低版本": "[2.23.0](1003706)"
  }
]
```

### Object cameraSize

相机尺寸

| 属性 | 类型 | 说明 |
| ---- | ---- | ---- |
| width  | number | 宽度 |
| height  | number | 高度 |

## 方法

### [VKSession.start(VKSessionStartCallback callback)](/miniprogram/dev/api/ai/visionkit/VKSession.start)

开启会话。

### [VKSession.stop()](/miniprogram/dev/api/ai/visionkit/VKSession.stop)

停止会话。

### [VKSession.destroy()](/miniprogram/dev/api/ai/visionkit/VKSession.destroy)

销毁会话。

### [number VKSession.requestAnimationFrame(function callback)](/miniprogram/dev/api/ai/visionkit/VKSession.requestAnimationFrame)

在下次进行重绘时执行。

### [VKSession.cancelAnimationFrame(number requestID)](/miniprogram/dev/api/ai/visionkit/VKSession.cancelAnimationFrame)

取消由 requestAnimationFrame 添加到计划中的动画帧请求。

### [VKFrame VKSession.getVKFrame(number width, number height)](/miniprogram/dev/api/ai/visionkit/VKSession.getVKFrame)

获取帧对象，每调用一次都会触发一次帧分析过程。目前 VKSession 相机的最大帧数是 30 fps，因此调用 getVKFrame 的频率也可以限制在 30 fps，以减少渲染开销。

### [Array. VKSession.hitTest(number x, number y, Object reset)](/miniprogram/dev/api/ai/visionkit/VKSession.hitTest)

触摸检测，v1 版本只支持单平面（即 hitTest 生成一次平面后，后续 hitTest 均不会再生成平面，而是以之前生成的平面为基础进行检测）。如果需要重新识别其他平面，可以在调用此方法时将 reset 参数置为 true。

### [number VKSession.addMarker(string path)](/miniprogram/dev/api/ai/visionkit/VKSession.addMarker)

添加一个 marker，要求调 [wx.createVKSession](/miniprogram/dev/api/ai/visionkit/wx.createVKSession) 时传入的 track.marker 为 true

### [VKSession.removeMarker(number markerId)](/miniprogram/dev/api/ai/visionkit/VKSession.removeMarker)

删除一个 marker，要求调 [wx.createVKSession](/miniprogram/dev/api/ai/visionkit/wx.createVKSession) 时传入的 track.marker 为 true

### [Array. VKSession.getAllMarker()](/miniprogram/dev/api/ai/visionkit/VKSession.getAllMarker)

获取所有 marker，要求调 [wx.createVKSession](/miniprogram/dev/api/ai/visionkit/wx.createVKSession) 时传入的 track.marker 为 true

### [number VKSession.addOSDMarker(string path)](/miniprogram/dev/api/ai/visionkit/VKSession.addOSDMarker)

添加一个 OSD marker（one-shot detection marker），要求调 [wx.createVKSession](/miniprogram/dev/api/ai/visionkit/wx.createVKSession) 时传入的 track.OSD 为 true

### [VKSession.removeOSDMarker(number markerId)](/miniprogram/dev/api/ai/visionkit/VKSession.removeOSDMarker)

删除一个 OSD marker，要求调 [wx.createVKSession](/miniprogram/dev/api/ai/visionkit/wx.createVKSession) 时传入的 track.OSD 为 true

### [Array. VKSession.getAllOSDMarker()](/miniprogram/dev/api/ai/visionkit/VKSession.getAllOSDMarker)

获取所有 OSD marker，要求调 [wx.createVKSession](/miniprogram/dev/api/ai/visionkit/wx.createVKSession) 时传入的 track.OSD 为 true

### [VKSession.update3DMode(Object object)](/miniprogram/dev/api/ai/visionkit/VKSession.update3DMode)

更新三维识别相关配置，要求调 [wx.createVKSession](/miniprogram/dev/api/ai/visionkit/wx.createVKSession) 时使用 face / hand / body。

### [VKSession.updateMaskMode(Object object)](/miniprogram/dev/api/ai/visionkit/VKSession.updateMaskMode)

设置裁剪相关配置，要求调 [wx.createVKSession](/miniprogram/dev/api/ai/visionkit/wx.createVKSession) 时使用 shoe。

### [VKSession.updateOSDThreshold(number threshold)](/miniprogram/dev/api/ai/visionkit/VKSession.updateOSDThreshold)

更新 OSD 识别精确度，要求调 [wx.createVKSession](/miniprogram/dev/api/ai/visionkit/wx.createVKSession) 时传入的 track.OSD 为 true

### [VKSession.setDepthOccRange(number threshold)](/miniprogram/dev/api/ai/visionkit/VKSession.setDepthOccRange)

更新 深度遮挡 Occ范围，要求调 [wx.createVKSession](/miniprogram/dev/api/ai/visionkit/wx.createVKSession) 时传入 {track: {depth: {mode: 2} } }

### [VKSession.detectFace(Object object)](/miniprogram/dev/api/ai/visionkit/VKSession.detectFace)

静态图像人脸关键点检测。当 wx.createVKSession 参数传入 {track: {face: {mode: 2} } } 时可用。用法详情[指南文档](/miniprogram/dev/framework/open-ability/visionkit/face.md)。安卓微信8.0.25开始支持，iOS微信8.0.24开始支持。

### [VKSession.detectBody(Object object)](/miniprogram/dev/api/ai/visionkit/VKSession.detectBody)

静态图像人体关键点检测。当 wx.createVKSession 参数传入 {track: {body: {mode: 2} } } 时可用。用法详情[指南文档](/miniprogram/dev/framework/open-ability/visionkit/body.md)。

### [VKSession.detectHand(Object object)](/miniprogram/dev/api/ai/visionkit/VKSession.detectHand)

静态图像手势关键点检测。当 wx.createVKSession 参数传入 {track: {hand: {mode: 2} } } 时可用。用法详情[指南文档](/miniprogram/dev/framework/open-ability/visionkit/hand.md)。

### [VKSession.detectDepth(Object object)](/miniprogram/dev/api/ai/visionkit/VKSession.detectDepth)

深度识别。当 wx.createVKSession 参数传入 {track: {depth: {mode: 2} } } 时可用。用法详情[指南文档](/miniprogram/dev/framework/open-ability/visionkit/depth.md)。

### [VKSession.runOCR(Object object)](/miniprogram/dev/api/ai/visionkit/VKSession.runOCR)

静态图像OCR检测。当 wx.createVKSession 参数传入 {track: {OCR: {mode: 2} } } 时可用。用法详情[指南文档](/miniprogram/dev/framework/open-ability/visionkit/ocr.md)。

### [VKSession.on(string eventName, function fn)](/miniprogram/dev/api/ai/visionkit/VKSession.on)

监听会话事件。

### [VKSession.off(string eventName, function fn)](/miniprogram/dev/api/ai/visionkit/VKSession.off)

取消监听会话事件。
