浏览代码

增加修改标注接口

xiewj 2 年之前
父节点
当前提交
e16b4244f1

+ 27 - 12
src/main/java/com/fdkankan/scene/controller/SceneMarkShapeController.java

@@ -1,14 +1,8 @@
 package com.fdkankan.scene.controller;
 
 import cn.hutool.core.io.FileUtil;
-import cn.hutool.core.lang.UUID;
 import cn.hutool.core.util.ObjectUtil;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.common.constant.CommonOperStatus;
-import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
-import com.fdkankan.model.constants.ConstantFilePath;
 import com.fdkankan.model.constants.UploadFilePath;
 import com.fdkankan.rabbitmq.util.RabbitMqProducer;
 import com.fdkankan.scene.entity.SceneMarkShape;
@@ -17,12 +11,10 @@ import com.fdkankan.scene.entity.ScenePlusExt;
 import com.fdkankan.scene.service.ISceneMarkShapeService;
 import com.fdkankan.scene.service.IScenePlusExtService;
 import com.fdkankan.scene.service.IScenePlusService;
-import com.fdkankan.scene.util.ConverxyUtil;
-import com.fdkankan.scene.vo.FileParamVO;
 import com.fdkankan.scene.vo.SceneMarkShapeDetectParamVO;
 import com.fdkankan.scene.vo.SceneMarkShapeParamVO;
+import com.fdkankan.scene.vo.SceneMarkShapeReDetectParamVO;
 import com.fdkankan.web.controller.BaseController;
-import com.fdkankan.web.response.Result;
 import com.fdkankan.web.response.ResultData;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,9 +24,7 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
-import java.io.File;
 import java.io.IOException;
-import java.nio.charset.Charset;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -101,6 +91,22 @@ public class SceneMarkShapeController extends BaseController
         return ResultData.ok();
     }
     /**
+     * 将需要重新推理的场景推入到队列
+     */
+    @PostMapping("/reDetectScene")
+    public ResultData reDetectScene(@RequestBody @Validated SceneMarkShapeReDetectParamVO param) {
+        sceneMarkShapeService.reDetectScene(param);
+        return ResultData.ok();
+    }
+    /**
+     * 将需要重新推理的场景推入到队列
+     */
+    @PostMapping("/editReDetectStatus")
+    public ResultData editReDetectStatus(@RequestBody @Validated SceneMarkShapeParamVO param) {
+        sceneMarkShapeService.editReDetectStatus(param);
+        return ResultData.ok();
+    }
+    /**
      * 保存或者修改
      */
     @PostMapping("/saveOrEdit")
@@ -131,5 +137,14 @@ public class SceneMarkShapeController extends BaseController
         log.info("进入editLabel---num{},imgPath{}",num,imgPath);
         return sceneMarkShapeService.editLabelByFile(num, imgPath, file);
     }
-
+    /**
+     * 保存或者修改JSON
+     */
+    @PostMapping("/testquery")
+    public ResultData testquery()   {
+        Map<String, List<SceneMarkShape>> res=new HashMap<>();
+        res.put("findByReDetectStatus",sceneMarkShapeService.findByReDetectStatus(1));
+        res.put("findByReDetectStatus",sceneMarkShapeService.findByToDetectStatus(0));
+        return ResultData.ok(res);
+    }
 }

+ 6 - 0
src/main/java/com/fdkankan/scene/entity/SceneMarkShape.java

@@ -52,6 +52,12 @@ public class SceneMarkShape implements Serializable {
        */
       @TableField("re_detect")
       private Integer reDetect;
+      /**
+       * 0需要训练 1已经训练过
+       */
+      @TableField("to_detect")
+      private Integer toDetect;
+
       @TableField("create_time")
       private Date createTime;
 

+ 9 - 0
src/main/java/com/fdkankan/scene/service/ISceneMarkShapeService.java

@@ -4,10 +4,12 @@ package com.fdkankan.scene.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.scene.entity.SceneMarkShape;
 import com.fdkankan.scene.vo.SceneMarkShapeParamVO;
+import com.fdkankan.scene.vo.SceneMarkShapeReDetectParamVO;
 import com.fdkankan.web.response.ResultData;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.util.List;
 
 /**
  * Created by Xiewj on 2021/11/23 0026 10:14
@@ -18,4 +20,11 @@ public interface ISceneMarkShapeService extends IService<SceneMarkShape> {
     SceneMarkShape findByNumAndImagePath(String num, String imagePath);
 
     ResultData editLabelByFile(String num, String imgPath, MultipartFile file) throws IOException;
+
+    void reDetectScene(SceneMarkShapeReDetectParamVO param);
+
+    List<SceneMarkShape> findByReDetectStatus(Integer reDetect);
+    List<SceneMarkShape> findByToDetectStatus(Integer toDetect);
+
+    void editReDetectStatus(SceneMarkShapeParamVO param);
 }

+ 67 - 4
src/main/java/com/fdkankan/scene/service/impl/SceneMarkShapeServiceImpl.java

@@ -3,24 +3,26 @@ package com.fdkankan.scene.service.impl;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.lang.UUID;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.model.constants.ConstantFilePath;
+import com.fdkankan.rabbitmq.util.RabbitMqProducer;
 import com.fdkankan.scene.entity.SceneMarkShape;
-import com.fdkankan.scene.entity.ScenePlusExt;
-import com.fdkankan.scene.mapper.IScenePlusExtMapper;
 import com.fdkankan.scene.mapper.MarkShapeMapper;
 import com.fdkankan.scene.service.ISceneMarkShapeService;
-import com.fdkankan.scene.service.IScenePlusExtService;
 import com.fdkankan.scene.util.ConverxyUtil;
 import com.fdkankan.scene.vo.SceneMarkShapeParamVO;
+import com.fdkankan.scene.vo.SceneMarkShapeReDetectParamVO;
 import com.fdkankan.web.response.ResultData;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -37,6 +39,67 @@ import java.util.List;
 @Slf4j
 @Service
 public class SceneMarkShapeServiceImpl extends ServiceImpl<MarkShapeMapper, SceneMarkShape> implements ISceneMarkShapeService {
+    @Autowired
+    private RabbitMqProducer rabbitMqProducer;
+    @Value("${queue.scene.yolov5-re-detect-queue}")
+    private String yolov5ReDetectQueue;
+    @Value("${main.url}")
+    private String mainUrl;
+
+    @Override
+    public void editReDetectStatus(SceneMarkShapeParamVO param) {
+        SceneMarkShape byNumAndImagePath = findByNumAndImagePath(param.getNum(), param.getImagePath());
+        if (ObjectUtil.isNotNull(byNumAndImagePath)){
+            byNumAndImagePath.setReDetect(0);
+            byNumAndImagePath.setToDetect(1);
+            updateById(byNumAndImagePath);
+        }
+    }
+
+    @Override
+    public List<SceneMarkShape> findByReDetectStatus(Integer reDetect){
+        LambdaQueryWrapper<SceneMarkShape> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(SceneMarkShape::getReDetect,reDetect);
+        return list(wrapper);
+    }
+
+    @Override
+    public List<SceneMarkShape> findByToDetectStatus(Integer toDetect) {
+        QueryWrapper queryWrapper = new QueryWrapper();
+        queryWrapper.select("DISTINCT num")
+                .eq("to_detect",toDetect) ;
+        return getBaseMapper().selectList(queryWrapper);
+    }
+
+    @Override
+    public void reDetectScene(SceneMarkShapeReDetectParamVO param) {
+        //查询需要重新训练的图片
+        List<SceneMarkShape> reDetectStatuList = findByReDetectStatus(1);
+        for (SceneMarkShape shape : reDetectStatuList) {
+            SceneMarkShapeReDetectParamVO paramVO=new SceneMarkShapeReDetectParamVO();
+            paramVO.setWebSite(mainUrl);
+            if (StrUtil.isNotEmpty(param.getSaveDir())){
+                paramVO.setSaveDir(param.getSaveDir());
+            }
+            paramVO.setNum(shape.getNum());
+            paramVO.setImagePath(shape.getImagePath());
+            paramVO.setDetectType(1);
+            rabbitMqProducer.sendByWorkQueue(yolov5ReDetectQueue,paramVO);
+        }
+        //查询需要进入训练的场景
+        List<SceneMarkShape> byToDetectStatus = findByToDetectStatus(0);
+        for (SceneMarkShape shape : byToDetectStatus) {
+            SceneMarkShapeReDetectParamVO paramVO=new SceneMarkShapeReDetectParamVO();
+            paramVO.setWebSite(mainUrl);
+            if (StrUtil.isNotEmpty(param.getSaveDir())){
+                paramVO.setSaveDir(param.getSaveDir());
+            }
+            paramVO.setNum(shape.getNum());
+            paramVO.setDetectType(2);
+            rabbitMqProducer.sendByWorkQueue(yolov5ReDetectQueue,paramVO);
+        }
+    }
+
     @Override
     public ResultData editLabelByFile(String num, String imgPath, MultipartFile file) throws IOException {
 

+ 46 - 0
src/main/java/com/fdkankan/scene/vo/SceneMarkShapeReDetectParamVO.java

@@ -0,0 +1,46 @@
+package com.fdkankan.scene.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/1/19
+ **/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneMarkShapeReDetectParamVO {
+
+    /**
+     * 场景码
+     */
+    private String num;
+
+    /**
+     *  推送域名
+     */
+    private String webSite;
+    /**
+     *  图片名称
+     */
+    private String imagePath;
+
+    /**
+     *  保存路径。可以为空,不为空可以查看结果
+     */
+    private String saveDir="";
+
+    /**
+     *  1,场景的单张图片重新进入训练  2,整个场景的推理进入训练
+     */
+    private Integer detectType;
+
+}