1.设置http连接时间

2、识别3d接口
3、图片位置调整
4、修改品规名称
滁州-烟草
LAPTOP-S9HJSOEB\昊天 2 years ago
parent 9504a620d0
commit c9ad330b7c

@ -24,8 +24,8 @@ public class FusionDesignApplication {
// 使用RestTemplateBuilder来实例化RestTemplate对象spring默认已经注入了RestTemplateBuilder实例
@Bean
public RestTemplate restTemplate() {
return builder.setConnectTimeout(Duration.ofSeconds(10)) // 设置连接超时时间,单位毫秒
.setReadTimeout(Duration.ofSeconds(10)) // 设置读取超时时间,单位毫秒
return builder.setConnectTimeout(Duration.ofSeconds(20)) // 设置连接超时时间,单位毫秒
.setReadTimeout(Duration.ofSeconds(20)) // 设置读取超时时间,单位毫秒
.build();
}
}

@ -13,9 +13,12 @@ import com.zhehekeji.web.service.IndustrialCamera.LxPointCloudSaveImage;
import com.zhehekeji.web.service.StreetService;
import com.zhehekeji.web.service.algorithm.FeatureMatchingExample;
import com.zhehekeji.web.service.algorithm.InventoryService;
import com.zhehekeji.web.service.algorithm.PcdPojo;
import com.zhehekeji.web.service.algorithm.PointCloudProcessor;
import com.zhehekeji.web.service.client.TransmissionPojo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.springframework.web.bind.annotation.*;
@ -24,10 +27,13 @@ import javax.annotation.Resource;
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.UUID;
import static com.zhehekeji.web.service.algorithm.FeatureMatchingExample.base642Mat;
@Slf4j
@Api(tags = "工业相机")
@RequestMapping("/industrialCamera")
@RestController
@ -76,7 +82,48 @@ public class IndustrialCameraController {
@ApiOperation("识别3D")
@PostMapping("Macth3D")
public Result<String> Macth3D(@RequestBody IndustrialCameraVO industrialCameraVo){
return null;
Street street = streetService.getStreetByPlcId(industrialCameraVo.getStreetId());
LocalDate currentDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//盘点地址
String pcdPath1 =configProperties.getSavePath().getMediaPath() + street.getLeft3D()+ "/"+currentDate.format(formatter)+"/"+industrialCameraVo.getPcdPath()+".pcd";
String pcdPath2 =configProperties.getSavePath().getMediaPath() + street.getRight3D()+ "/"+ currentDate.format(formatter)+"/"+industrialCameraVo.getPcdPath()+".pcd";
//随行地址
String pcdPath3 =configProperties.getSavePath().getMediaPath() + street.getLeft3D()+"/000/"
+"/"+industrialCameraVo.getPcdPath()+"-L"+".pcd";
String pcdPath4 =configProperties.getSavePath().getMediaPath() + street.getRight3D()+"/000/"
+"/"+industrialCameraVo.getPcdPath()+"-R"+".pcd";
//拍照
log.info("3D拍照 左侧pcd "+street.getLeft3D()+" 右侧pcd: "+pcdPath1);
LxPointCloudSaveImage.saveImage(street.getLeft3D(), pcdPath1,1);
LxPointCloudSaveImage.saveImage(street.getRight3D(), pcdPath2,2);
//左侧比较
PcdPojo pojo = new PcdPojo();
pojo.setPcd1(pcdPath1);
pojo.setPcd2(pcdPath3);
pojo.setConfigPath("D://config//3DConfig/"+street.getLeft3D()+".json");
double leftScore = PointCloudProcessor.similarity(pojo,10);
log.info("3D leftScore"+leftScore);
//右侧比较
pojo.setPcd1(pcdPath2);
pojo.setPcd2(pcdPath4);
pojo.setConfigPath("D://config//3DConfig/"+street.getRight3D()+".json");
double rightScore = PointCloudProcessor.similarity( pojo,10);
log.info("3D rightScore"+rightScore);
if(leftScore<0.9||rightScore<0.9){
}
return Result.success(leftScore +" "+ rightScore);
}
@Resource
@ -106,7 +153,6 @@ public class IndustrialCameraController {
+transmissionPojo.getRow()+"-"+transmissionPojo.getColumn()+"-"+transmissionPojo.getDirection()+"-R"+".pcd";
//拍照
System.out.println(street.getLeft3D()+" 111211 "+ pcdPath1);
System.out.println((System.getProperty("user.dir"))+"\\libs\\plc\\cameraapi");
LxPointCloudSaveImage lxPointCloudSaveImage = new LxPointCloudSaveImage();
lxPointCloudSaveImage.saveImage(street.getLeft3D(), pcdPath1,1);

@ -1,9 +1,11 @@
package com.zhehekeji.web.lib;
import com.zhehekeji.web.entity.Camera;
import com.zhehekeji.web.lib.joyware.NetSDKLib;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* camera login handler
@ -14,13 +16,14 @@ public class CameraConnMap {
* key :cameraId
* value: loginId
*/
public static Map<Integer, NetSDKLib.LLong> cameraMap = new HashMap<>();
public static Map<Integer, NetSDKLib.LLong> cameraMap = new ConcurrentHashMap<>();
public static Map<Integer, Camera> cameraInfoMap = new ConcurrentHashMap<>();
/**
* key:loginId
* value: cameraId
*/
public static Map<NetSDKLib.LLong,Integer> loginMap = new HashMap<>();
public static Map<NetSDKLib.LLong,Integer> loginMap = new ConcurrentHashMap<>();
public static void conn(Integer cameraId,NetSDKLib.LLong handlerId){
synchronized (cameraId.toString().intern()){

@ -20,6 +20,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import static com.zhehekeji.web.lib.CameraConnMap.cameraInfoMap;
import static com.zhehekeji.web.lib.hik.HCNetSDK.NET_DVR_GET_PTZPOS;
/**
@ -42,6 +43,7 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
public boolean ptzControlUpStart(Integer cameraId, int nChannelID, int dwPTZCommand,int dwStop)
{
int lUserId = CameraConnMap.getConnId(cameraId).intValue();
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.TILT_UP, 0);
}

@ -10,6 +10,8 @@ public class IndustrialCameraVO {
private String picImg;
private String typeMacth;
private List<ImgFile> fileList;
private String pcdPath;
private String streetId;
}

@ -28,6 +28,8 @@ import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import static com.zhehekeji.web.lib.CameraConnMap.cameraInfoMap;
/**
*
* plc
@ -139,6 +141,7 @@ public class InitService implements ApplicationRunner {
@Override
public void run() {
cameraService.cameraLogin(camera);
cameraInfoMap.put(camera.getId(),camera);
}
}

@ -36,7 +36,9 @@ import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.io.IOException;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@ -342,11 +344,14 @@ public class PlcService {
} catch (Exception e) {
log.error("cameraId error:{}", cameraId);
}
if (needCapture) {
Boolean delay = true;
Integer row = 0;
Integer column = 0;
Integer sep = 0;
long delayTime = 0;
if (needCapture) {
if (times <= 2) {
row = plcCmdInfo.getRow1();
column = plcCmdInfo.getColumn1();
@ -356,7 +361,6 @@ public class PlcService {
column = plcCmdInfo.getColumn2();
sep = plcCmdInfo.getSeparation2();
}
long delayTime = 0;
if (code.startsWith("C1")) {
@ -367,26 +371,7 @@ public class PlcService {
} else {
delayTime = configProperties.getCameraConfig().getC2OutDelayCaptureTime();
}
try {
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/json");
headers.set("User-Agent", "Mozilla/5.0");
TransmissionPojo scTransmission = new TransmissionPojo(street, plcCmdInfo.getRow2(), plcCmdInfo.getColumn2(), plcCmdInfo.getLeftRight2(), plcCmdInfo.getTaskId());
// 创建 HttpEntity 对象
HttpEntity<TransmissionPojo> entity = new HttpEntity<>(scTransmission, headers);
// 发送 POST 请求
ResponseEntity<Boolean> response = restTemplate.exchange(
"http://" + street.getPlcIp() + ":8099" + "/api/industrialCamera/actionType",
HttpMethod.POST,
entity,
Boolean.class
);
} catch (Exception e) {
log.error("3D get pcd error", e);
}
} else if (code.startsWith("C3")) {
delayTime = configProperties.getCameraConfig().getC3DelayCaptureTime();
@ -415,6 +400,32 @@ public class PlcService {
gyrateCameraByCodeTimeLater(street.getCamera1Id(), "C5", configProperties.getCameraConfig().getC2OutDelayCaptureTime() + 500);
}
}
if (code.startsWith("C2")) {
//延迟后拍照
try {
Thread.sleep(delayTime);
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/json");
headers.set("User-Agent", "Mozilla/5.0");
TransmissionPojo scTransmission = new TransmissionPojo(street, plcCmdInfo.getRow2(), plcCmdInfo.getColumn2(), plcCmdInfo.getLeftRight2(), plcCmdInfo.getTaskId());
// 创建 HttpEntity 对象
HttpEntity<TransmissionPojo> entity = new HttpEntity<>(scTransmission, headers);
// 发送 POST 请求
ResponseEntity<Boolean> response = restTemplate.exchange(
"http://" + street.getPlcIp() + ":8099" + "/api/industrialCamera/actionType",
HttpMethod.POST,
entity,
Boolean.class
);
} catch (Exception e) {
log.error("3D get pcd error", e);
}
}
}
public void gyrateCamera(PlcCmdInfo plcCmdInfo, String code) {
@ -773,19 +784,19 @@ public class PlcService {
} catch (ExecutionException e) {
throw new RuntimeException(e);
}
String path2D = "http://" + street.getPlcIp() + ":8099/api/"
LocalDate currentDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String path2D = "http://" + street.getPlcIp() + ":9007/api/pic/"
+ "industrialCamera/"
+ street.getPlcId() + "/"
+ checkLog.getLotnum() + "/"
+ checkLog.getId() + "/"
+ checkLog.getRow() + "/"
+ checkLog.getColumn() + "/"
+ currentDate.format(formatter) + "/"
+ checkLog.getRow() + "-"
+ checkLog.getColumn() + "-"
+ checkLog.getDirection().toString() + "/";
//结果
String filePath = path2D + street.getIndustrialCamera() + ".jpeg";
OrderInfo orderInfo = new OrderInfo(street, plcCmdInfo, 1, cmdCode);
Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(orderInfo.getStreetId(), plcCmdInfo.getLeftRight1(), orderInfo.getSeparation(), orderInfo.getRow(), orderInfo.getColumn());
String scanCode = null;
//货物使用球机扫码
@ -799,6 +810,8 @@ public class PlcService {
}
checkLog.setStatus(status);
Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(orderInfo.getStreetId(), plcCmdInfo.getLeftRight1(), orderInfo.getSeparation(), orderInfo.getRow(), orderInfo.getColumn());
checkLogMapper.updateById(checkLog);
if (stock == null) {
stock = Stock.builder()
@ -816,9 +829,7 @@ public class PlcService {
.status(status)
.checkPic(path)
.preoperationPic(filePath)
.statusVision(checkLog.getStatusVision())
.count(checkLog.getCount())
.category(checkLog.getCategory())
.exportTime(LocalDateTime.now()).build();
stockMapper.insert(stock);
} else {
@ -827,9 +838,6 @@ public class PlcService {
stock.setExportTime(LocalDateTime.now());
stock.setCheckPic(path);
stock.setStatusVision(checkLog.getStatusVision());
stock.setCount(checkLog.getCount());
stock.setCategory(checkLog.getCategory());
stock.setCheckNum(plcCmdInfo.getOrderNum());
stock.setTrayCode(checkLog.getTrayCode());
stock.setWmsTrayCode(wmsTrayCode);
@ -927,28 +935,9 @@ public class PlcService {
}
} else if (type == 4) {
TransmissionPojo transmissionPojo = new TransmissionPojo(checkLog, street);
if (ClientChanel.get(plcCmdInfo.getPlcId()) != null) {
ClientChanel.get(plcCmdInfo.getPlcId()).writeAndFlush(transmissionPojo.toString(TransmissionType.ST));
} else {
log.error("未找到对应plc" + transmissionPojo.toString());
}
//取货完成进行拍照
try {
Thread.sleep(50L);
//不为其他状态进入队列
if (lock.tryLock()) {
//
getPhotoDelayExecutor.communicationFactory(street.getPlcId(), transmissionPojo.toString(TransmissionType.GPS), configProperties.getQueueSpanTime(), transmissionPojo, checkLog);
}
} catch (InterruptedException e) {
log.error("取图命令 error", e);
} finally {
lock.unlock();
log.info("盘点完成");
}
}
if (checkLog.getTrayCode() != null && !"".equals(checkLog.getTrayCode())) {
checkLog.setTrayCode(checkLog.getTrayCode() + trayCode);

@ -26,7 +26,9 @@ import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
@ -408,21 +410,30 @@ public class StockService {
Street street = streetMapper.selectById(stock.getStreetId());
stock.setStreetName(street.getName());
List<StockLog> stockLogs = stockLogMapper.selectList(new QueryWrapper<StockLog>().eq("`row`", stockCheck.getRow()).eq("`column`", stockCheck.getColumn()).eq("street_id", stockCheck.getStreetId()).eq("direction", stockCheck.getDirection()).eq("side", stockCheck.getSide()).orderByDesc("create_time").last(" limit 2"));
LocalDate currentDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
List<StockLog> stockLogs = stockLogMapper.selectList(new QueryWrapper<StockLog>()
.eq("`row`", stockCheck.getRow())
.eq("`column`", stockCheck.getColumn())
.eq("street_id", stockCheck.getStreetId())
.eq("direction", stockCheck.getDirection())
.eq("side", stockCheck.getSide())
.orderByDesc("create_time")
.last(" limit 1"));
if (stockLogs.size() == 1) {
stock.setOveroperationPic(stockLogs.get(0).getPic());
} else if (stockLogs.size() == 2) {
stock.setOveroperationPic(stockLogs.get(0).getPic());
}
String path2D = "http://" + street.getPlcIp() + ":8099/api/"
currentDate =stock.getExportTime().toLocalDate();
String path2D = "http://" + street.getPlcIp() + ":9007/api/pic/"
+ "industrialCamera/"
+ street.getPlcId() + "/"
+ stock.getLotnum() + "/"
+ stock.getId() + "/"
+ stock.getRow() + "/"
+ stock.getColumn() + "/"
+ stock.getDirection().toString() + "/";
+ currentDate.format(formatter) + "/"
+ stock.getRow() + "-"
+ stock.getColumn() + "-"
+ stock.getDirection().toString() + "-";
//结果
String filePath = path2D + street.getIndustrialCamera() + ".jpeg";
stock.setPreoperationPic(filePath);
@ -437,6 +448,18 @@ public class StockService {
return stock;
}
public static void main(String[] args) {
;
String currentDate = "2024-09-11 12:38:53";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// 解析字符串为 LocalDateTime
LocalDateTime dateTime = LocalDateTime.parse(currentDate, formatter);
System.out.println( dateTime.format(formatter1));
}
public Stock nextOne(Long id) {
QueryWrapper<Stock> stockQueryWrapper = new QueryWrapper<>();

File diff suppressed because one or more lines are too long

@ -16,8 +16,8 @@ public class PointCloudProcessor {
public static void main(String[] args) {
PcdPojo pojo = new PcdPojo();
pojo.setPcd1("E:\\127.pcd");
pojo.setPcd2("E:\\1-8-2-R.pcd");
pojo.setPcd1("D:\\WeChet\\WeChat Files\\wxid_ttkf0xgmyihv22\\FileStorage\\File\\2024-09\\8-6-2-L.pcd");
pojo.setPcd2("D:\\WeChet\\WeChat Files\\wxid_ttkf0xgmyihv22\\FileStorage\\File\\2024-09\\369.pcd");
pojo.setConfigPath("E:\\D91FCF1FAB3568DB.json");
double i = similarity(pojo,10);
System.out.println("111 "+i);

@ -41,8 +41,9 @@ public class GetPhotoDelayExecutor {
//GetPhotoDelayExecutor.addCameraDelayTask( plcId, getPhotoCommand, time, transmissionPojo);
//视觉
//保存数据
log.info("视觉请求:"+transmissionPojo.toString());
transmissionPojo = plcService.visualInventoryHttp(transmissionPojo);
plcService.visualCalculationResults(transmissionPojo,checkLog);
//plcService.visualCalculationResults(transmissionPojo,checkLog);
//发送给上位机
KsecInfo ksecInfo = plcService.getKsecDataInfo(transmissionPojo,"E");
ksecInfo.getData().setTypeNum(transmissionPojo.getCategory());

@ -42,6 +42,8 @@ public class KsecDataInfo {
private String typeNum;
private String matid;
private Integer quantity;
private Integer checkRlt;

@ -100,6 +100,9 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
if(dataInfo.getToDirection()!=null){
dataInfo.setToDirection(dataInfo.getToDirection()==1?2:1);
}
if(dataInfo.getMatid() != null){
dataInfo.setTypeNum(dataInfo.getMatid());
}
LotnumConvert lotnumConvert = new LotnumConvert(dataInfo.getLotnum());
String lotnum = lotnumConvert.getLotnum();
dataInfo.setLotnum(lotnum);

Loading…
Cancel
Save