Browse Source

修正白框自适配各个站点

master
王寅 3 months ago
parent
commit
05005fdda1
1 changed files with 94 additions and 48 deletions
  1. +94
    -48
      src/main/java/com/inspect/simulator/service/impl/HikVisionServiceImpl.java

+ 94
- 48
src/main/java/com/inspect/simulator/service/impl/HikVisionServiceImpl.java View File

@ -2,6 +2,7 @@ package com.inspect.simulator.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
@ -23,6 +24,7 @@ import com.inspect.simulator.mapper.BasedataPatrolPointMapper;
import com.inspect.simulator.mapper.InfraredBoxMapper;
import com.inspect.simulator.service.HikVisionService;
import com.inspect.simulator.tempCount.TempCount;
import com.inspect.simulator.utils.redis.RedisService;
import com.inspect.simulator.utils.sftp.SftpClient;
import okhttp3.*;
import org.apache.commons.compress.utils.IOUtils;
@ -95,9 +97,15 @@ public class HikVisionServiceImpl implements HikVisionService {
@Value("${file.ftpUrlPort:null}")
private Integer ftpUrlPort;
@Value("${file.infraredUrl:null}")
private String infraredUrl;
// private Integer ftpUrlPort = 10012;
// private Integer ftpUrlPort = 10990;
@Value("${file.standardImgWidth:1280}")
private Integer standardImgWidth;
@Value("${file.standardImgHeight:1024}")
private Integer standardImgHeight;
// @Value("${file.produceEnvironment:true}")
private Boolean produceEnvironment = true;
@ -114,7 +122,8 @@ public class HikVisionServiceImpl implements HikVisionService {
public InfraredBoxMapper infraredBoxMapper;
@Autowired
private BasedataPatrolPointMapper basedataPatrolPointMapper;
@Resource
private RedisService redisService;
// @Override
// public AjaxResult login(NvrInfo nvrInfo) {
@ -699,7 +708,7 @@ public class HikVisionServiceImpl implements HikVisionService {
// 设置标注样式
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// Font font = new Font("微软雅黑", Font.BOLD, 17);
Font font = new Font("WenQuanYi Zen Hei", Font.BOLD, 20);
Font font = new Font("WenQuanYi Zen Hei", Font.BOLD, 23);
final String imageType = infraPictureInfo.getImgType();
if (AlgConstants.INFRA_YU3.equals(imageType)) {
for (Coordinate c : coordinates) {
@ -901,9 +910,9 @@ public class HikVisionServiceImpl implements HikVisionService {
String line1 = "平均温度:" + String.format("%.2f", drawStringMatrix.getFrameAverage());
String line2 = "最高温度:" + String.format("%.2f", drawStringMatrix.getFrameMax());
String line3 = "最低温度:" + String.format("%.2f", drawStringMatrix.getFrameMin());
g2d.drawString(line1, rectX + 5, rectY + 15);
g2d.drawString(line2, rectX + 5, rectY + 30);
g2d.drawString(line3, rectX + 5, rectY + 45);
g2d.drawString(line1, rectX + 15, rectY + 30);
g2d.drawString(line2, rectX + 15, rectY + 60);
g2d.drawString(line3, rectX + 15, rectY + 90);
// 在最高温度点画一个空心圆红色边框
@ -1409,14 +1418,28 @@ public class HikVisionServiceImpl implements HikVisionService {
int imgWidth = 640;
int imgHeight = 512;
if (picData != null) {
String[] parts = picData.split(",");
// 解析坐标
firstX = Integer.parseInt(parts[0]);
firstY = Integer.parseInt(parts[1]);
secondX = Integer.parseInt(parts[2]);
secondY = Integer.parseInt(parts[3]);
imgHeight = Integer.parseInt(parts[4]);
imgWidth = Integer.parseInt(parts[5]);
if(parts.length==6){
// 解析坐标
firstX = Integer.parseInt(parts[0]);
firstY = Integer.parseInt(parts[1]);
secondX = Integer.parseInt(parts[2]);
secondY = Integer.parseInt(parts[3]);
imgHeight = Integer.parseInt(parts[4]);
imgWidth = Integer.parseInt(parts[5]);
} else {
// 解析坐标
// 解析坐标 - 修复整数除法问题
firstX = (int) (Double.parseDouble(parts[0]) / Integer.parseInt(parts[8]) * standardImgWidth);
firstY = (int) (Double.parseDouble(parts[1]) / Integer.parseInt(parts[9]) * standardImgHeight);
secondX = (int) (Double.parseDouble(parts[4]) / Integer.parseInt(parts[8]) * standardImgWidth);
secondY = (int) (Double.parseDouble(parts[5]) / Integer.parseInt(parts[9]) * standardImgHeight);
imgHeight = standardImgHeight;
imgWidth = standardImgWidth;
log.error("点位信息!firstX:{},firstY:{},secondX:{},secondY:{},imgHeight:{},imgWidth:{}", firstX, firstY, secondX, secondY, imgHeight, imgWidth);
}
} else {
log.error("无点位信息!");
}
@ -1464,7 +1487,13 @@ public class HikVisionServiceImpl implements HikVisionService {
//画框标注
String s = ImageOverlays(infraPictureInfo, infraredInfo);
infraredInfo.setOutPath(s);
//温度未取到
if(StringUtils.isNull(maxTemperature)){
maxTemperature = "-1";
infraredInfo.setFrameMax(-1);
} else if(StringUtils.isNull(infraredInfo.getFrameMax())){
infraredInfo.setFrameMax(Float.parseFloat((maxTemperature)));
}
} else if (AlgConstants.INFRA_1800.equals(imageType)) {
//ivs1800红外图
String s = ImageOverlays(infraPictureInfo, infraredInfo);
@ -1583,14 +1612,22 @@ public class HikVisionServiceImpl implements HikVisionService {
String[] eqpAddress = eqpchannel.getAddress().split(":");
ObjectMapper req_mapper = new ObjectMapper();
Map<String, String> requestBody = new HashMap<>();
requestBody.put("address", eqpchannel.getAddress());
requestBody.put("ip", eqpAddress[7]);
requestBody.put("port", eqpAddress[8]);
requestBody.put("channel", eqpAddress[9]);
requestBody.put("presetId", eqpchannel.getPresetPosCode());
requestBody.put("cameraType", eqpAddress[4]);
requestBody.put("userName", eqpAddress[5]);
requestBody.put("password", eqpAddress[6]);
requestBody.put("userName", eqpAddress[10]);
requestBody.put("password", eqpAddress[11]);
log.info("requestBody 请求体: " +requestBody.toString());
if(StringUtils.isNotNull(redisService.redisTemplate.opsForValue().get(eqpAddress[7] +'_'+ eqpchannel.getPresetPosCode()))){
temperatureData = convertJsonToTemperatureData(redisService.redisTemplate.opsForValue().get(eqpAddress[7] +'_'+ eqpchannel.getPresetPosCode()).toString());
} else {
temperatureData.setMaxTemperature("-1");
temperatureData.setMinTemperature("-1");
}
String jsonBody = null;
try {
@ -1615,38 +1652,38 @@ public class HikVisionServiceImpl implements HikVisionService {
// .addFormDataPart("password", "htjc2018")
// .build();
// 构建请求
Request request = new Request.Builder()
.url("http://172.21.101.79:8080/hw/cameraHong")
.post(body)
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) {
log.error("请求测温接口失败,状态码: " + response.code());
}
String responseBody = response.body() != null ? response.body().string() : null;
// 解析 JSON 并提取 image_raw_flow
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonArray = mapper.readTree(responseBody);
if (jsonArray.isEmpty()) {
throw new RuntimeException("JSON数组为空");
}
JsonNode firstItem = jsonArray.get("data");
JsonNode maxTemperature = firstItem.get("maxTemperature");
JsonNode minTemperature = firstItem.get("minTemperature");
JsonNode avgTemperature = firstItem.get("avgTemperature");
JsonNode temperatureDiff = firstItem.get("temperatureDiff");
JsonNode channel = firstItem.get("channel");
JsonNode ruleId = firstItem.get("ruleId");
temperatureData.setMaxTemperature(maxTemperature.toString());
temperatureData.setMinTemperature(minTemperature.toString());
System.out.println("firstItem: " + firstItem);
// 构建请求"http://172.21.101.79:8080/hw/cameraHong"
// Request request = new Request.Builder()
// .url(infraredUrl)
// .post(body)
// .addHeader("Content-Type", "application/json")
// .build();
//
//
// Response response = client.newCall(request).execute();
// if (!response.isSuccessful()) {
// log.error("请求测温接口失败,状态码: " + response.code());
// }
// String responseBody = response.body() != null ? response.body().string() : null;
//
// // 解析 JSON 并提取 image_raw_flow
// ObjectMapper mapper = new ObjectMapper();
// JsonNode jsonArray = mapper.readTree(responseBody);
// if (jsonArray.isEmpty()) {
// throw new RuntimeException("JSON数组为空");
// }
// JsonNode firstItem = jsonArray.get("data");
// JsonNode maxTemperature = firstItem.get("maxTemperature");
// JsonNode minTemperature = firstItem.get("minTemperature");
// JsonNode avgTemperature = firstItem.get("avgTemperature");
// JsonNode temperatureDiff = firstItem.get("temperatureDiff");
// JsonNode channel = firstItem.get("channel");
// JsonNode ruleId = firstItem.get("ruleId");
//
//
// temperatureData.setMaxTemperature(maxTemperature.toString());
// temperatureData.setMinTemperature(minTemperature.toString());
// System.out.println("firstItem: " + firstItem);
} catch (Exception e) {
e.printStackTrace();
@ -1654,7 +1691,16 @@ public class HikVisionServiceImpl implements HikVisionService {
return temperatureData;
}
public TemperatureData convertJsonToTemperatureData(String jsonString) {
// 先解析为JSONObject
JSONObject jsonObject = JSON.parseObject(jsonString);
// 移除@type字段避免Fastjson尝试按原类型解析
jsonObject.remove("@type");
// 转换为目标对象
return jsonObject.toJavaObject(TemperatureData.class);
}
@Override
public InputStream downloadCsv(String filePath) {


Loading…
Cancel
Save