如何在空中控制计算机

第1步:所需材料
跳跃motion支持python,java,c ++,c#,javascript。在本教程中,我们将使用java。
因此,在开始制作程序之前,我们需要查看此构建所需的材料:
1。飞跃运动控制器(在此处购买)
2。面向java开发人员的eclipse ide(在此处下载)
3。 leap motion设置文件(在此处下载)
4。 leap motion sdk(在此处下载)
5。 java se 7(在此处下载)(下载jdk和jre )
( * leap motion库仅适用于java 6或java 7 )
如果您不知道如何设置eclipse,那么我推荐此java系列入门教程:在此处观看
好,现在让我们转到涉及的步骤创建程序。
步骤2:软件设置
跳跃运动支持多种编程语言,例如c ++,c#,python,java和javascript。
在本教程中,我们将使用java进行编程。
初始设置:
1。首先转到https://www.leapmotion.com/setup并下载leap motion设置文件,然后安装该应用程序。它会安装所有内容,以将the动控制器连接到您的计算机。
2。接下来转到https://developer.leapmotion.com/(开发人员门户)并创建一个帐户。然后下载leap motion sdk。
3。然后将zip文件中的所有文件提取到您选择的任何文件夹中。
配置类路径:
在此本教程将使用面向java开发人员的eclipse ide。
1。打开eclipse,然后单击file》 new》 java project。
2。为项目命名,并确保将执行运行时环境jre设置为java se 1.7,如图所示。
3。然后单击“下一步”,打开“库”选项卡,然后选择“添加外部jar”并导航到先前提取的文件夹。
4。然后打开leapsdk文件夹并转到libs文件夹并选择leapjava.jar文件。
5。接下来,单击leapjava.jar旁边的三角形下拉按钮,然后从“下拉菜单”中单击“本机库位置”,然后单击“编辑”,如图所示。
6。然后单击“外部文件夹”,然后导航到leapsdk文件夹》 lib》,然后根据您的操作系统选择 x64 或 x86 文件夹,然后单击“确定”,然后单击“完成”。
我们现在在我们的项目中安装了leapmotion,现在开始进行一些编码!
第3步:跳跃运动监听器
now that we are done importing the libraries , let us start working on the project.
初始设置:
1。首先,我们需要在源文件夹中创建一个新类,单击项目文件夹旁边的三角形下拉箭头。
2。在您的项目文件夹中,右键单击src文件夹,转到new》,然后单击class创建一个新的java类。
3。给班级起个名字,然后单击完成。
现在,让我们从代码开始:
1。首先,我们创建一个leap motion侦听器:(注意:导入必要的库),侦听的侦听器是何时将jump motion控制器连接到计算机的。
package starkmouse;
import java.io.ioexception;
import java.awt.awtexception;
import java.awt.graphicsdevice;
import java.awt.graphicsenvironment;
import java.awt.mouseinfo;
import java.awt.point;
import java.awt.robot;
import java.awt.event.inputevent;
import java.awt.event.keyevent;
import com.leapmotion.leap.*;
import com.leapmotion.leap.controller.policyflag;
public class leapmoues {
public static void main(string[] args) throws awtexception {
controller controller = new controller();
controller.setpolicyflags(policyflag.policy_background_frames);
samplelistener listener = new samplelistener();
controller.addlistener(listener);
// controller.enablegesture(gesture.type.type_screen_tap);
// controller.enablegesture(gesture.type.type_swipe);
controller.enablegesture(gesture.type.type_circle);
system.out.println(“press enter to quit.。.”);
try {
system.in.read();
} catch (ioexception e) {
e.printstacktrace();
}
controller.removelistener(listener);
}
}
class samplelistener extends listener {
boolean readyforcontrol = false;
int screenwidth;
int screenheight;
boolean iboxget = false;
interactionbox ibox = null;
robot robot;
boolean ismoving = false;
boolean ungrip = false;
boolean wasfacingdown = true;
boolean wasintabstate = false;
boolean wastabbing = false;
boolean justcirclegestured = false;
boolean isresizing = false;
public void onconnect(controller controller) {
system.out.println(“connected”);
graphicsdevice gd = graphicsenvironment.getlocalgraphicsenvironment()
.getdefaultscreendevice();
screenwidth = gd.getdisplaymode().getwidth();
screenheight = gd.getdisplaymode().getheight();
system.out.println(“screen resolution: x: ” + screenwidth + “, h: ”
+ screenheight);
readyforcontrol = true;
try {
robot = new robot();
robot.setautodelay(5);
} catch (awtexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
}
步骤4:帧和手势数据
跳跃运动帧数据,其中包括手势(圆形,捏,掌面朝下和所有其他手势)
跳跃运动有两个红外摄像机和三个红外led。跳跃运动使用三个ir led形成ir点图案,从而形成3d数据收集,ir相机拍摄称为帧的图片。帧从跳跃运动设备发送到计算机,我们可以对其进行编程。
跳跃运动使用复杂的数学分析图片和点定位,然后比较红外拍摄的两张图片的数据相机并使用两个2d表示形式获得3d表示形式。
跳跃运动设备以300 fps的速度捕获。然后,我们对发送到计算机的每个帧进行处理。
代码:
public void onframe(controller controller) {
frame frame = controller.frame(); // the latest frame
// frame previous = controller.frame(1); //the previous frame
// system.out.println(“frame available”);
if (!iboxget) {
ibox = frame.interactionbox();
iboxget = true;
system.out.println(“interaction box set!”);
}
// pointable furthestfront = frame.pointables().frontmost();
hand righthand = frame.hands().rightmost();
vector palmv = righthand.palmvelocity();
// system.out.println(“velocity: x: ” + palmv.getx() + “, y: ” +
// palmv.gety()
// + “, z: ” + palmv.getz());
vector palmn = righthand.palmnormal();
// system.out.println(“normal: x: ” + palmn.getx() + “, y: ”
// + palmn.gety() + “, z: ” + palmn.getz());
point mouseloc = mouseinfo.getpointerinfo().getlocation();
int currentmousex = mouseloc.x;
int currentmousey = mouseloc.y;
if (readyforcontrol && righthand.confidence() 》 .15) {
if (!ismoving && !wasintabstate && frame.hands().count() 》 1) {
hand lefthand = frame.hands().leftmost();
if (lefthand.pinchstrength() 》 .8
&& righthand.pinchstrength() 》 .8) {
if (!isresizing) {
system.out.println(“resizing.。.”);
robot.keypress(keyevent.vk_alt);
robot.keypress(keyevent.vk_space);
robot.keyrelease(keyevent.vk_space);
robot.keyrelease(keyevent.vk_alt);
robot.keypress(keyevent.vk_s);
robot.keyrelease(keyevent.vk_s);
robot.keypress(keyevent.vk_down);
robot.keypress(keyevent.vk_right);
robot.keyrelease(keyevent.vk_down);
robot.keyrelease(keyevent.vk_right);
isresizing = true;
}
}else{
if(isresizing){
system.out.println(“resizing complete!”);
robot.mousepress(inputevent.button1_mask);
robot.mouserelease(inputevent.button1_mask);
isresizing = false;
}
}
}
// system.out.println(“confidence: ” + righthand.confidence());
if (righthand.grabstrength() 》 .99 && !wasintabstate && !isresizing) {
if (!ismoving && palmn.gety() 《 .8) {
robot.keypress(keyevent.vk_alt);
robot.keypress(keyevent.vk_space);
robot.keyrelease(keyevent.vk_space);
robot.keyrelease(keyevent.vk_alt);
robot.keypress(keyevent.vk_r);
robot.keyrelease(keyevent.vk_r);
robot.keypress(keyevent.vk_alt);
robot.keypress(keyevent.vk_space);
robot.keyrelease(keyevent.vk_space);
robot.keyrelease(keyevent.vk_alt);
robot.keypress(keyevent.vk_m);
robot.keyrelease(keyevent.vk_m);
robot.keypress(keyevent.vk_down);
robot.keyrelease(keyevent.vk_down);
ismoving = true;
}
// system.out.println(righthand.grabstrength());
}
else {
// system.out.println(“not grabbing”);
if (ismoving) {
robot.mousepress(inputevent.button1_mask);
robot.mouserelease(inputevent.button1_mask);
ismoving = false;
if (palmn.getx() != 0 && palmn.gety() != 0 && palmn.getz() != 0) {
if (palmn.gety() 《 -.1 && palmn.getz() 》 -.8) {
if (currentmousey 《= 8) {
robot.keypress(keyevent.vk_windows);
robot.keypress(keyevent.vk_up);
robot.keyrelease(keyevent.vk_windows);
robot.keyrelease(keyevent.vk_up);
}
else {
if (screenwidth - currentmousex 《= 12) {
robot.keypress(keyevent.vk_windows);
robot.keypress(keyevent.vk_right);
robot.keyrelease(keyevent.vk_windows);
robot.keyrelease(keyevent.vk_right);
} else if (currentmousex 《= 12) {
robot.keypress(keyevent.vk_windows);
robot.keypress(keyevent.vk_left);
robot.keyrelease(keyevent.vk_windows);
robot.keyrelease(keyevent.vk_left);
}
}
} else {
system.out.println(“normal: x: ” + palmn.getx()
+ “, y: ” + palmn.gety() + “, z: ”
+ palmn.getz());
robot.keypress(keyevent.vk_alt);
robot.keypress(keyevent.vk_space);
robot.keyrelease(keyevent.vk_space);
robot.keyrelease(keyevent.vk_alt);
robot.keypress(keyevent.vk_n);
robot.keyrelease(keyevent.vk_n);
}
}
}
}
if (!ismoving && !isresizing) {
if (palmn.gety() 《 -.8 && palmn.getz() 》 -.5) {
wasfacingdown = true;
wastabbing = false;
if (wasintabstate) {
robot.keypress(keyevent.vk_enter);
robot.keyrelease(keyevent.vk_enter);
wasintabstate = false;
}
} else if (palmn.gety() 》= .8 && wasfacingdown
&& !wasintabstate) {
system.out.println(“alt tabbing”);
wasfacingdown = false;
wasintabstate = true;
wastabbing = false;
robot.keypress(keyevent.vk_alt);
robot.keypress(keyevent.vk_control);
robot.keypress(keyevent.vk_tab);
robot.delay(100);
robot.keyrelease(keyevent.vk_tab);
robot.keyrelease(keyevent.vk_control);
robot.keyrelease(keyevent.vk_alt);
try {
runtime.getruntime().exec(
“cmd /c start ” + “c:windowswitcher.lnk”);
} catch (ioexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
robot.delay(300);
} else if (wasintabstate && !wasfacingdown && !wastabbing
&& palmn.gety() 《 .45) {
wastabbing = true;
} else if (wasintabstate && !wasfacingdown && wastabbing
&& palmn.gety() 》 .75) {
robot.keypress(keyevent.vk_tab);
robot.keyrelease(keyevent.vk_tab);
wastabbing = false;
}
}
/*
* if (!ismoving && !wasintabstate) { /* if(palmn.getz() 《= -.7 &&
* righthand.grabstrength() 《 .1){
* system.out.println(“palm vertical velocity: ” +
* righthand.palmvelocity().gety()); //float resultverticalv =
* math.round(math.abs(righthand.palmvelocity().gety()) - 1);
* //if(resultverticalv 》 0){ robot.mousewheel((int)
* math.round(((righthand.palmvelocity().gety()) / 500))); //}
* }else{
*/
if (!ismoving && !wasintabstate && frame.gestures().count() 》 0
&& frame.hands().count() == 1 && !isresizing) {
circlegesture circlegesture = new circlegesture(frame
.gestures().get(0));
// system.out.println(“pinch strength: ” +
// righthand.pinchstrength());
if (circlegesture.durationseconds() 》 .5 && !justcirclegestured
&& righthand.pinchstrength() 》 .8) {
system.out.println(“closed a window!”);
robot.keypress(keyevent.vk_alt);
robot.keypress(keyevent.vk_f4);
robot.keyrelease(keyevent.vk_f4);
robot.keyrelease(keyevent.vk_alt);
justcirclegestured = true;
}
} else {
justcirclegestured = false;
}
float xspeed = (palmv.getx() / 6);
float yspeed = (palmv.gety() / 6);
// system.out.println(“xspeed: ” + xspeed + “, yspeed: ” + yspeed);
robot.mousemove((int) (currentmousex + xspeed),
(int) (currentmousey - yspeed));
// }
}
}
}
步骤5:完成代码!
package starkmouse;
import java.io.ioexception;
import java.awt.awtexception;
import java.awt.graphicsdevice;
import java.awt.graphicsenvironment;
import java.awt.mouseinfo;
import java.awt.point;
import java.awt.robot;
import java.awt.event.inputevent;
import java.awt.event.keyevent;
import com.leapmotion.leap.*;
import com.leapmotion.leap.controller.policyflag;
public class leapmoues {
public static void main(string[] args) throws awtexception {
controller controller = new controller();
controller.setpolicyflags(policyflag.policy_background_frames);
samplelistener listener = new samplelistener();
controller.addlistener(listener);
// controller.enablegesture(gesture.type.type_screen_tap);
// controller.enablegesture(gesture.type.type_swipe);
controller.enablegesture(gesture.type.type_circle);
system.out.println(“press enter to quit.。.”);
try {
system.in.read();
} catch (ioexception e) {
e.printstacktrace();
}
controller.removelistener(listener);
}
}
class samplelistener extends listener {
boolean readyforcontrol = false;
int screenwidth;
int screenheight;
boolean iboxget = false;
interactionbox ibox = null;
robot robot;
boolean ismoving = false;
boolean ungrip = false;
boolean wasfacingdown = true;
boolean wasintabstate = false;
boolean wastabbing = false;
boolean justcirclegestured = false;
boolean isresizing = false;
public void onconnect(controller controller) {
system.out.println(“connected”);
graphicsdevice gd = graphicsenvironment.getlocalgraphicsenvironment()
.getdefaultscreendevice();
screenwidth = gd.getdisplaymode().getwidth();
screenheight = gd.getdisplaymode().getheight();
system.out.println(“screen resolution: x: ” + screenwidth + “, h: ”
+ screenheight);
readyforcontrol = true;
try {
robot = new robot();
robot.setautodelay(5);
} catch (awtexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
}
public void onframe(controller controller) {
frame frame = controller.frame(); // the latest frame
// frame previous = controller.frame(1); //the previous frame
// system.out.println(“frame available”);
if (!iboxget) {
ibox = frame.interactionbox();
iboxget = true;
system.out.println(“interaction box set!”);
}
// pointable furthestfront = frame.pointables().frontmost();
hand righthand = frame.hands().rightmost();
vector palmv = righthand.palmvelocity();
// system.out.println(“velocity: x: ” + palmv.getx() + “, y: ” +
// palmv.gety()
// + “, z: ” + palmv.getz());
vector palmn = righthand.palmnormal();
// system.out.println(“normal: x: ” + palmn.getx() + “, y: ”
// + palmn.gety() + “, z: ” + palmn.getz());
point mouseloc = mouseinfo.getpointerinfo().getlocation();
int currentmousex = mouseloc.x;
int currentmousey = mouseloc.y;
if (readyforcontrol && righthand.confidence() 》 .15) {
if (!ismoving && !wasintabstate && frame.hands().count() 》 1) {
hand lefthand = frame.hands().leftmost();
if (lefthand.pinchstrength() 》 .8
&& righthand.pinchstrength() 》 .8) {
if (!isresizing) {
system.out.println(“resizing.。.”);
robot.keypress(keyevent.vk_alt);
robot.keypress(keyevent.vk_space);
robot.keyrelease(keyevent.vk_space);
robot.keyrelease(keyevent.vk_alt);
robot.keypress(keyevent.vk_s);
robot.keyrelease(keyevent.vk_s);
robot.keypress(keyevent.vk_down);
robot.keypress(keyevent.vk_right);
robot.keyrelease(keyevent.vk_down);
robot.keyrelease(keyevent.vk_right);
isresizing = true;
}
}else{
if(isresizing){
system.out.println(“resizing complete!”);
robot.mousepress(inputevent.button1_mask);
robot.mouserelease(inputevent.button1_mask);
isresizing = false;
}
}
}
// system.out.println(“confidence: ” + righthand.confidence());
if (righthand.grabstrength() 》 .99 && !wasintabstate && !isresizing) {
if (!ismoving && palmn.gety() 《 .8) {
robot.keypress(keyevent.vk_alt);
robot.keypress(keyevent.vk_space);
robot.keyrelease(keyevent.vk_space);
robot.keyrelease(keyevent.vk_alt);
robot.keypress(keyevent.vk_r);
robot.keyrelease(keyevent.vk_r);
robot.keypress(keyevent.vk_alt);
robot.keypress(keyevent.vk_space);
robot.keyrelease(keyevent.vk_space);
robot.keyrelease(keyevent.vk_alt);
robot.keypress(keyevent.vk_m);
robot.keyrelease(keyevent.vk_m);
robot.keypress(keyevent.vk_down);
robot.keyrelease(keyevent.vk_down);
ismoving = true;
}
// system.out.println(righthand.grabstrength());
} else {
// system.out.println(“not grabbing”);
if (ismoving) {
robot.mousepress(inputevent.button1_mask);
robot.mouserelease(inputevent.button1_mask);
ismoving = false;
if (palmn.getx() != 0 && palmn.gety() != 0
&& palmn.getz() != 0) {
if (palmn.gety() 《 -.1 && palmn.getz() 》 -.8) {
if (currentmousey 《= 8) {
robot.keypress(keyevent.vk_windows);
robot.keypress(keyevent.vk_up);
robot.keyrelease(keyevent.vk_windows);
robot.keyrelease(keyevent.vk_up);
} else {
if (screenwidth - currentmousex 《= 12) {
robot.keypress(keyevent.vk_windows);
robot.keypress(keyevent.vk_right);
robot.keyrelease(keyevent.vk_windows);
robot.keyrelease(keyevent.vk_right);
} else if (currentmousex 《= 12) {
robot.keypress(keyevent.vk_windows);
robot.keypress(keyevent.vk_left);
robot.keyrelease(keyevent.vk_windows);
robot.keyrelease(keyevent.vk_left);
}
}
} else {
system.out.println(“normal: x: ” + palmn.getx()
+ “, y: ” + palmn.gety() + “, z: ”
+ palmn.getz());
robot.keypress(keyevent.vk_alt);
robot.keypress(keyevent.vk_space);
robot.keyrelease(keyevent.vk_space);
robot.keyrelease(keyevent.vk_alt);
robot.keypress(keyevent.vk_n);
robot.keyrelease(keyevent.vk_n);
}
}
}
}
if (!ismoving && !isresizing) {
if (palmn.gety() 《 -.8 && palmn.getz() 》 -.5) {
wasfacingdown = true;
wastabbing = false;
if (wasintabstate) {
robot.keypress(keyevent.vk_enter);
robot.keyrelease(keyevent.vk_enter);
wasintabstate = false;
}
} else if (palmn.gety() 》= .8 && wasfacingdown
&& !wasintabstate) {
system.out.println(“alt tabbing”);
wasfacingdown = false;
wasintabstate = true;
wastabbing = false;
robot.keypress(keyevent.vk_alt);
robot.keypress(keyevent.vk_control);
robot.keypress(keyevent.vk_tab);
robot.delay(100);
robot.keyrelease(keyevent.vk_tab);
robot.keyrelease(keyevent.vk_control);
robot.keyrelease(keyevent.vk_alt);
try {
runtime.getruntime().exec(
“cmd /c start ” + “c:windowswitcher.lnk”);
} catch (ioexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
robot.delay(300);
} else if (wasintabstate && !wasfacingdown && !wastabbing
&& palmn.gety() 《 .45) {
wastabbing = true;
} else if (wasintabstate && !wasfacingdown && wastabbing
&& palmn.gety() 》 .75) {
robot.keypress(keyevent.vk_tab);
robot.keyrelease(keyevent.vk_tab);
wastabbing = false;
}
}
/*
* if (!ismoving && !wasintabstate) { /* if(palmn.getz() 《= -.7 &&
* righthand.grabstrength() 《 .1){
* system.out.println(“palm vertical velocity: ” +
* righthand.palmvelocity().gety()); //float resultverticalv =
* math.round(math.abs(righthand.palmvelocity().gety()) - 1);
* //if(resultverticalv 》 0){ robot.mousewheel((int)
* math.round(((righthand.palmvelocity().gety()) / 500))); //}
* }else{
*/
if (!ismoving && !wasintabstate && frame.gestures().count() 》 0
&& frame.hands().count() == 1 && !isresizing) {
circlegesture circlegesture = new circlegesture(frame
.gestures().get(0));
// system.out.println(“pinch strength: ” +
// righthand.pinchstrength());
if (circlegesture.durationseconds() 》 .5 && !justcirclegestured
&& righthand.pinchstrength() 》 .8) {
system.out.println(“closed a window!”);
robot.keypress(keyevent.vk_alt);
robot.keypress(keyevent.vk_f4);
robot.keyrelease(keyevent.vk_f4);
robot.keyrelease(keyevent.vk_alt);
justcirclegestured = true;
}
} else {
justcirclegestured = false;
}
float xspeed = (palmv.getx() / 6);
float yspeed = (palmv.gety() / 6);
// system.out.println(“xspeed: ” + xspeed + “, yspeed: ” + yspeed);
robot.mousemove((int) (currentmousex + xspeed),
(int) (currentmousey - yspeed));
// }
}
}
}
步骤6:运行程序和结果:
现在我们已经完成了对leap motion控制器的编程,我们可以在eclipse中运行该程序了。


英伟达将助力医疗行业的成本降低与工作负担
Vishay公司SiC45x 系列 microBUCK同步降压稳压器适合各种应用
中国智能电表市场“疯长” 本土厂商机会何在?
5G切片进入商业可用新阶段
汽车安全气囊传感器前五名供应商有哪些
如何在空中控制计算机
CES Asia 2018官方开展词:今年规模扩大了25%
用WiFi给手机充电 美学生DIY充电器终结者
人工智能公司开设美国总部 Omina主要面向中小型公司
以管理创新促进企业高质量发展_小米生态链谷仓学院创始人CEO洪华
小米mix最新消息:小米mix引领手机下游产业链资本市场对特种陶瓷的追捧
u-blox助力Move-X推出新款Cicerone开发板
为扩增对太阳系外行星的探索,NASA发射价值3.37亿美元和洗衣机差不多大小的太空探测器
我国首次利用智能水下机器人对高原地区水域进行水质信息探测与采集
物联网和5G有什么不一样
NPN型三极管和PNP型三极管的定义及使用区别
区块链密算法通过国家密码管理局测试
苹果副总裁抨击谷歌Chromebook,廉价测验机器用它的学生不会成功
未来5G聚焦的领域会是在哪
松灵机器人新品丨特种重载防水履带底盘BUNKER Pro,真的很强