Muiscontrole overnemen

In de vorige les hebben we gezien hoe je handbeweging kan detecteren. Als je onderstaande code wil gebruiken, volg dan eerst de installatiestappen van de vorige les. 

Met de onderstaande code kan je de muiscursor (van het ganse computersysteem) jouw handbeweging laten volgen. 

import gab.opencv.*;
import processing.video.*;
import oscP5.*;
import netP5.*;
import java.awt.Robot;
import java.awt.AWTException;
import java.awt.Rectangle;

Capture cam;
OpenCV opencv;
OscP5 oscP5;
NetAddress oscDest;
Robot robot;

// Globale variabele om de vorige breedte van de hand op te slaan
int previousHandWidth = 0;

void setup() {
  size(640, 480);
  
  // Webcam instellen
  cam = new Capture(this, 640, 480);
  cam.start();
  
  // OpenCV instellen
  opencv = new OpenCV(this, 640, 480);
  opencv.loadCascade(OpenCV.CASCADE_HAND); // Gebruik ingebouwde hand-cascade
  
  // OSC instellen
  oscP5 = new OscP5(this, 12000); // Luisterpoort
  oscDest = new NetAddress("127.0.0.1", 6448); // OSC-doeladres
  
  // Robot instellen voor muiscontrole
  try {
    robot = new Robot();
  } catch (AWTException e) {
    println("Robot kan niet worden geïnitialiseerd: " + e.getMessage());
  }
}

void draw() {
  if (cam.available()) {
    cam.read();
  }

  image(cam, 0, 0);

  // Handdetectie uitvoeren
  opencv.loadImage(cam);
  Rectangle[] hands = opencv.detect();

  noFill();
  stroke(0, 255, 0);
  for (int i = 0; i < hands.length; i++) {
    rect(hands[i].x, hands[i].y, hands[i].width, hands[i].height);

    // OSC-bericht verzenden
    OscMessage msg = new OscMessage("/hand/position");
    msg.add(hands[i].x); // X-positie van de hand
    msg.add(hands[i].y); // Y-positie van de hand
    oscP5.send(msg, oscDest);

    // Muispositie bijwerken
    float mouseXPos = map(hands[i].x, 0, width, 0, displayWidth);
    float mouseYPos = map(hands[i].y, 0, height, 0, displayHeight);
    robot.mouseMove((int) mouseXPos, (int) mouseYPos);

    // Controleer op een specifiek gebaar - in dit geval een kleiner handgebied (bijvoorbeeld een vuist)
    if (hands[i].width < 50 && previousHandWidth >= 50) { // Gebaar: breedte kleiner dan 50 (bijvoorbeeld bij een vuist)
      // Simuleer een muisklik
      robot.mousePress(java.awt.event.InputEvent.BUTTON1_DOWN_MASK);
      robot.mouseRelease(java.awt.event.InputEvent.BUTTON1_DOWN_MASK);
    }

    // Update vorige breedte
    previousHandWidth = hands[i].width;
  }
}
Volgende pagina