YOLODetector is working (25/02/2025)

This commit is contained in:
2025-02-25 13:56:57 +07:00
parent ce5c8d5946
commit 5f8d1946c0
6 changed files with 248 additions and 433 deletions

View File

@@ -9,7 +9,10 @@ import lombok.Getter;
import lombok.Setter;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.FrameGrabber;
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.javacv.OpenCVFrameConverter;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgproc.Imgproc;
import org.tinylog.Logger;
public class GrabbingTask implements Runnable {
@@ -98,30 +101,52 @@ public class GrabbingTask implements Runnable {
isGrabbing.set(false);
}
private void processFrame(Frame fr){
if (fr!=null){
updateHQFrame(fr);
updateHQBase64(SomeCodes.FrameToBase64(fr));
Frame resized = SomeCodes.ResizeFrame(fr, lowquality_width, lowquality_height);
updateLQFrame(resized);
updateLQBase64(SomeCodes.FrameToBase64(resized));
} else updateMessage("processFrame have null frame");
if (fr!=null && fr.image!=null && fr.imageWidth>0 && fr.imageHeight>0){
try(var converter = new OpenCVFrameConverter.ToOrgOpenCvCoreMat()){
org.opencv.core.Mat mat = converter.convert(fr);
if (mat.cols()>0 && mat.rows()>0){
updateHQFrame(fr);
updateHQBase64(SomeCodes.MatToBase64(mat));
Size lowsize = new Size(lowquality_width, lowquality_height);
Mat resized = new Mat();
Imgproc.resize(mat, resized, lowsize);
if (resized.cols()>0 && resized.rows()>0){
Frame resizedFrame = SomeCodes.CoreMatConverter.convert(resized);
updateLQFrame(resizedFrame);
updateLQBase64(SomeCodes.MatToBase64(resized));
} else System.out.println("processFrame resized size is 0");
DetectYolo(mat);
resized.release();
} else System.out.println("processFrame Mat size is 0");
mat.release();
} catch (Exception e){
Logger.error("Error processing frame: "+e.getMessage());
}
} else {
System.out.println("processFrame have null frame");
updateMessage("processFrame have null frame");
}
}
//TODO masih trouble di sini
private void DetectYolo(Frame frame){
if (frame!=null){
private void DetectYolo(Mat mat){
if (mat!=null && mat.cols()>0 && mat.rows()>0){
//System.out.println("DetectYolo mat cols = "+mat.cols()+", rows = "+mat.rows());
try{
Mat processed = yolo.Detect(frame);
Frame yoloFrame = SomeCodes.CoreMatConverter.convert(processed);
Mat[] processed = yolo.Detect(mat);
Mat yolomat = yolo.Process(mat, processed[0], processed[1]);
Frame yoloFrame = SomeCodes.CoreMatConverter.convert(yolomat);
updateYoloFrame(yoloFrame);
updateYoloBase64(SomeCodes.FrameToBase64(yoloFrame));
updateYoloBase64(SomeCodes.MatToBase64(yolomat));
} catch (Exception e){
System.out.println("error processing YOLO, Message : "+e.getMessage());
updateYoloFrame(null);
updateYoloBase64("");
}
}
} else System.out.println("DetectYolo mat is null");
}
@@ -150,7 +175,6 @@ public class GrabbingTask implements Runnable {
if (framecount<Integer.MAX_VALUE) framecount++; else framecount = 0;
if (framecount % skippedframes == 0) {
processFrame(frame);
DetectYolo(frame);
}
} catch (Exception e){
Logger.error("Error grabbing frame: "+e.getMessage());