|
|
@ -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<String, String> 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)); |
|
|
|
} |
|
|
|