From 5abb82852cff642916163dabd2974089532801dd Mon Sep 17 00:00:00 2001 From: sige Date: Wed, 24 Apr 2024 20:45:01 +0800 Subject: [PATCH] ~ --- app.db | Bin 561152 -> 561152 bytes .../com/iflytop/digester/DigestionTaskThread.java | 3 +++ .../digester/controller/CameraController.java | 11 +---------- .../digester/controller/TestController.java | 20 +++++++++++++++++++ .../iflytop/digester/deviceinstance/Camera.java | 22 ++++++++++++++++++--- 5 files changed, 43 insertions(+), 13 deletions(-) diff --git a/app.db b/app.db index 55d8779861bdf403aee5789989e44f81b178fb8b..2460dd1d6ca4d082e1297fb3612fcd01a68b56b5 100644 GIT binary patch delta 555 zcmZozpwzHHX@V4!hTTLNCm^{oVaa^vIEGV`*%vHj0#a)h$Y^RXhcc!bCR&=L8m8zP zBwD8Fni!@S=q4Gbr0J%mr6eVp8kwhyC3GXXL4_RkAg_~Ip*Z5TKi zikNv8a!=tr#Qur#GCw2l8s;YqMN_3%BVwB3>e)gy)m!X|u^}KMza&2xNCc%8rt5k-Y0u|qpOv&Q!ACM49yLVEzJxp%q`4~rW@X1ww^4I#5?`L6c!#%OEW`L z0|QeNv+03i%%NbeiLrr&;dDkVW@`xp10@}$l+@y6B`YPR+SsPFDz;Ev^%n2xtJzs~ zH3N!L3lfV`VOF-cJzdg{W~HTtrJAtU+W!Qn%8JHOxO`kB2#fC}OaQZ}k zR%wu>M&_2r#%3T(t)}l)W)_TLU&62y7zB;(GzIvy&7T*ve_p@{#7scU zy#4b67QT2%1_lNW<|hn13%RFo9%BE*zJ#BVcMVX0VX72s#B>uD*7V6|k`!5Wjm%69 zHs4LY$|TV4TgMja?b_}Jrh5IiKVfD)z|7`T#Tu%wJAEBHtKRf$OIW1ZKe4j{F&hxG LZ~w&3!Pfx*LUud1 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; } }