|
|
@@ -3,6 +3,7 @@ package com.inspur.service.partywork.impl;
|
|
|
import cn.hutool.http.HttpRequest;
|
|
|
import cn.hutool.http.HttpResponse;
|
|
|
import cn.hutool.http.HttpStatus;
|
|
|
+import com.alibaba.fastjson2.JSON;
|
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.google.zxing.BarcodeFormat;
|
|
|
import com.google.zxing.WriterException;
|
|
|
@@ -23,10 +24,7 @@ import com.inspur.domain.partyscreen.PartyMenu;
|
|
|
import com.inspur.domain.partywork.*;
|
|
|
import com.inspur.domain.screen.MenuDataReqVo;
|
|
|
import com.inspur.face.common.FaceConstant;
|
|
|
-import com.inspur.face.domain.PartyFaceRecognition;
|
|
|
-import com.inspur.face.domain.RecognizeFaceRsp;
|
|
|
-import com.inspur.face.domain.RecognizeFaceRspResult;
|
|
|
-import com.inspur.face.domain.RecognizeFaceRspResultSubject;
|
|
|
+import com.inspur.face.domain.*;
|
|
|
import com.inspur.face.mapper.PartyFaceRecognitionMapper;
|
|
|
import com.inspur.face.service.impl.CompreFaceServiceImpl;
|
|
|
import com.inspur.framework.config.ServerConfig;
|
|
|
@@ -61,6 +59,9 @@ import org.springframework.util.CollectionUtils;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
import org.springframework.web.multipart.commons.CommonsMultipartFile;
|
|
|
|
|
|
+import javax.imageio.ImageIO;
|
|
|
+import java.awt.*;
|
|
|
+import java.awt.image.BufferedImage;
|
|
|
import java.io.File;
|
|
|
import java.io.FileOutputStream;
|
|
|
import java.io.IOException;
|
|
|
@@ -69,6 +70,7 @@ import java.math.BigDecimal;
|
|
|
import java.nio.file.FileSystems;
|
|
|
import java.nio.file.Path;
|
|
|
import java.util.*;
|
|
|
+import java.util.List;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
import static com.inspur.common.utils.PageUtils.startPage;
|
|
|
@@ -1125,6 +1127,7 @@ public class PartyMeetingInfoServiceImpl implements IPartyMeetingInfoService
|
|
|
opStatus = 2;
|
|
|
log.info("recognizeFace error,file:{},rspMsg:{}",fileMap.get("url"),rspMsg);
|
|
|
}
|
|
|
+ this.box(reqParam.toJSONString(),rspMsg);
|
|
|
}catch (Exception e) {
|
|
|
opStatus = 2;
|
|
|
rspMsg = e.getMessage();
|
|
|
@@ -1175,4 +1178,58 @@ public class PartyMeetingInfoServiceImpl implements IPartyMeetingInfoService
|
|
|
return userTableId;
|
|
|
}
|
|
|
|
|
|
+ private String box(String reqParam, String rspMsg) throws IOException {
|
|
|
+ // PartyFaceRecognition partyFaceRecognition = partyFaceRecognitionMapper.selectPartyFaceRecognitionById(id);
|
|
|
+ try {
|
|
|
+ JSONObject reqParamJson = JSON.parseObject(reqParam);
|
|
|
+ String sourceFilePath = reqParamJson.getString("filePath");
|
|
|
+ RecognizeFaceRsp result = JSON.parseObject(rspMsg, RecognizeFaceRsp.class);
|
|
|
+ List<RecognizeFaceRspResult> faceRspList = result.getResult();
|
|
|
+ // 加载原始图片
|
|
|
+ BufferedImage originalImage = ImageIO.read(new File(sourceFilePath));
|
|
|
+ // 创建一个和原始图片同样大小的BufferedImage用于绘图
|
|
|
+ BufferedImage resultImage = new BufferedImage(originalImage.getWidth(), originalImage.getHeight(), originalImage.getType());
|
|
|
+ Graphics2D g2d = resultImage.createGraphics();
|
|
|
+ // 将原始图片绘制到结果图片上(如果需要保留原图内容)
|
|
|
+ g2d.drawImage(originalImage, 0, 0, null);
|
|
|
+ // 绘制人脸框
|
|
|
+ for (RecognizeFaceRspResult faceRsp : faceRspList) {
|
|
|
+ RecognizeFaceRspResultBox box = faceRsp.getBox();
|
|
|
+ // 设置线条颜色为红色
|
|
|
+ g2d.setColor(Color.RED);
|
|
|
+ // 设置线条粗细
|
|
|
+ g2d.setStroke(new java.awt.BasicStroke(1));
|
|
|
+ // 横向
|
|
|
+ g2d.drawLine(box.getX_min(), box.getY_min(), box.getX_max(), box.getY_min());
|
|
|
+ g2d.drawLine(box.getX_min(), box.getY_max(), box.getX_max(), box.getY_max());
|
|
|
+ // 竖向
|
|
|
+ g2d.drawLine(box.getX_min(), box.getY_min(), box.getX_min(), box.getY_max());
|
|
|
+ g2d.drawLine(box.getX_max(), box.getY_min(), box.getX_max(), box.getY_max());
|
|
|
+ RecognizeFaceRspResultSubject subject = faceRsp.getSubjects().get(0);
|
|
|
+ BigDecimal similarity = subject.getSimilarity();
|
|
|
+ String subjectName = "";
|
|
|
+ if (similarity.compareTo(new BigDecimal(0.95)) < 0) {
|
|
|
+ subjectName = "未识别";
|
|
|
+ } else {
|
|
|
+ subjectName = subject.getSubject().split("_")[1] + ":" + similarity;
|
|
|
+ }
|
|
|
+ // 设置字体颜色为红色
|
|
|
+ g2d.setColor(Color.RED);
|
|
|
+ // 设置字体大小
|
|
|
+ g2d.setFont(new Font("宋体", Font.BOLD, 20));
|
|
|
+ g2d.drawString(subjectName, box.getX_min(), box.getY_min());
|
|
|
+ }
|
|
|
+ // 保存图片
|
|
|
+ String outputFilePath = sourceFilePath + ".1.png";
|
|
|
+ File outputFile = new File(outputFilePath);
|
|
|
+ ImageIO.write(resultImage, "png", outputFile);
|
|
|
+ // 释放资源(在实际应用中,你可能需要更仔细地管理这些资源)
|
|
|
+ g2d.dispose();
|
|
|
+ return outputFilePath;
|
|
|
+ }catch (Exception e) {
|
|
|
+ log.info("draw box have exception: {}", e.getMessage());
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|