Hi there, i am kinda new to coding with arduino and processing but i hope someone can help. Its for school. I am trying to control a servo with face recognition using the x coordinates. i am using a for loop int i = 0, i < etc... but the servo isnt doing what i want it to do. Is it even possible what i am trying to do here? below here is the processing code, the arduino code works so i wont put it in.
import processing.javafx.*; //importeer bibliotheken
import ch.bildspur.vision.*;
import ch.bildspur.vision.result.*;
import processing.core.PApplet;
import processing.core.PConstants;
import processing.core.PImage;
import processing.video.Capture;
import processing.serial.*;
PImage inputImage; // Variabele aangemaakt
Serial arduinoPort; //poortvariabele om te verbinden met arduino
Capture cam; //camerabeelden vastleggen
DeepVision vision; //beeldverwerking deepvision
CascadeClassifierNetwork faceNetwork; //detecteren van gezichten
GenderNetwork genderNetwork; //variabele voor geslachten herkennen
DeepVision deepVision = new DeepVision(this);
YOLONetwork hallo; //Variabele hallo word aangemaakt
ResultList<ObjectDetectionResult> detections;
ResultList<ObjectDetectionResult> halloo;
ResultList<ClassificationResult> genders;
int servoHoek = 0; //variabele voor servoHoek op 0
public void setup() {
size(640, 480, FX2D); //grootte beeld, rendermodus
colorMode(HSB, 360, 100, 100); //kleur
println("creating network...");
hallo = deepVision.createCrossHandDetector(256);
vision = new DeepVision(this); //nieuwe beeldverwerking
faceNetwork = vision.createCascadeFrontalFace(); //voor detecteren van gezichten
genderNetwork = vision.createGenderClassifier(); //voor geslacht
println("loading model...");
faceNetwork.setup(); //haalt gegevens op
genderNetwork.setup();
println("setup camera...");
cam = new Capture(this, "pipeline:autovideosrc"); //vastleggen van camerabeelden
cam.start(); //start hier
inputImage = new PImage(320, 240, RGB);
String portName = Serial.list()[7]; //String aanmaken voor de port waarin arduino is aangesloten in mijn geval port [7]
arduinoPort = new Serial(this, portName, 9600);
}
public void draw() {
background(55); //grijs
if (cam.available()) { //frame camera beschikbaar?
cam.read(); //lezen en opslaan in cam
}
if (cam.width == 0) { //is breedte frame camera gelijk aan 0
return; //verlaat functie
}
inputImage.copy(cam, 0, 0, cam.width, cam.height, 0, 0, inputImage.width, inputImage.height); //kopieert het camerabeeld naar de inputImage-variabele.
image(cam, 0, 0); //camerabeeld op scherm
detections = faceNetwork.run(cam); //detecteert gezichten, slaat resultaten op in detections
genders = genderNetwork.runByDetections(cam, detections); //'' voor geslacht
noFill(); //
strokeWeight(2f); //2px dikte van de lijn om het gezicht
hallo.setConfidenceThreshold(0.5f);
stroke(200, 80, 100); //kleur, verzadiging, helderheid
for (int i = 0; i < detections.size(); i++) { //for loop, meerdere keren uitvoeren, voor elke detectie in detections
// zet i op 0, i kleiner dan aantal detecties? i telkens verhogen met 1
ObjectDetectionResult face = detections.get(i); //haalt variabele i op van detections en sla op in 'face'
ClassificationResult gender = genders.get(i); // voor geslacht
rect(face.getX(), face.getY(), face.getWidth(), face.getHeight()); //rechthoek tekenen, X en Y van positie gezicht & breedte en hoogte van gezicht
text(gender.getClassName(), face.getX(), face.getY()); //tekst van geslacht, positie X en Y van gezicht
//Y-as waarde (hoogte) wordt gemapped in een waarde die bij de servo gebruikt kan worden & zal in een variabale verplaatst worden
int positionY = (int)(map(face.getY(), 0, 1023, 0, 180)); //10 op het scherm is gelijk aan 180 graden van de servo, 200 is 100 graden
//179 en niet 180 graden omdat ik online gelezen had dat niet elke servo tot 180 ging, ook toen ik 179 glitchte de servo minder
arduinoPort.write(positionY); //Een opgeslagen waarde gaat naar de arduino toe, doormiddel van de eerder aangemaakte arduinoPort
println(positionY); // De Y waarde word geprint (getyped)
if (gender.getClassName().equals("female")){ //als geslacht female is
arduinoPort.write('F'); //voer F (female) uit op arduino
delay(100); //100 millisec
} else if (gender.getClassName().equals("male")) { //als geslacht male is
arduinoPort.write('M'); //voer M (male) uit op arduino
delay(100);
}
}
}