SceneMarkShapeController.java 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. package com.fdkankan.scene.controller;
  2. import cn.hutool.core.io.FileUtil;
  3. import cn.hutool.core.util.ObjectUtil;
  4. import com.fdkankan.fyun.face.FYunFileServiceInterface;
  5. import com.fdkankan.model.constants.UploadFilePath;
  6. import com.fdkankan.rabbitmq.util.RabbitMqProducer;
  7. import com.fdkankan.scene.entity.SceneMarkShape;
  8. import com.fdkankan.scene.entity.ScenePlus;
  9. import com.fdkankan.scene.entity.ScenePlusExt;
  10. import com.fdkankan.scene.service.ISceneMarkShapeService;
  11. import com.fdkankan.scene.service.IScenePlusExtService;
  12. import com.fdkankan.scene.service.IScenePlusService;
  13. import com.fdkankan.scene.vo.SceneMarkShapeDetectParamVO;
  14. import com.fdkankan.scene.vo.SceneMarkShapeParamVO;
  15. import com.fdkankan.scene.vo.SceneMarkShapeReDetectParamVO;
  16. import com.fdkankan.web.controller.BaseController;
  17. import com.fdkankan.web.response.ResultData;
  18. import lombok.extern.slf4j.Slf4j;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.beans.factory.annotation.Value;
  21. import org.springframework.validation.annotation.Validated;
  22. import org.springframework.web.bind.annotation.*;
  23. import org.springframework.web.multipart.MultipartFile;
  24. import javax.annotation.Resource;
  25. import java.io.IOException;
  26. import java.util.*;
  27. import java.util.stream.Collectors;
  28. /**
  29. * 初始化接口
  30. *
  31. * @author fdkk
  32. */
  33. @RestController
  34. @RequestMapping("/service/scene/sceneMarkShape")
  35. @Slf4j
  36. public class SceneMarkShapeController extends BaseController
  37. {
  38. @Value("${queue.scene.yolov5-detect-queue:#{null}}")
  39. private String yolov5DetectQueue;
  40. @Autowired
  41. private ISceneMarkShapeService sceneMarkShapeService;
  42. @Resource
  43. private FYunFileServiceInterface fYunFileService;
  44. @Autowired
  45. private IScenePlusService scenePlusService;
  46. @Autowired
  47. private IScenePlusExtService scenePlusExtService;
  48. @Value("${fyun.host}")
  49. private String ossUrlPrefix;
  50. @Autowired
  51. private RabbitMqProducer rabbitMqProducer;
  52. @Value("${main.url}")
  53. private String mainUrl;
  54. /**
  55. * 获取场景全景图路径连接
  56. */
  57. @PostMapping("/getPanorama")
  58. public ResultData getPanorama(@RequestBody @Validated SceneMarkShapeParamVO param) {
  59. ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
  60. if(ObjectUtil.isNotNull(scenePlus)) {
  61. ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
  62. if (ObjectUtil.isNotNull(scenePlus)) {
  63. String publicUserPath = String.format(UploadFilePath.scene_result_data_path, param.getNum());
  64. List<String> panoramaList = fYunFileService.listRemoteFiles(scenePlusExt.getYunFileBucket(), publicUserPath + "caches/images/");
  65. List<String> panoramaListUrl = panoramaList.stream().filter(f -> FileUtil.extName(f).equals("jpg")).map(s -> ossUrlPrefix + s).collect(Collectors.toList());
  66. return ResultData.ok(panoramaListUrl);
  67. }
  68. }
  69. return ResultData.ok("场景数据不存在");
  70. }
  71. /**
  72. * 根据场景码和图片名称获取数据
  73. */
  74. @PostMapping("/getInfo")
  75. public ResultData getInfo(@RequestBody @Validated SceneMarkShapeParamVO param) {
  76. SceneMarkShape res= sceneMarkShapeService.findByNumAndImagePath(param.getNum(),param.getImagePath());
  77. return ResultData.ok(res);
  78. }
  79. /**
  80. * 将需要推理的场景推入到队列
  81. */
  82. @PostMapping("/detectScene")
  83. public ResultData detect(@RequestBody @Validated SceneMarkShapeDetectParamVO param) {
  84. param.setWebSite(mainUrl);
  85. rabbitMqProducer.sendByWorkQueue(yolov5DetectQueue, param);
  86. return ResultData.ok();
  87. }
  88. /**
  89. * 将需要训练的场景推入到队列
  90. */
  91. @PostMapping("/trainScene")
  92. public ResultData trainScene(@RequestBody @Validated SceneMarkShapeReDetectParamVO param) {
  93. sceneMarkShapeService.trainScene(param);
  94. return ResultData.ok();
  95. }
  96. /**
  97. * 将需要重新推理的场景推入到队列
  98. */
  99. @PostMapping("/editReDetectStatus")
  100. public ResultData editReDetectStatus(@RequestBody @Validated SceneMarkShapeParamVO param) {
  101. sceneMarkShapeService.editTrainStatus(param);
  102. return ResultData.ok();
  103. }
  104. /**
  105. * 保存或者修改
  106. */
  107. @PostMapping("/saveOrEdit")
  108. public ResultData save(@RequestParam(value = "num") String num,@RequestParam("file") MultipartFile file) throws IOException {
  109. sceneMarkShapeService.saveFileToDB(file,num);
  110. return ResultData.ok();
  111. }
  112. /**
  113. * 保存或者修改JSON
  114. */
  115. @PostMapping("/saveOrEditJson")
  116. public ResultData saveOrEditJson(@RequestBody SceneMarkShape param) {
  117. SceneMarkShape shape = sceneMarkShapeService.findByNumAndImagePath(param.getNum(), param.getImagePath());
  118. if (ObjectUtil.isNotNull(shape)){
  119. param.setId(shape.getId());
  120. param.setUpdateTime(new Date());
  121. return ResultData.ok(sceneMarkShapeService.updateById(param));
  122. }else {
  123. param.setCreateTime(new Date());
  124. return ResultData.ok(sceneMarkShapeService.save(param));
  125. }
  126. }
  127. /**
  128. * 保存或者修改JSON
  129. */
  130. @PostMapping("/editLabel")
  131. public ResultData editLabel(@RequestParam(value = "num") String num,@RequestParam(value = "imgPath") String imgPath,@RequestParam("file") MultipartFile file) throws IOException {
  132. log.info("进入editLabel---num{},imgPath{}",num,imgPath);
  133. return sceneMarkShapeService.editLabelByFile(num, imgPath, file);
  134. }
  135. /**
  136. * 保存或者修改JSON
  137. */
  138. @PostMapping("/testquery")
  139. public ResultData testquery() {
  140. Map<String, List<SceneMarkShape>> res=new HashMap<>();
  141. res.put("findByReTrainStatus",sceneMarkShapeService.findByReTrainStatus(1));
  142. res.put("findByToTrainStatus",sceneMarkShapeService.findByToTrainStatus(0));
  143. return ResultData.ok(res);
  144. }
  145. }