diff --git a/app.db b/app.db index 55d8779..2460dd1 100644 Binary files a/app.db and b/app.db differ diff --git a/src/main/java/com/iflytop/digester/DigestionTaskThread.java b/src/main/java/com/iflytop/digester/DigestionTaskThread.java index 109a61c..b919376 100644 --- a/src/main/java/com/iflytop/digester/DigestionTaskThread.java +++ b/src/main/java/com/iflytop/digester/DigestionTaskThread.java @@ -3,6 +3,7 @@ import com.iflytop.digester.deviceinstance.*; import com.iflytop.digester.model.MdbDigestionTask; import com.iflytop.digester.model.MdbDigestionSolution; import com.iflytop.digester.model.MdbDigestionTaskLog; +import com.iflytop.digester.underframework.UfCmdSnippetExecutor; import com.iflytop.digester.underframework.dao.model.UfMdbNotification; import com.iflytop.digester.underframework.dao.model.UfMdbOption; import com.iflytop.digester.underframework.dao.model.UfMdbRuntimeVariable; @@ -334,6 +335,8 @@ public class DigestionTaskThread extends Thread { // 拍照检查试管 private void executeLastRoundTakeShotAndCheckErrorTubes() { this.updateTaskStatus("TubeCheck", "拍照检查试管,等待确认异常试管"); + UfCmdSnippetExecutor.execute("PhotoShotPrepare"); + Map message = Map.of("batchNo", this.taskModel.batchNo, "taskId", this.taskModel.outTaskId); UfMdbNotification.action("TubeCheck", message); diff --git a/src/main/java/com/iflytop/digester/controller/CameraController.java b/src/main/java/com/iflytop/digester/controller/CameraController.java index 8e928d3..cedf690 100644 --- a/src/main/java/com/iflytop/digester/controller/CameraController.java +++ b/src/main/java/com/iflytop/digester/controller/CameraController.java @@ -23,17 +23,8 @@ public class CameraController extends UfApiControllerBase { @PostMapping("/api/camera/take-shot") public UfApiResponse takeShot() { var srcImageMat = this.device.camera.grabToMat(); - - // 翻转图像 - Mat flippedImgMat = new Mat(); - Core.flip(srcImageMat, flippedImgMat, 1); - - // 裁剪图像 - Rect croppedRoi = new Rect(240, 120, 800, 800); - Mat croppedImgMat = new Mat(flippedImgMat, croppedRoi); - MatOfByte imageMob = new MatOfByte(); - Imgcodecs.imencode(".png", croppedImgMat, imageMob); + Imgcodecs.imencode(".png", srcImageMat, imageMob); byte[] imageBytes = imageMob.toArray(); String base64Image = Base64.getEncoder().encodeToString(imageBytes); String base64Data = "data:image/image/png;base64," + base64Image; diff --git a/src/main/java/com/iflytop/digester/controller/TestController.java b/src/main/java/com/iflytop/digester/controller/TestController.java index bd80533..56b729b 100644 --- a/src/main/java/com/iflytop/digester/controller/TestController.java +++ b/src/main/java/com/iflytop/digester/controller/TestController.java @@ -1,12 +1,22 @@ package com.iflytop.digester.controller; import com.iflytop.digester.deviceinstance.Device; +import com.iflytop.digester.underframework.UfCmdSnippetExecutor; import com.iflytop.digester.underframework.controller.UfApiControllerBase; import com.iflytop.digester.underframework.controller.UfApiResponse; +import com.iflytop.digester.underframework.dao.model.UfMdbNotification; import jakarta.annotation.Resource; +import org.opencv.core.Core; +import org.opencv.core.Mat; +import org.opencv.core.MatOfByte; +import org.opencv.core.Rect; +import org.opencv.imgcodecs.Imgcodecs; +import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.Base64; import java.util.List; import java.util.Map; @Controller @@ -40,4 +50,14 @@ public class TestController extends UfApiControllerBase { this.device.liquidAddition.addLiquidToTubes(tubes, type, volume); return this.success(); } + + @ResponseBody + @PostMapping(value="/api/test/take-shot", produces= MediaType.IMAGE_JPEG_VALUE) + public byte[] takeShot() { + this.device.camera.enable(); + var srcImageMat = this.device.camera.grabToMat(); + MatOfByte imageMob = new MatOfByte(); + Imgcodecs.imencode(".png", srcImageMat, imageMob); + return imageMob.toArray(); + } } diff --git a/src/main/java/com/iflytop/digester/deviceinstance/Camera.java b/src/main/java/com/iflytop/digester/deviceinstance/Camera.java index 1db1d19..3d8ff75 100644 --- a/src/main/java/com/iflytop/digester/deviceinstance/Camera.java +++ b/src/main/java/com/iflytop/digester/deviceinstance/Camera.java @@ -1,8 +1,10 @@ package com.iflytop.digester.deviceinstance; import com.iflytop.digester.camera.DiComBaslerCamera; +import com.iflytop.digester.underframework.UfCmdSnippetExecutor; +import org.opencv.core.*; +import org.opencv.imgcodecs.Imgcodecs; import org.springframework.stereotype.Component; -import org.opencv.core.CvType; -import org.opencv.core.Mat; + @Component public class Camera { // camera @@ -65,10 +67,24 @@ public class Camera { // grab public Mat grabToMat () { + // 准备相机 + UfCmdSnippetExecutor.execute("PhotoShotPrepare"); + var pylon = this.getPylon(); var result = pylon.deviceGrabSingleFrame(this.cam, this.channel); Mat frameMat = new Mat(result.sizeY, result.sizeX, CvType.CV_8UC1); frameMat.put(0, 0, result.imageBuffer); - return frameMat; + + // 翻转图像 + Mat flippedImgMat = new Mat(); + Core.flip(frameMat, flippedImgMat, 1); + + // 裁剪图像 + Rect croppedRoi = new Rect(160, 0, 1050, 1020); + Mat croppedImgMat = new Mat(flippedImgMat, croppedRoi); + + // 重置设备 + UfCmdSnippetExecutor.execute("PhotoShotReset"); + return croppedImgMat; } }