diff --git a/.idea/misc.xml b/.idea/misc.xml index cbec6ae..e122dea 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 9fffa2e..309ae04 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,13 +4,13 @@ - - + + - + { "keyToString": { + "Application.GTCar.executor": "Run", "Application.GraphicsProgram.executor": "Run", "Application.Main.executor": "Run", "Application.Tracker.executor": "Run", @@ -50,7 +51,7 @@ "com.codeium.enabled": "true", "git-widget-placeholder": "master", "kotlin-language-version-configured": "true", - "last_opened_file_path": "C:/Users/paul3/OneDrive/Dokumente/Studium BME/Semester 3/Interaktion/opencv/build/java/opencv-4100.jar", + "last_opened_file_path": "C:/Users/david/Documents/Uni/GTCar/opencv/build/java/opencv-4100.jar", "node.js.detected.package.eslint": "true", "node.js.detected.package.tslint": "true", "node.js.selected.package.eslint": "(autodetect)", @@ -63,10 +64,17 @@ } } - - - - - - - - @@ -107,8 +108,9 @@ - @@ -146,6 +180,10 @@ - \ No newline at end of file diff --git a/src/main/java/CamPuffer.java b/src/main/java/CamPuffer.java index c9cf6a3..1d06c0d 100644 --- a/src/main/java/CamPuffer.java +++ b/src/main/java/CamPuffer.java @@ -56,7 +56,7 @@ public class CamPuffer implements Runnable { try { while (running) { - long startTime = System.currentTimeMillis(); + //long startTime = System.currentTimeMillis(); capture.read(frame); // Bild einlesen if (frame.empty()) { @@ -65,10 +65,11 @@ public class CamPuffer implements Runnable { } // Bildverarbeitung hier + updateCurrentMat(frame); // Debug-Ausgabe - long elapsedTime = System.currentTimeMillis() - startTime; - System.out.println("Verarbeitungszeit für das Bild: " + elapsedTime + " ms"); + //long elapsedTime = System.currentTimeMillis() - startTime; + //System.out.println("Verarbeitungszeit für das Bild: " + elapsedTime + " ms"); // Speicherbereinigung alle 1000 ms (1 Sekunde) if (System.currentTimeMillis() - lastGcTime > 1000) { @@ -84,35 +85,24 @@ public class CamPuffer implements Runnable { } } - - - - - public boolean isHasStartedCapturing() { - return hasStartedCapturing; - } - private void updateCurrentMat(Mat img) { - synchronized (lock) { - // Puffergröße überwachen - if (frameBuffer.size() >= MAX_BUFFER_SIZE) { - Mat oldFrame = frameBuffer.poll(); // Entfernt das älteste Bild im Puffer - if (oldFrame != null) { - oldFrame.release(); // Verhindert das Anhäufen von nicht freigegebenen Mat-Objekten - } + // Puffergröße überwachen + if (frameBuffer.size() >= MAX_BUFFER_SIZE) { + Mat oldFrame = frameBuffer.poll(); // Entfernt das älteste Bild im Puffer + if (oldFrame != null) { + oldFrame.release(); // Verhindert das Anhäufen von nicht freigegebenen Mat-Objekten } - // Neues Bild in den Puffer hinzufügen frameBuffer.add(img.clone()); + currentMat = img; } } public Mat getCurrentMat() { - synchronized (lock) { - return currentMat.clone(); // Rückgabe einer Kopie, um Speicherprobleme zu vermeiden - } + return currentMat; } + public void stop() { running = false; } @@ -127,7 +117,6 @@ public class CamPuffer implements Runnable { } capture.set(Videoio.CAP_PROP_BUFFERSIZE, 3); - capture.set(Videoio.CAP_PROP_EXPOSURE, EXP); capture.set(Videoio.CAP_PROP_FPS, FPS); System.out.println("Kamera geöffnet und eingerichtet"); diff --git a/src/main/java/GameLoop.java b/src/main/java/GameLoop.java index fee5a27..9484605 100644 --- a/src/main/java/GameLoop.java +++ b/src/main/java/GameLoop.java @@ -1,7 +1,10 @@ import processing.core.PApplet; import java.awt.Point; +import java.util.ArrayList; +import java.util.List; public class GameLoop { + int activePlayer = 0; ImgAnalyzer tracker; @@ -21,14 +24,14 @@ public class GameLoop { Thread trackerThread = new Thread(tracker::run); trackerThread.start(); - graphics = new GraphicsProgram(player1, player2); + /*graphics = new GraphicsProgram(player1, player2); String[] args = {"GraphicsProgram"}; PApplet.runSketch(args, graphics); gl = new GameLogic(); String[] args_ = {"GameLogic"}; - PApplet.runSketch(args_, gl); + PApplet.runSketch(args_, gl); */ try { Thread.sleep(5000); }catch (Exception e){ @@ -39,7 +42,7 @@ public class GameLoop { } private void run(){ - while(true){ + /*while(true){ //communicate(); Point p1 = tracker.getP1(); @@ -47,10 +50,10 @@ public class GameLoop { Point p2 = tracker.getP2(); //System.out.println("Player 2 is at " + p2.x + " and " + p2.y); - player1.setKoords((int)p1.x, (int)p1.y); - player2.setKoords((int)p2.x, (int)p2.y); + player1.setKoords(p1.x, p1.y); + player2.setKoords(p2.x, p2.y); - /*if(gl.doCheckExtern(player2.getTrail(), p1)){ //Check Position von P1 mit Spur von P2 + if(gl.doCheckExtern(player2.getTrail(), p1)){ //Check Position von P1 mit Spur von P2 System.out.println("Spieler 1 hat verloren"); break; } @@ -58,10 +61,10 @@ public class GameLoop { if(gl.doCheckExtern(player1.getTrail(), p2)){ //Check Position von P2 mit Spur von P1 System.out.println("Spieler 2 hat verloren"); break; - } */ + } - //draw(); - } + draw(); + } */ } private void communicate() { diff --git a/src/main/java/GraphicsProgram.java b/src/main/java/GraphicsProgram.java index 7b95f9b..9813197 100644 --- a/src/main/java/GraphicsProgram.java +++ b/src/main/java/GraphicsProgram.java @@ -24,7 +24,7 @@ public class GraphicsProgram extends PApplet { } public void settings() { - //fullScreen(); + fullScreen(); } public void setup(){ @@ -51,8 +51,10 @@ public class GraphicsProgram extends PApplet { while(!trail.isEmpty()) { int[] koordinaten = trail.poll(); - int x = 1; - int y = 1; + int x = koordinaten[0]; + int y = koordinaten[1]; + + System.out.println(); if(playerID == 0){ image(imgBlue, x, y, particleSize, particleSize); diff --git a/src/main/java/ImgAnalyzer.java b/src/main/java/ImgAnalyzer.java index 460a9a7..67333a2 100644 --- a/src/main/java/ImgAnalyzer.java +++ b/src/main/java/ImgAnalyzer.java @@ -11,18 +11,17 @@ import java.awt.Point; public class ImgAnalyzer { - private final int CAM = 0; // Kamera-ID (0 für Webcam, 1 für andere Cams) + private final int CAM = 1; // Kamera-ID (0 für Webcam, 1 für andere Cams) private final int EXP = -9; // Belichtungszeit (idealerweise: 0) private final int FPS = 20; // FPS - private final int THV = 252; // Threshold + private final int THV = 245; // Threshold private Point currentPositionP1 = new Point(0, 0); private Point currentPositionP2 = new Point(0, 0); - private CamPuffer camPuffer; + private CamPuffer camPuffer = new CamPuffer(CAM, EXP, FPS, THV);; public ImgAnalyzer() { - camPuffer = new CamPuffer(CAM, EXP, FPS, THV); Thread pufferThread = new Thread(camPuffer); pufferThread.start(); } @@ -41,20 +40,15 @@ public class ImgAnalyzer { } Mat currentImg = null; - - Mat grayFrame = new Mat(); Mat thresholdFrame = new Mat(); + int debug = 0; + while (true) { try { currentImg = camPuffer.getCurrentMat(); - //HighGui.imshow("Threshold Image", currentImg); - - // ROI anwenden - //Mat roiFrame = new Mat(downsizedFrame, roi); - // In Graustufen konvertieren Imgproc.cvtColor(currentImg, grayFrame, Imgproc.COLOR_BGR2GRAY); @@ -71,7 +65,7 @@ public class ImgAnalyzer { if (positions.size() >= 2) { currentPositionP1 = positions.get(0); currentPositionP2 = positions.get(1); - //System.out.println("currentPositionP1: " + currentPositionP1 + " currentPositionP2: " + currentPositionP2); + System.out.println("currentPositionP1: " + currentPositionP1 + " currentPositionP2: " + currentPositionP2); } }