sige 1 year ago
parent
commit
5abb82852c
  1. BIN
      app.db
  2. 3
      src/main/java/com/iflytop/digester/DigestionTaskThread.java
  3. 11
      src/main/java/com/iflytop/digester/controller/CameraController.java
  4. 20
      src/main/java/com/iflytop/digester/controller/TestController.java
  5. 22
      src/main/java/com/iflytop/digester/deviceinstance/Camera.java

BIN
app.db

3
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<String,Object> message = Map.of("batchNo", this.taskModel.batchNo, "taskId", this.taskModel.outTaskId);
UfMdbNotification.action("TubeCheck", message);

11
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;

20
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();
}
}

22
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;
}
}
Loading…
Cancel
Save