ソースを参照

1. 修改全局置信度算法
2. 新增全局置信度默认值"1"
4. 修改识别商品图片时第一次出错没有标记错误的问题

SemiWarm 5 年 前
コミット
015cc7cc90

+ 6 - 2
src/main/java/com/pavis/ai/kwp/ioc/dto/meta/OcrTripDto.java

@@ -23,6 +23,8 @@ public class OcrTripDto {
     private List<OcrTripField> fields;
     private List<OcrTripDetDto> details;
 
+    private String globalProb = "1";
+
     public OcrTripProb adapteTripProb(String id) {
         if (CollectionUtils.isNotEmpty(fields)) {
             Map<String, String> map = Maps.newHashMap();
@@ -32,7 +34,8 @@ public class OcrTripDto {
             String jsonFields = JSON.toJSONString(map);
             OcrTripProb result = JSONObject.parseObject(jsonFields, OcrTripProb.class);
             result.setUploadId(id);
-            result.setGlobalProb(getTripGlobalProb());
+            // result.setGlobalProb(getTripGlobalProb());
+            result.setGlobalProb(globalProb);
             return result;
         }
         return null;
@@ -47,7 +50,8 @@ public class OcrTripDto {
             String jsonFields = JSON.toJSONString(map);
             OcrTrip result = JSONObject.parseObject(jsonFields, OcrTrip.class);
             result.setUploadId(id);
-            result.setGlobalProb(getTripGlobalProb());
+            // result.setGlobalProb(getTripGlobalProb());
+            result.setGlobalProb(globalProb);
             return result;
         }
         return null;

+ 1 - 1
src/main/java/com/pavis/ai/kwp/ioc/model/OcrTrip.java

@@ -86,5 +86,5 @@ public class OcrTrip {
     /**
      * 全局置信度
      */
-    private String globalProb;
+    private String globalProb = "1";
 }

+ 33 - 8
src/main/java/com/pavis/ai/kwp/ioc/service/impl/OcrGoodsServiceImpl.java

@@ -15,7 +15,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -40,19 +39,23 @@ public class OcrGoodsServiceImpl implements OcrGoodsService {
     @Autowired
     private SubImgRetMapper subImgRetMapper;
 
-    @Async("recAndSaveExecutor")
+    // @Async("recAndSaveExecutor")
     @Override
     public void recAndSave(OcrGoods ocrGoods) {
-        Map<String, Object> map = Maps.newHashMap();
-        map.put("upload_id", ocrGoods.getUploadId());
-        List<UpGoods> upGoods = upGoodsMapper.selectByMap(map);
+        QueryWrapper<UpGoods> ugw = new QueryWrapper<>();
+        ugw.lambda().eq(UpGoods::getUploadId, ocrGoods.getUploadId());
+        List<UpGoods> upGoods = upGoodsMapper.selectList(ugw);
         GoodsLog goodsLog = goodsLogMapper.selectById(ocrGoods.getUploadId());
         if (goodsLog != null && CollectionUtils.isNotEmpty(upGoods)) {
             goodsLog.setGStartTime(DateTimeUtils.dateTimeNow());
             for (UpGoods ug : upGoods) {
+                log.info("start ir,upload_id:{},goods_id:{}", ug.getUploadId(), ug.getId());
                 startOcr(ocrGoods.getUploadId(), ug);
+                log.info("finish ir,upload_id:{},goods_id:{}", ug.getUploadId(), ug.getId());
             }
-            List<ErrGoods> errs = errGoodsMapper.selectByMap(map);
+            QueryWrapper<ErrGoods> egw = new QueryWrapper<>();
+            egw.lambda().eq(ErrGoods::getUploadId, ocrGoods.getUploadId());
+            List<ErrGoods> errs = errGoodsMapper.selectList(egw);
             if (CollectionUtils.isNotEmpty(errs)) {
                 goodsLog.setGError(true);
                 goodsLog.setGDone(false);
@@ -105,6 +108,7 @@ public class OcrGoodsServiceImpl implements OcrGoodsService {
             }
             goodsLog.setTimes(goodsLog.getTimes() + 1);
         } else {
+            goodsLog.setGError(true);
             goodsLog.setGDone(true);
         }
         goodsLogMapper.updateById(goodsLog);
@@ -116,6 +120,7 @@ public class OcrGoodsServiceImpl implements OcrGoodsService {
         // 检查是否已有识别结果
         List<SubImg> subImgList = subImgMapper.selectList(wrapper);
         if (CollectionUtils.isEmpty(subImgList)) {
+            GoodsLog goodsLog = goodsLogMapper.selectById(uploadId);
             IrRes res = null;
             try {
                 res = ctrService.startRequest(uploadId, ug.getGoodsImg());
@@ -128,11 +133,12 @@ public class OcrGoodsServiceImpl implements OcrGoodsService {
                         .build();
                 errGoodsMapper.insert(err);
                 log.error("商品图片:{},识别出错:{}", ug.getGoodsImg(), e.getMessage());
+                goodsLog.setGError(true);
             }
             if (res != null) {
                 if (StringUtils.isBlank(res.getErrorCode())) {
                     res.setGoodsId(ug.getId());
-                    saveOcrResult(res);
+                    saveOcrResult(ug, res);
                 } else {
                     ErrGoods err = ErrGoods.builder()
                             .uploadId(uploadId)
@@ -141,12 +147,23 @@ public class OcrGoodsServiceImpl implements OcrGoodsService {
                             .createTime(DateTimeUtils.dateTimeNow())
                             .build();
                     errGoodsMapper.insert(err);
+                    goodsLog.setGError(true);
                 }
+            } else {
+                ErrGoods err = ErrGoods.builder()
+                        .uploadId(uploadId)
+                        .goodsImg(ug.getGoodsImg())
+                        .error("未知错误,res=null")
+                        .createTime(DateTimeUtils.dateTimeNow())
+                        .build();
+                errGoodsMapper.insert(err);
+                goodsLog.setGError(true);
             }
+            goodsLogMapper.updateById(goodsLog);
         }
     }
 
-    public void saveOcrResult(IrRes res) {
+    public void saveOcrResult(UpGoods ug, IrRes res) {
         IrRet result = res.getResult();
         if (result.getSubnumber() > 0) {
             Map<String, SubGoods> subGoodsList = result.getSubGoodsList();
@@ -167,6 +184,14 @@ public class OcrGoodsServiceImpl implements OcrGoodsService {
                     }
                 }
             }
+        } else {
+            ErrGoods err = ErrGoods.builder()
+                    .uploadId(ug.getUploadId())
+                    .goodsImg(ug.getGoodsImg())
+                    .error(String.format("subnumber:0,goodsId:%s", ug.getId()))
+                    .createTime(DateTimeUtils.dateTimeNow())
+                    .build();
+            errGoodsMapper.insert(err);
         }
     }
 }

+ 4 - 0
src/main/java/com/pavis/ai/kwp/ioc/service/impl/OcrTripServiceImpl.java

@@ -43,6 +43,10 @@ public class OcrTripServiceImpl extends ServiceImpl<OcrTripMapper, OcrTrip> impl
             // 存储识别结果
             OcrTrip ocrTrip = dto.adapteTrip(ret.getUploadId());
             if (ocrTrip != null) {
+                if (StringUtils.isBlank(ocrTrip.getGlobalProb())) {
+                    // 强制默认值为1
+                    ocrTrip.setGlobalProb("1");
+                }
                 baseMapper.insert(ocrTrip);
             }
             List<OcrTripDet> dets = dto.adapteDetails(ret.getUploadId());