我正在创建一个通过面部检测移动鼠标光标的程序。我在网上找到了this程序,我正在弄清楚如何改变它。
我得到的唯一错误是它找不到名为Robot的类。我确实尝试用标签,空格等来解决它,但我无法弄清问题是什么。
import JMyron.*;
import pFaceDetect.*;
JMyron m;
PFaceDetect face;
PFaceDetect hand;
PImage img;
Robot robby;
int search_width = 320;
int search_height = 240;
float actualX=search_width/2;
float actualY=search_height/2;
int x_rato = 0;
int y_rato = 0;
void setup() {
size(320,240,P3D);
m = new JMyron();
m.start(width,height);
face = new PFaceDetect(this,width,height, "haarcascade_frontalface_alt.xml");
hand = new PFaceDetect(this,width,height, "aGest.xml");
img = createImage(width,height,ARGB);
noFill();
stroke(255,0,0);
try
{
robby = new Robot();
}
catch (AWTException e)
{
println("Robot class not supported by your system!");
exit();
}
}
void draw() {
m.update();
int[] imgNormal = m.cameraImage();
this.loadPixels();
for(int i=1; i<width;i++){
for(int j=1;j<height;j++){
this.pixels[(m.width() - i - 1) + j * m.width()] = imgNormal[(i) + j * m.width()];
}
}
this.updatePixels();
arraycopy(m.cameraImage(),img.pixels);
face.findFaces(img);
drawFace();
hand.findFaces(img);
drawHand();
// code for drawing the lines
line((width/2-10),0,(width/2-10),height);
line((width/2+10),0,(width/2+10),height);
line(0,(height/2-10),width,(height/2-10));
line(0,(height/2+10),width,(height/2+10));
//verifica posição do ponto
//diagonal subir para direita
if (actualX < (width/2-10) && actualY < (height/2-10))
{
x_rato = x_rato + 4;
y_rato = y_rato - 4;
}
else if (actualX > (width/2+10) && actualY < (height/2-10))
{
x_rato = x_rato - 4;
y_rato = y_rato - 4;
}
//subir
else if (actualX < (width/2+10) && actualX > (width/2-10) && actualY < (height/2-10))
{
y_rato = y_rato - 4;
}
else if (actualX < (width/2+10) && actualX > (width/2-10) && actualY > (height/2+10))
{
y_rato = y_rato + 4;
}
else if (actualX < (width/2-10) && actualY > (height/2+10))
{
x_rato = x_rato + 4;
y_rato = y_rato + 4;
}
//diagonal descer para esquerda
else if (actualX > (width/2+10) && actualY > (height/2+10))
{
x_rato = x_rato - 4;
y_rato = y_rato + 4;
}
else if (actualX > (width/2+10) && actualY < (height/2+10) && actualY > (height/2-10))
{
x_rato = x_rato - 4;
}
else if (actualX < (width/2-10) && actualY < (height/2+10) && actualY > (height/2-10))
{
x_rato = x_rato + 4;
}
print(actualY+"\n");
robby.mouseMove(screen.width/2+x_rato, screen.height/2+y_rato);
}
void drawFace() {
int [][] res = face.getFaces();
if (res.length>0) {
for (int i=0;i<res.length;i++) {
int x = res[i][0];
int y = res[i][1];
int w = res[i][2];
int h = res[i][3];
x = x + w/2;
actualX = round(actualX + 0.1*(x-actualX));
y = y + h/2;
actualY = round(actualY + 0.1*(y-actualY));
/*pushMatrix();
strokeWeight(10);*/
point(width-actualX, actualY);
//popMatrix();
}
}
}
void drawHand() {
int [][] res = hand.getFaces();
if (res.length>0) {
print("ai"+"\n");
robby.mousePress(InputEvent.BUTTON1_MASK);
robby.delay(500);
robby.mouseRelease(InputEvent.BUTTON1_MASK);
}
}
void stop() {
m.stop();
super.stop();
}
答案 0 :(得分:0)