Browse Source

无人机红外画框修改,无人机画框配置

master
hsc 6 months ago
parent
commit
4a001b9dec
9 changed files with 159 additions and 19 deletions
  1. +5
    -2
      src/main/java/com/inspect/simulator/controller/InfraredController.java
  2. +2
    -0
      src/main/java/com/inspect/simulator/mapper/PatrolPresetPosMapper.java
  3. +3
    -0
      src/main/java/com/inspect/simulator/mapper/ResultAnalysisMapper.java
  4. +6
    -0
      src/main/java/com/inspect/simulator/service/PatrolPresetPosService.java
  5. +81
    -15
      src/main/java/com/inspect/simulator/service/impl/HikVisionServiceImpl.java
  6. +29
    -0
      src/main/java/com/inspect/simulator/service/impl/PatrolPresetPosServiceImpl.java
  7. +8
    -1
      src/main/java/com/inspect/simulator/service/impl/ResultAnnalysisServiceImpl.java
  8. +3
    -1
      src/main/resources/mapper/PatrolPresetPosMapper.xml
  9. +22
    -0
      src/main/resources/mapper/ResultAnalysisMapper.xml

+ 5
- 2
src/main/java/com/inspect/simulator/controller/InfraredController.java View File

@ -1,6 +1,7 @@
package com.inspect.simulator.controller;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.A;
import com.inspect.simulator.domain.Infrared.*;
import com.inspect.simulator.hikVision.utils.StringUtils;
import com.inspect.simulator.service.HikVisionService;
@ -152,8 +153,10 @@ public class InfraredController {
return response;
}
@PostMapping("/ir/channelImg")
public String getChannelImg(@RequestParam("patrolPointId") String patrolPointId) {
return resultAnnalysisService.selectChannelImgByPatrolPointId(patrolPointId);
@ResponseBody
public AjaxResult getChannelImg(@RequestBody InfraPictureInfo infraPictureInfo) {
String string = resultAnnalysisService.selectChannelImgByPatrolPointId(String.valueOf(infraPictureInfo.getPatrolPointId()));
return AjaxResult.success().put("data", string);
}
}

+ 2
- 0
src/main/java/com/inspect/simulator/mapper/PatrolPresetPosMapper.java View File

@ -9,4 +9,6 @@ import java.util.List;
public interface PatrolPresetPosMapper {
List<PatrolPresetPos> selectPatrolPresetPosByPatrolPointId(String patrolPointId);
String selectChannelImgByPatrolPointId(Integer patrolPointId);
}

+ 3
- 0
src/main/java/com/inspect/simulator/mapper/ResultAnalysisMapper.java View File

@ -3,6 +3,9 @@ package com.inspect.simulator.mapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ResultAnalysisMapper {
String selectChannelImgByPatrolPointCode(String patrolPointId);
String selectChannelImgByPatrolPointId(String patrolPointId);
String selectImgByPatrolPointId(String patrolPointId);
}

+ 6
- 0
src/main/java/com/inspect/simulator/service/PatrolPresetPosService.java View File

@ -0,0 +1,6 @@
package com.inspect.simulator.service;
public interface PatrolPresetPosService {
String selectChannelImgByPatrolPointId(Integer patrolPointId);
}

+ 81
- 15
src/main/java/com/inspect/simulator/service/impl/HikVisionServiceImpl.java View File

@ -28,6 +28,9 @@ import com.inspect.simulator.tempCount.TempCount;
import com.inspect.simulator.utils.sftp.SftpClient;
import okhttp3.*;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPSClient;
@ -42,6 +45,8 @@ import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.charset.StandardCharsets;
@ -70,7 +75,8 @@ public class HikVisionServiceImpl implements HikVisionService {
private String picPath;
// @Value("${file.hrUavUrl:test}")
private String hrUavUrl = "http://192.168.4.167:2000/";
// private String hrUavUrl = "http://192.168.4.167:2000/";
private String hrUavUrl = "http://192.168.4.160:2000/";
// @Value("${file.hrFtpUrl:test}")
private String hrFtpUrl = "ftp://ftpuser:atia2018@192.168.4.129:10012/";
@ -675,7 +681,7 @@ public class HikVisionServiceImpl implements HikVisionService {
if (c.getFirstX() != null && c.getFirstY() != null && c.getSecondX() == null && c.getSecondY() == null) {
g2d.setFont(font);
// 标注点坐标
g2d.setColor(Color.GREEN);
g2d.setColor(Color.WHITE);
int x = c.getFirstX();
int y = c.getFirstY();
@ -694,7 +700,7 @@ public class HikVisionServiceImpl implements HikVisionService {
//矩阵标注
if (c.getSecondX() != null && c.getSecondY() != null) {
// 标注矩形每两个点确定一个矩形
g2d.setColor(Color.GREEN);
g2d.setColor(Color.WHITE);
int x1 = c.getFirstX();
int y1 = c.getFirstY();
int x2 = c.getSecondX();
@ -842,7 +848,7 @@ public class HikVisionServiceImpl implements HikVisionService {
.writeTimeout(5, TimeUnit.SECONDS) // 写入超时5秒
.retryOnConnectionFailure(false) // 禁用自动重试
.build();
log.info("UploadFtpImage, client: {}", client);
float[][] floats = new float[0][];
try {
// 构建 multipart 请求体
@ -866,7 +872,7 @@ public class HikVisionServiceImpl implements HikVisionService {
// 执行请求并处理响应
try (Response response = client.newCall(request).execute()) {
log.info("UploadFtpImage, response: {}", response);
if (!response.isSuccessful() && response.code() != 4006) {
throw new IOException("请求失败,HTTP状态码: " + response.code());
}
@ -887,7 +893,8 @@ public class HikVisionServiceImpl implements HikVisionService {
}
JsonNode firstItem = jsonArray.get(0);
String imageRawFlow = firstItem.get("image_raw_flow").asText();
floats = parseCsvFromFtp(imageRawFlow);
log.info("imageRawFlow" + imageRawFlow);
floats = parseCsvFromFtp2(imageRawFlow);
}
} catch (Exception e) {
@ -969,9 +976,66 @@ public class HikVisionServiceImpl implements HikVisionService {
}
}
//从ftp获取csv流转换成二维数组
private float[][] parseCsvFromFtp2(String csvUrl) throws IOException, URISyntaxException {
log.info("连接ftp,获取csv文件");
InputStream inputStream = null;
FTPSClient ftps = null;
CSVParser csvParser = null;
try {
ftps = new FTPSClient(true);
ftps.connect(ftpUrlAddress, ftpUrlPort);
boolean loginRes = ftps.login(ftpUrlAccount, ftpUrlPwd);
if (loginRes) {
log.info("[FTP] LOGIN SUCCESS: {}", ftpUrlAddress);
}
ftps.setFileType(2);
ftps.enterLocalPassiveMode();
ftps.setControlEncoding("UTF-8");
ftps.setFileTransferMode(10);
ftps.execPROT("P");
//
URI uri = new URI(csvUrl);
String filePath = uri.getPath();
log.info("[FTP] DOWNLOAD: {}", filePath);
inputStream = ftps.retrieveFileStream(filePath);
if (inputStream == null) {
log.error("[FTP] DOWNLOAD FAIL, EMPTY STREAM: {}", filePath);
}
Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
csvParser = CSVFormat.DEFAULT.parse(reader);
List<CSVRecord> records = csvParser.getRecords();
// 7. 转换为 float[][]
float[][] result = new float[records.size()][];
for (int i = 0; i < records.size(); i++) {
CSVRecord record = records.get(i);
result[i] = new float[record.size()];
for (int j = 0; j < record.size(); j++) {
result[i][j] = Float.parseFloat(record.get(j));
}
}
return result;
} finally {
// 8. 确保资源关闭
IOUtils.closeQuietly(csvParser);
IOUtils.closeQuietly(inputStream);
if (ftps != null && ftps.isConnected()) {
try {
ftps.logout();
ftps.disconnect();
} catch (IOException e) {
log.error("FTP 断开连接失败", e);
}
}
}
}
//上传图片到ftp
public void picFtp(String newPath, InputStream originalPath, String ftpUrlAddress, Integer ftpUrlPort, String ftpUrlAccount, String ftpUrlPwd) {
public void picFtp(String newPath, InputStream originalPath, String ftpUrlAddress, Integer ftpUrlPort, String
ftpUrlAccount, String ftpUrlPwd) {
FTPSClient ftps = null;
try {
ftps = new FTPSClient(true);
@ -988,7 +1052,7 @@ public class HikVisionServiceImpl implements HikVisionService {
System.err.println("上传失败!FTP 返回: " + ftps.getReplyString());
}
} catch (Exception e) {
e.printStackTrace();
log.error("error" + e);
} finally {
// 5. 关闭资源
try {
@ -998,13 +1062,14 @@ public class HikVisionServiceImpl implements HikVisionService {
ftps.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
log.error("error" + e);
}
}
}
//华软上传图片到ftp
public boolean pic2Ftp(String newPath, InputStream originalPath, String ftpUrlAddress, Integer ftpUrlPort, String ftpUrlAccount, String ftpUrlPwd) {
public boolean pic2Ftp(String newPath, InputStream originalPath, String ftpUrlAddress, Integer
ftpUrlPort, String ftpUrlAccount, String ftpUrlPwd) {
FTPClient ftps = new FTPClient();
ftps.setConnectTimeout(2000); // 连接超时3秒
ftps.setDataTimeout(2000); // 数据传输超时3秒
@ -1041,7 +1106,7 @@ public class HikVisionServiceImpl implements HikVisionService {
// ftps.disconnect();
// }
} catch (IOException e) {
// e.printStackTrace();
log.error("error" + e);
return false;
}
}
@ -1068,6 +1133,7 @@ public class HikVisionServiceImpl implements HikVisionService {
}
} catch (Exception e) {
log.error("error" + e);
}
return inputStream;
}
@ -1237,7 +1303,7 @@ public class HikVisionServiceImpl implements HikVisionService {
infraredInfo.setOutPath(s);
} catch (IOException e) {
e.printStackTrace();
log.error("error" + e);
}
} else if (AlgConstants.INFRA_CAMERA_REVERSE.equals(imageType)) {
@ -1288,7 +1354,7 @@ public class HikVisionServiceImpl implements HikVisionService {
imageTem = exceptionHandling();
infraredInfo.setTemperatureMatrix(imageTem);
} catch (IOException e) {
e.printStackTrace();
log.error("error" + e);
log.error("温度解析错误,接口无法调用!");
}
}
@ -1300,7 +1366,7 @@ public class HikVisionServiceImpl implements HikVisionService {
imageTem = exceptionHandling();
infraredInfo.setTemperatureMatrix(imageTem);
} catch (IOException e) {
e.printStackTrace();
log.error("error" + e);
log.error("温度解析错误,ftp无法登陆!" + e);
}
String s = ImageOverlays(infraPictureInfo, infraredInfo);
@ -1308,7 +1374,7 @@ public class HikVisionServiceImpl implements HikVisionService {
}
} else {
String imageName = Paths.get(imagePath).getFileName().toString();
String ftpUrlName = "[\"ftp://" + ftpUrlAccount + ":" + ftpUrlPwd + "@" + ftpUrlAddress + ":" + ftpUrlPort + imagePath + "\"]";
String ftpUrlName = "[\"ftp://" + ftpUrlAccount + ":" + ftpUrlPwd + "@" + ftpUrlAddress + ":" + ftpUrlPort + imagePath + "\"]";
float[][] floats = new float[0][];
floats = UploadFtpImage(hrUavUrl, null, ftpUrlName);
if (floats != null && floats.length > 0 && floats[0].length > 0) {


+ 29
- 0
src/main/java/com/inspect/simulator/service/impl/PatrolPresetPosServiceImpl.java View File

@ -0,0 +1,29 @@
package com.inspect.simulator.service.impl;
import com.inspect.simulator.mapper.BasedataPatrolPointMapper;
import com.inspect.simulator.mapper.PatrolPresetPosMapper;
import com.inspect.simulator.service.PatrolPresetPosService;
import com.inspect.simulator.utils.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class PatrolPresetPosServiceImpl implements PatrolPresetPosService {
@Resource
private PatrolPresetPosMapper patrolPresetPosMapper;
@Override
public String selectChannelImgByPatrolPointId(Integer patrolPointId) {
String img = patrolPresetPosMapper.selectChannelImgByPatrolPointId(patrolPointId);
if (StringUtils.isNotEmpty(img)){
return "/"+img;
}else {
return "不存在"+patrolPointId+"对应的图!";
}
}
}

+ 8
- 1
src/main/java/com/inspect/simulator/service/impl/ResultAnnalysisServiceImpl.java View File

@ -19,7 +19,14 @@ public class ResultAnnalysisServiceImpl implements ResultAnalysisService {
@Override
public String selectChannelImgByPatrolPointId(String patrolPointId) {
String resImageUrl=null;
String jsonStr = resultAnalysisMapper.selectChannelImgByPatrolPointId(patrolPointId);
String jsonStr=null;
String pointCode = resultAnalysisMapper.selectChannelImgByPatrolPointCode(patrolPointId);
int index = pointCode.indexOf("|");
String pointId = pointCode.substring(index + 1);
jsonStr = resultAnalysisMapper.selectChannelImgByPatrolPointId(pointId);
if (jsonStr==null){
jsonStr=resultAnalysisMapper.selectImgByPatrolPointId(patrolPointId);
}
resImageUrl = extractResImageUrl(jsonStr, patrolPointId);
if (resImageUrl==null){
try {


+ 3
- 1
src/main/resources/mapper/PatrolPresetPosMapper.xml View File

@ -92,6 +92,8 @@
left join basedata_eqpbook_channel c on c.channel_id = a.channel_id
where a.patrol_point_id = #{patrolPointId}
</select>
<select id="selectChannelImgByPatrolPointId" parameterType="integer" resultType="string">
select channel_img from patrol_preset_pos where patrol_point_id = #{patrolPointId}
</select>
</mapper>

+ 22
- 0
src/main/resources/mapper/ResultAnalysisMapper.xml View File

@ -4,8 +4,30 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.inspect.simulator.mapper.ResultAnalysisMapper">
<select id="selectChannelImgByPatrolPointCode" parameterType="string" resultType="string">
SELECT
patrol_point_code
FROM
basedata_patrolpoint
WHERE patrol_point_id =#{patrolPointId}
</select>
<select id="selectChannelImgByPatrolPointId" parameterType="string" resultType="string">
select result_content from result_analysis
where objectId = #{patrolPointId} order by line_id limit 1;
</select>
<select id="selectImgByPatrolPointId" parameterType="string" resultType="string">
SELECT
a.result_content
FROM
basedata_patrolpoint as b
left JOIN
result_analysis as a ON a.objectId = b.patrol_point_id
WHERE
b.patrol_point_code LIKE CONCAT('%', #{patrolPointId})
ORDER BY
a.line_id
LIMIT 1;
</select>
</mapper>

Loading…
Cancel
Save