Browse Source

add:视频巡检,大模型识别,增加异常处理

zhongwei
luyie 3 months ago
parent
commit
5379eb2945
  1. 74
      hzims-biz-common/src/main/java/com/hnac/hzims/common/utils/FileUtil.java
  2. 7
      hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/service/impl/ZhipuAnalysisServiceImpl.java
  3. 61
      hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/schedule/VideoTaskSchedule.java

74
hzims-biz-common/src/main/java/com/hnac/hzims/common/utils/FileUtil.java

@ -6,7 +6,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.*; import java.io.*;
import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.util.Base64; import java.util.Base64;
@ -17,7 +16,7 @@ import java.util.Base64;
*/ */
@Slf4j @Slf4j
public class FileUtil { public class FileUtil {
public static byte[] getFileBytes(String filePath) { public static byte[] getFileBytes(String filePath) throws IOException {
File file = new File(filePath); File file = new File(filePath);
FileInputStream fileInputStream = null; FileInputStream fileInputStream = null;
byte[] bytes = null; byte[] bytes = null;
@ -25,21 +24,15 @@ public class FileUtil {
fileInputStream = new FileInputStream(file); fileInputStream = new FileInputStream(file);
bytes = new byte[(int) file.length()]; bytes = new byte[(int) file.length()];
fileInputStream.read(bytes); fileInputStream.read(bytes);
return bytes;
} catch (Exception e) {
log.error("读取文件出错", e);
} finally { } finally {
if (null != fileInputStream) { if (null != fileInputStream) {
try { fileInputStream.close();
fileInputStream.close();
} catch (IOException ignore) {
}
} }
} }
return bytes; return bytes;
} }
public static byte[] getUrlByte(URL url) { public static byte[] getUrlByte(URL url) throws IOException {
InputStream inputStream = null; InputStream inputStream = null;
ByteArrayOutputStream outputStream = null; ByteArrayOutputStream outputStream = null;
byte[] fileBytes = null; byte[] fileBytes = null;
@ -52,30 +45,19 @@ public class FileUtil {
outputStream.write(buffer, 0, bytesRead); outputStream.write(buffer, 0, bytesRead);
} }
fileBytes = outputStream.toByteArray(); fileBytes = outputStream.toByteArray();
} catch (Exception e) {
log.error("获取url文件失败", e);
} finally { } finally {
try { if (null != inputStream) {
if (null != inputStream) { inputStream.close();
inputStream.close(); }
} if (null != outputStream) {
if (null != outputStream) { outputStream.close();
outputStream.close();
}
} catch (Exception ignore) {
} }
} }
return fileBytes; return fileBytes;
} }
public static byte[] getUrlByte(String urlString) { public static byte[] getUrlByte(String urlString) throws IOException {
try { return getUrlByte(new URL(urlString));
return getUrlByte(new URL(urlString));
} catch (MalformedURLException e) {
log.error("获取url文件失败", e);
}
return null;
} }
public static String getContentTypeFromUrl(String url) { public static String getContentTypeFromUrl(String url) {
@ -113,16 +95,12 @@ public class FileUtil {
return result; return result;
} }
public static String getPureUrl(String url) { public static String getPureUrl(String url) throws UnsupportedEncodingException {
String result = removeUrlParam(url); String result = removeUrlParam(url);
try { result = URLDecoder.decode(result, "utf-8");
result = URLDecoder.decode(result, "utf-8"); int index = result.lastIndexOf("http");
int index = result.lastIndexOf("http"); if (index > 0) {
if (index > 0) { result = result.substring(index);
result = result.substring(index);
}
} catch (UnsupportedEncodingException e) {
log.error("解码url失败");
} }
return result; return result;
} }
@ -144,23 +122,19 @@ public class FileUtil {
return url; return url;
} }
public static MultipartFile getMultipartFileFromUrl(String urlStr) { public static MultipartFile getMultipartFileFromUrl(String urlStr) throws IOException {
String pureUrl = getPureUrl(urlStr); String pureUrl = getPureUrl(urlStr);
return getMultipartFileFromPureUrl(pureUrl); return getMultipartFileFromPureUrl(pureUrl);
} }
public static MultipartFile getMultipartFileFromPureUrl(String pureUrlStr) { public static MultipartFile getMultipartFileFromPureUrl(String pureUrlStr) throws IOException {
MultipartFile result = null; MultipartFile result = null;
try { URL url = new URL(pureUrlStr);
URL url = new URL(pureUrlStr); byte[] bytes = getUrlByte(url);
byte[] bytes = getUrlByte(url); String name = url.getPath();
String name = url.getPath(); String originalName = getOriginalFilename(name);
String originalName = getOriginalFilename(name); String contentType = getContentTypeFromUrl(originalName);
String contentType = getContentTypeFromUrl(originalName); result = new ByteArrayMultipartFile(name, originalName, contentType, bytes);
result = new ByteArrayMultipartFile(name, originalName, contentType, bytes);
} catch (Exception e) {
log.error("获取url文件失败", e);
}
return result; return result;
} }
@ -168,7 +142,7 @@ public class FileUtil {
return Base64.getEncoder().encodeToString(bytes); return Base64.getEncoder().encodeToString(bytes);
} }
public static String getBase64(String filePath) { public static String getBase64(String filePath) throws IOException {
return getBase64(getFileBytes(filePath)); return getBase64(getFileBytes(filePath));
} }

7
hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/service/impl/ZhipuAnalysisServiceImpl.java

@ -25,6 +25,7 @@ import org.springblade.core.tool.utils.StringUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import java.io.IOException;
import java.util.*; import java.util.*;
/** /**
@ -100,7 +101,11 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService {
return request.getUrl(); return request.getUrl();
} }
if (StringUtil.isNotBlank(request.getFilePath())) { if (StringUtil.isNotBlank(request.getFilePath())) {
return FileUtil.getBase64(request.getFilePath()); try {
return FileUtil.getBase64(request.getFilePath());
} catch (IOException e) {
throw new HzServiceException("获取文件内容失败");
}
} }
return null; return null;
} }

61
hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/schedule/VideoTaskSchedule.java

@ -11,6 +11,7 @@ import com.hnac.hzims.bigmodel.api.feign.IBigModelAnalysisClient;
import com.hnac.hzims.common.utils.FileUtil; import com.hnac.hzims.common.utils.FileUtil;
import com.hnac.hzinfo.datasearch.soe.ISoeClient; import com.hnac.hzinfo.datasearch.soe.ISoeClient;
import com.hnac.hzinfo.datasearch.soe.vo.DeviceSoeVO; import com.hnac.hzinfo.datasearch.soe.vo.DeviceSoeVO;
import com.hnac.hzinfo.exception.HzServiceException;
import com.hnac.hzinfo.inspect.ai.entity.CameraInfoEntity; import com.hnac.hzinfo.inspect.ai.entity.CameraInfoEntity;
import com.hnac.hzinfo.inspect.ai.entity.RobotTaskEntity; import com.hnac.hzinfo.inspect.ai.entity.RobotTaskEntity;
import com.hnac.hzinfo.inspect.ai.service.ICameraInfoService; import com.hnac.hzinfo.inspect.ai.service.ICameraInfoService;
@ -54,6 +55,7 @@ import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@ -241,7 +243,14 @@ public class VideoTaskSchedule {
} }
private void pictureHandle(String url, Long contentId, EventRecordEntity record, TaskEntity task) { private void pictureHandle(String url, Long contentId, EventRecordEntity record, TaskEntity task) {
MultipartFile multipartFile = FileUtil.getMultipartFileFromUrl(url);
MultipartFile multipartFile = null;
try {
multipartFile = FileUtil.getMultipartFileFromUrl(url);
} catch (IOException e) {
log.error("获取截图文件失败", e);
throw new HzServiceException("获取截图文件失败");
}
R<BladeFile> fileResponse = ossClient.putFile(multipartFile); R<BladeFile> fileResponse = ossClient.putFile(multipartFile);
if (fileResponse.isSuccess()) { if (fileResponse.isSuccess()) {
record.setFileUrl(Optional.ofNullable(fileResponse.getData().getLink()).orElse(record.getFileUrl())); record.setFileUrl(Optional.ofNullable(fileResponse.getData().getLink()).orElse(record.getFileUrl()));
@ -252,33 +261,35 @@ public class VideoTaskSchedule {
return; return;
} }
String[] typeArray = content.getMultiCheckTypeSon().split(",");
List<String> checkTypeSonList = Arrays.asList(typeArray);
String text = null;
try { try {
String[] typeArray = content.getMultiCheckTypeSon().split(","); text = FileUtil.getBase64(multipartFile.getBytes());
List<String> checkTypeSonList = Arrays.asList(typeArray); } catch (IOException e) {
String text = FileUtil.getBase64(multipartFile.getBytes()); log.error("转换截图文件内容失败", e);
BigModelAnalysisRequestDTO analysisRequest = new BigModelAnalysisRequestDTO(); throw new HzServiceException("转换截图文件内容失败");
analysisRequest.setCheckTypeSonList(checkTypeSonList); }
analysisRequest.setUrl(text); BigModelAnalysisRequestDTO analysisRequest = new BigModelAnalysisRequestDTO();
BigModelAnalysisResponseDTO analysisResponse = bigModelClient.analysis(analysisRequest); analysisRequest.setCheckTypeSonList(checkTypeSonList);
if (!analysisResponse.getSuccess() || CollectionUtil.isEmpty(analysisResponse.getData())) { analysisRequest.setUrl(text);
return; BigModelAnalysisResponseDTO analysisResponse = bigModelClient.analysis(analysisRequest);
} if (!analysisResponse.getSuccess() || CollectionUtil.isEmpty(analysisResponse.getData())) {
List<BigModelAnalysisResponseDTO.BigModelAnalysisResult> results = analysisResponse.getData(); throw new HzServiceException("大模型识别失败");
StringBuilder stringBuilder = new StringBuilder(); }
Boolean status = Boolean.TRUE; List<BigModelAnalysisResponseDTO.BigModelAnalysisResult> results = analysisResponse.getData();
for (BigModelAnalysisResponseDTO.BigModelAnalysisResult result : results) { StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(result.getDescription()).append("\n"); Boolean status = Boolean.TRUE;
Boolean isGood = (Boolean) result.getResult(); for (BigModelAnalysisResponseDTO.BigModelAnalysisResult result : results) {
status = status && isGood; stringBuilder.append(result.getDescription()).append("\n");
if (!isGood) { Boolean isGood = (Boolean) result.getResult();
sendMessage(result.getMessage(), task, content); status = status && isGood;
} if (!isGood) {
sendMessage(result.getMessage(), task, content);
} }
record.setCurrentStatus(status ? "1" : "0");
record.setCurrentValue(stringBuilder.toString());
} catch (Exception e) {
log.error("video task get big model analysis result fail", e);
} }
record.setCurrentStatus(status ? "1" : "0");
record.setCurrentValue(stringBuilder.toString());
} }
private void sendMessage(String messageText, TaskEntity task, ContentEntity content) { private void sendMessage(String messageText, TaskEntity task, ContentEntity content) {

Loading…
Cancel
Save