运行时配置

LeapMotion 系统在配置文件中存储了很多选项。其中包括大部分 LeapMotion 控制面板中用户可设置的选项,业务控制设置以及功能控制设置。这些选项可以在运行 LeapMotion 服务/守护进程时作为命令行选项,通过修改一个 JSON 格式的配置文件,或使用 Config 类在运行时进行设置。

重要说明:这些设置会影响所有正在运行的支持 Leap 的程序,而不仅仅只针对你的程序。在你自己的电脑上修改设置时要小心,因为这些修改可能在你用户的电脑上不能轻易做到。

追踪控制设置

追踪设置可以控制供给应用程序的有效的追踪数据。

  • tracking_hand_enabled: boolean 激活或关闭手部的追踪。注意,任何在视野中已经被手都能够被持续被追踪,如果关闭手部的追踪,那么将会持续到它们从视野中被移除,而任何新增加的手都不会被追踪。

从这个设置可以由用户控制后,你应该询问是否有更改这个设置值的权限:

  1. isHandTrackingEnabled = controller.config.get("tracking_hand_enabled");
  2. if not isHandTrackingEnabled:
  3. # Show dialog to request permission to turn on hand tracking
  4. if permissionGranted:
  5. controller.config.set("tracking_hand_enabled", true);
  6. controller.config.save();
  • tracking_tool_enabled: boolean 激活或关闭对工具的追踪。

自从这个设置可以由用户控制后,你应该询问是否具有改变这个设置值的权限:

  1. isToolTrackingEnabled = controller.config.get("tracking_tool_enabled");
  2. if not isToolTrackingEnabled:
  3. # Show dialog to request permission to turn on tool tracking
  4. if permissionGranted:
  5. controller.config.set("tracking_tool_enabled", true);
  6. controller.config.save();
  • images_mode: integer

激活或关闭图像模式。设置为0可以关闭图像;设置为2可以开启图像。

自从这个值可以由用户控制后,你应该询问是否具有改变这个值的权限。

注意,应用程序依然需要在运行时中调用图像代理 API获得图像数据。简单的在Leap服务中开启图像模式是不够的。

  1. areImagesEnabled = controller.config.get("tracking_images_mode") == 2;
  2. if not areImagesEnabled:
  3. # Show dialog to request permission to turn on images
  4. if permissionGranted:
  5. controller.config.set("tracking_images_mode", 2);
  6. controller.config.save();
  • image_processing_auto_flip: boolean 启动时,LeapMotion 设备可以同时将有绿色 LED 灯朝下或朝向远离用户方向进行使用。这个服务检测定位和翻转设备的图像。关闭时,图像永远不会进行翻转,且对于手部的识别必须当绿色 LED 灯所在一侧的设备朝向用户(或连接 HMD 设备朝下)时才能使用。

自从这个值可以由用户控制后,你应该询问是否具有改变这个值的权限。

  1. # read
  2. autoFlip = controller.config.get("tracking_processing_auto_flip");
  3. # write
  4. controller.config.set("tracking_processing_auto_flip", false);
  5. controller.config.save();

服务控制设置

服务控制设备能够改变 LeapMotion 服务或进程的操作。

  • robust_mode_enabled: boolean

鲁棒模式下能够向外界提供充足的 IR 光线。然而它依然会显著低于帧率。如果帧率太低,关闭鲁棒模式能够可能导致较差的追踪性能。

鲁棒模式能够在控制面板中开启并设置robust_mode_enabled配置参数。当启动时,系统会在当 IR 光线被检测到时开启鲁棒模式。

  1. # read
  2. robustMode = controller.config.get("robust_mode_enabled");
  3. # write
  4. controller.config.set("robust_mode_enabled", false);
  5. controller.config.save();

自从这个值可以由用户控制后,你应该询问是否具有改变这个值的权限。

  • avoid_poor_performance: boolean

自从这个值可以由用户控制后,你应该询问是否具有改变这个值的权限。

  1. # read
  2. avoidPoorPerformance = controller.config.get("avoid_poor_performance");
  3. # write
  4. controller.config.set("avoid_poor_performance", false);
  5. controller.config.save();
  • background_app_mode: integer

决定应用程序能够在后台任务中收到追踪数据。

自从这个值可以由用户控制后,你应该询问是否具有改变这个值的权限。

  1. backgroundModeAllowed = controller.config.get("background_app_mode") == 2;
  2. if not backgroundModeAllowed:
  3. # Show dialog to request permission to allow background mode apps
  4. if permissionGranted:
  5. controller.config.set("background_app_mode", 2);
  6. controller.config.save();
  • cpu_affinity_mask: integer

处理器关联会在多核系统上控制进程在某个 CPU 核心在运行。你可以使用cpu_affinity_mask配置参数来控制 LeapMotion 服务的处理器关联。这个参数需要一个整数值转换为位掩码,用于指定由哪个 CPU 核心来运行服务(例如,3的二进制表示为0011,将指定核心运行在核心1和核心2上)。值为0时表示使用 OS 默认行为。

这个掩码会被传递给 Windows SetProcessorAffinityMask() API。所以这个参数不支持其他操作系统。

改变这个值后会重启当前服务。一般来说,使用 LeapSvc 命令或在 JSON 文件中配置这个值更有意义。

  1. {
  2. "configuration": {
  3. "cpu_affinity_mask": 1,
  4. "process_niceness": 6
  5. }
  6. }
  • process_niceness: integer

线程优先级控制了引起 LeapMotion 服务的线程优先级。线程优先级由process_niceness配置参数进行控制。指定 0 表示 分配 OS 的默认优先级;可以分配从 1~9 的特定优先级(1=最低,9=最高)

改变这个值后会重启当前服务。一般来说,使用 LeapSvc 命令或在 JSON 文件中配置这个值更有意义。这个设置只在 Windows 中有效。

  • no_cp_startup: boolean

决定了 LeapMotion 的控制面板是否会在计算机启动时自动启动。设置为 true 时候不会被自动启动,false(默认值)来允许自动启动。

  1. # read
  2. controlPanelOnStartup = controller.config.get("no_cp_startup");
  3. # write
  4. controller.config.set("no_cp_startup", false);
  5. controller.config.save();
  • auto_check_updates: boolean

决定了 LeapMotion 服务是否会自动进行软件更新。

自从这个设置可以由用户进行控制,你应该在改变这个设置之前检查是否具有修改权限。

  1. # read
  2. autoUpdateCheck = controller.config.get("auto_check_updates");
  3. # write
  4. controller.config.set("auto_check_updates", false);
  5. controller.config.save();
  • auto_install_updates: boolean

决定了 LeapMotion 服务是否会自动更新软件。只有当auto_check_updates设置被设置为 true 时才能有效。

  1. # read
  2. autoInstallUpdates = controller.config.get("auto_install_updates");
  3. # write
  4. controller.config.set("auto_install_updates", false);
  5. controller.config.save();
  • show_tray_messages: boolean

允许通知区域消息在服务或守护进程图表中显示。设置为 true 时表示允许(默认值);false 为阻止消息。

这个设置只能在你控制的电脑上进行使用。

  1. # read
  2. showNotifications = controller.config.get("show_tray_messages");
  3. # write
  4. controller.config.set("show_tray_messages", false);
  5. controller.config.save();
  • metrics_enabled: boolean

允许使用公制度量。

这个设置只能在你控制的计算机上使用。

  1. # read
  2. enableMetrics = controller.config.get("metrics_enabled");
  3. # write
  4. controller.config.set("metrics_enabled", false);
  5. controller.config.save();

节能选项

节能选项包括了控制面盘节能选项和低资源模式的设置。节能模式在电脑运行在电池下时会自动开启,但也可以通过参数进行配置。 节能模式的配置参数如下:

  • power_saving_adapter: boolean

限制帧率进行节能,即使电脑接通电源。

  1. # read
  2. acPowerSaver = controller.config.get("power_saving_adapter");
  3. # write
  4. controller.config.set("power_saving_adapter", false);
  5. controller.config.save();
  • power_saving_battery: boolean

当电脑运行在电池驱动下时,限制帧率来节约能源。

  1. # read
  2. batteryPowerSaver = controller.config.get("power_saving_battery");
  3. # write
  4. controller.config.set("power_saving_battery", false);
  5. controller.config.save();
  • low_resource_mode_enabled: boolean

限制帧率以降低 USB 带宽。

  1. # read
  2. lowResourceMode = controller.config.get("low_resource_mode_enabled");
  3. # write
  4. controller.config.set("low_resource_mode_enabled", false);
  5. controller.config.save();

当设置false时,禁用这些选项;当设置为true时开启它们。

这些设置不会叠加。当你同时开启了两种节能模式和低资源模式时,那么由此产生的帧率为所设置的最小值。

节能模式的设置参数会在图像模式被开启时失效。(低资源模式下依然有效。)

WebSocket 选项

WebSocket 的选项控制程序如何能连接到 LeapMotion 提供的 WebSocket 服务。

重要:如果你修改了这些值,那些期望使用默认 WebSocket 设置的程序将会连接失败。

键值 值类型 默认值 用途
websockets_enabled 布尔值 true 启用或禁用所有连接
websockets_allow_remote 布尔值 false 允许非本地客户端链接
ws_port 整数 6437 用于 HTTP 客户端
wss_port 整数 6436 用户 HTTPS 客户端

注意,修改端口号只有在 LeapMotion 服务或守护进程重启时才能生效。一般情况下,在命令行或者 config.json 文件中设置这些值会更有意义:

  1. {
  2. "configuration": {
  3. "websockets_enabled": true,
  4. "websockets_allow_remote": false,
  5. "ws_port": 51000,
  6. "wss_port": 51001
  7. }
  8. }

功能控制设置

两套配置设置控制了独立追踪功能如何运作的。

InteractionBox 选项

Interaction Box 选项使用 InteractionBox 类来计算坐标中交互盒子的位置和大小。

键值 值类型 默认值 功能
interaction_box_auto boolean true 基于用户的手设置高度
interaction_box_height integer 200mm 当前高度设置
interaction_box_scale float 0.8 变换盒子的尺寸

高度参数设置了LeapMotion 设备上方的交互区域的高度。盒子的大小最大化到交互区域的边界上。你可以在 Visulizer 中双击 L 键进行查看。

注意,在2.2.5以上的版本中存在一个 Bug,会阻止手动设置交互盒子的高度。高度只有在interaction_box_auto有效时,在响应用户手的移动时才能被改变。

自从interaction_box_autointeraction_box_height设置能够被用户设置,你应该检查是否有修改这个值的权限。

更多信息请参考:InteractionBox坐标系统

手势选项

手势选项可以调整 LeapMotion 内置的手势检测参数。这些参数的默认值的设置不仅让手势的检测变得简单,且不会引发很多错误的手势。如果你要使用全部的手势,你可能不能改进默认值,请精良在不同的应用程序之间使用不同的交互设计。相反的,如果你只是用一个或两个手势,那么你可以很好的调整调整这些参数来满足你的交互,因为这时触发这些检测算法之间的互相『碰撞』的几率会小很多。尤其是两个点按手势对于用户执行的可靠性会变得非常糟糕。如果你能够在特定的时间或地插你限制点击手势的执行(以一种直观的方式展现给用户),那么你可以考虑激活他们——在没有使用意外的情况下。

键值 值类型 默认值 单位
Gesture.Circle.MinRadius float 5.0 mm
Gesture.Circle.MinArc float 1.5 * pi 弧度
Gesture.Swipe.MinLength float 150 mm
Gesture.Swipe.MinVelocity float 1000 mm/s
Gesture.KeyTap.MinDownVelocity float 50 mm/s
Gesture.KeyTap.HistorySeconds float 0.1s
Gesture.KeyTap.MinDistance float 5.0 mm
Gesture.ScreenTap.MinForwardVelocity float 50 mm/s
Gesture.ScreenTap.HistorySeconds float 0.1 s
Gesture.ScreenTap.MinDistance float 3.0 mm

设置配置选项

使用命令行

在命令行中设置配置参数,可以在窗口中运行 LeapSvc,具体说明如下:

  • Windows:
    • LeapSvc —option_name=value —another_option=value
  • Mac/Linux:
    • leapd —option_name=value —another_option=value

通常 LeapSvc 或 leapd 会作为服务或守护进程被自动安装。在手动运行 LeapSvc 之前,你必须将已经运行的服务停止。你可以标准的 Windows 网络命令中(使用管理员账户):

  • Windows
    • net stop LeapService
  • Mac
    • sudo launchctl unload /Library/LaunchDaemons/com.leapmotion.leapd.plist
  • Linux:
    • sudo service leapd stop

作为例子,下面的命令开启了手部追踪和图像的传送:

  • Windows
    • LeapSvc –tracking_hand_enabled=true –images_mode=2
  • Mac/Linux
    • leapd –tracking_hand_enabled=true –images_mode=2

重要:命令行配置设置会在 LeapMotion 控制板已经运行时被忽略。

使用配置文件

你可以向一个 JSON 格式的配置文件中添加选项。你可以使用 LeapSvc 命令中的 --config 参数进行指定到文件,也可以手动将你的选项写到标准文件中。

配置文件必须是有效的 JSON,一个配置文件指定的选项类似于下面所示:

  1. {
  2. "configuration": {
  3. "cpu_affinity_mask": 3,
  4. "images_mode": 2,
  5. "power_saving_adapter": false,
  6. "power_saving_battery": false,
  7. "process_niceness": 5,
  8. "robust_mode_enabled": false,
  9. "tracking_hand_enabled": true
  10. }
  11. }

在命令行中,你可以按下面的样子进行配置:

  1. LeapSvc config=/path/to/config.json
  2. leapd config=/path/to/config.json

LeapMotion 系统保留了两种不同的标准 JSON 配置文件,一个用户服务或守护进程,另一个这用户 LeapMotion 的控制面板程序。当两个服务和控制面板正在运行时,会共享设置并保持同步。否则,则控制面板的设置优先。换句话说,如果控制面板启动时,服务或守护进程已经运行,那么设置将会被更新,以匹配控制面板文件中的设置;如果当服务或守护进程启动时,控制面板已经运行,那么控制面板的设置依然会优先于任何配置文件,甚至命令行的设置。

编辑这些设置文件当服务/守护进程或控制面板运行时不会改变当前运行时设置。我们推荐你退出控制面板,并关闭服务及守护进程后再修改这些设置。

配置文件的名字是 config.json 它能够在下面的路径中被找到:

OS 控制面板配置路径 服务/守护进程配置路径
Android /sdcard/user/Leap\ Motion /sdcard/Leap\ Motion
Linux $HOME/Leap\ Motion /var/Leap\ Motion
OS X $HOME/Library/Application\ Support/Leap\ Motion /Library/Application\ Support/Leap\ Motion
Windows %AppData%/Leap Motion %ProgramData%/Leap Motion

注意,其中一些文件夹可能会是隐藏文件夹。