From b05b8f4aab44df4637df046079bb965d90cb6116 Mon Sep 17 00:00:00 2001 From: sige Date: Thu, 29 Feb 2024 10:44:35 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=90=AF=E5=8A=A8=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/my/graphiteDigesterBg/api/ApiCamera.java | 56 ++++++++++++++-------- .../my/graphiteDigesterBg/task/TaskStartReset.java | 23 ++++++--- 2 files changed, 53 insertions(+), 26 deletions(-) diff --git a/src/src/main/java/com/my/graphiteDigesterBg/api/ApiCamera.java b/src/src/main/java/com/my/graphiteDigesterBg/api/ApiCamera.java index d2944b1..ba3794a 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/api/ApiCamera.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/api/ApiCamera.java @@ -1,9 +1,15 @@ package com.my.graphiteDigesterBg.api; +import com.my.graphiteDigesterBg.MyDevice; import com.my.graphiteDigesterBg.diframe.DiApiControllerBase; import com.my.graphiteDigesterBg.diframe.DiApiResponse; import com.my.graphiteDigesterBg.diframe.DiDevice; +import com.my.graphiteDigesterBg.diframe.actuator.DiActCameraBasler; +import com.my.graphiteDigesterBg.move.MoveCameraGrabFrame; import com.my.graphiteDigesterBg.move.MoveDetectErrorSlots; import jakarta.annotation.Resource; +import org.opencv.core.*; +import org.opencv.imgcodecs.Imgcodecs; +import org.opencv.imgproc.Imgproc; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; @@ -17,31 +23,43 @@ import java.util.HashMap; import java.util.Map; @Controller public class ApiCamera extends DiApiControllerBase { - @Value("${camera.image-path}") - private String imagePath; - @Resource private DiDevice device; @ResponseBody @PostMapping("/api/camera/image") public DiApiResponse getImage() { - Map response = new HashMap<>(); - response.put("data", null); - File file = new File(this.imagePath); - if ( !file.exists() ) { - return this.success(response); - } - - byte[] bytes = new byte[(int)file.length()]; - try { - FileInputStream fis = new FileInputStream(file); - fis.read(bytes); - fis.close(); - } catch (Exception e) { - throw new RuntimeException(e); - } - String base64Image = Base64.getEncoder().encodeToString(bytes); + DiActCameraBasler camera = (DiActCameraBasler)this.device.getActuators().get(MyDevice.ACT_CAMERA); + var imageMat = camera.grabToMat(); + + // resize to 1/4 + var size = imageMat.size(); + var width = (int)(size.width * 0.25); + var height = (int)(size.height * 0.25); + var resizedMat = new Mat(); + Size newSize = new Size(width, height); + Imgproc.resize(imageMat, resizedMat, newSize); + + MatOfByte imageMob = new MatOfByte(); + Imgcodecs.imencode(".png", resizedMat, imageMob); + byte[] imageBytes = imageMob.toArray(); + String base64Image = Base64.getEncoder().encodeToString(imageBytes); + String base64Data = "data:image/image/png;base64," + base64Image; + return this.success(Map.of("data",base64Data)); + } + + @ResponseBody + @PostMapping("/api/camera/take-shot") + public DiApiResponse takeShot() { + var cameraGrabFrame = new MoveCameraGrabFrame(); + cameraGrabFrame.setDevice(this.device); + cameraGrabFrame.run(); + var imgMat = cameraGrabFrame.getDetectImageMat(); + + MatOfByte imageMob = new MatOfByte(); + Imgcodecs.imencode(".png", imgMat, imageMob); + byte[] imageBytes = imageMob.toArray(); + String base64Image = Base64.getEncoder().encodeToString(imageBytes); String base64Data = "data:image/image/png;base64," + base64Image; return this.success(Map.of("data",base64Data)); } diff --git a/src/src/main/java/com/my/graphiteDigesterBg/task/TaskStartReset.java b/src/src/main/java/com/my/graphiteDigesterBg/task/TaskStartReset.java index a3ce331..86ca6d1 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/task/TaskStartReset.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/task/TaskStartReset.java @@ -2,21 +2,26 @@ package com.my.graphiteDigesterBg.task; import com.my.graphiteDigesterBg.MyDevice; import com.my.graphiteDigesterBg.diframe.DiTaskBase; import com.my.graphiteDigesterBg.diframe.Task; +import com.my.graphiteDigesterBg.diframe.actuator.DiActCameraBasler; import com.my.graphiteDigesterBg.diframe.actuator.DiActMotor; import com.my.graphiteDigesterBg.diframe.actuator.DiActPeristalticPump; import com.my.graphiteDigesterBg.diframe.actuator.DiActServo; import com.my.graphiteDigesterBg.model.MdbOperationLog; - +import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlotManager; @Task(name="StartReset") public class TaskStartReset extends DiTaskBase { @Override protected void execute() { MdbOperationLog.log(this.getUser(), "设备初始化"); var runtimeVars = this.getDevice().getRuntimeVariables(); - runtimeVars.setString("IsDeviceReady", "NO"); - runtimeVars.setString("IsTaskStartResetExecuting", "YES"); + runtimeVars.setString("NO","IsDeviceReady"); + runtimeVars.setString("YES", "IsTaskStartResetExecuting"); this.setProgressMessage("设备初始化..."); + this.setProgressMessage("设备初始化 : 相机"); + DiActCameraBasler camera = this.getActuator(MyDevice.ACT_CAMERA, DiActCameraBasler.class); + camera.setEnable(true); + this.setProgressMessage("设备初始化 : 关闭设备门"); DiActMotor doorMotor = this.getActuator(MyDevice.ACT_DOOR_MOTOR, DiActMotor.class); doorMotor.setEnable(true); @@ -33,7 +38,6 @@ public class TaskStartReset extends DiTaskBase { liquidMotor.reset(); liquidMotor.moveTo("LiquidArmStandby"); - // @todo http://127.0.0.1:5566/issues/38 this.setProgressMessage("设备初始化 : 搬运机械臂上下移动复位"); DiActMotor transUdMotor = this.getActuator(MyDevice.ACT_TRANSFER_UD_MOTOR, DiActMotor.class); transUdMotor.setEnable(true); @@ -77,15 +81,20 @@ public class TaskStartReset extends DiTaskBase { } } + this.setProgressMessage("设备初始化 : 定时刷新加热盘温度"); + var slotMan = this.getResourceManager(ResHeatingTubeRackSlotManager.class); + slotMan.startTemperatureRefresh(); + this.setProgressMessage("设备初始化 : 完成"); - runtimeVars.setString("IsDeviceReady", "YES"); - runtimeVars.setString("IsTaskStartResetExecuting", "NO"); + runtimeVars.setString("YES","IsDeviceReady"); + runtimeVars.setString("NO", "IsTaskStartResetExecuting"); + runtimeVars.setString("设备已就绪", "StatusMessage"); this.setStatus(TaskStatus.FINISHED); } // set progress message private void setProgressMessage(String message) { var runtimeVars = this.getDevice().getRuntimeVariables(); - runtimeVars.setString("TaskStartResetMessage", message); + runtimeVars.setString(message, "TaskStartResetMessage"); } }