diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPicture.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPicture.java index 378d50e9..30a4726a 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPicture.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPicture.java @@ -301,6 +301,11 @@ public class OcrPicture implements BaseDto, java.io.Serializable { @TableField(value = "is_download") private Integer isdownload; + @ApiModelProperty(value = "图片hash值") + @Schema(description = "图片hash值") + @TableField(value = "img_hash") + private String imgHash; + @ApiModelProperty(value = "图片查重的比对图片集合") @TableField(exist = false) private List listCom; @@ -392,7 +397,8 @@ public class OcrPicture implements BaseDto, java.io.Serializable { new SimpleEntry<>("field16", "field16"), new SimpleEntry<>("field17", "field17"), new SimpleEntry<>("field18", "field18"), - new SimpleEntry<>("localpictrueurl", "localpictrueurl") + new SimpleEntry<>("localpictrueurl", "localpictrueurl"), + new SimpleEntry<>("imgHash", "imgHash") ) .collect(Collectors.toMap(SimpleEntry::getKey, SimpleEntry::getValue)); diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureService.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureService.java index aef5c043..bd86dd74 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureService.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureService.java @@ -3,6 +3,7 @@ package cn.jyjz.xiaoyao.ocr.service; import java.io.Serializable; import java.util.Collection; import java.util.List; +import java.util.Map; import cn.jyjz.xiaoyao.common.base.vo.ResultVo; import cn.jyjz.xiaoyao.common.base.vo.UserToken; @@ -98,4 +99,6 @@ public interface OcrPictureService extends BaseService { int savePictures(List ocrPictureList); ResultVo createPackageTask(List pageList, String tenantId, UserToken userToken, String searchMonth, HttpServletRequest req, String buessinessno); + + Map getOcrPictureClassifyAndHash(String img); } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureServiceImpl.java index 116af2b7..6acd8924 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureServiceImpl.java @@ -40,10 +40,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.io.Serializable; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; +import java.util.*; /** * 业务层实现 @@ -320,20 +317,38 @@ public class OcrPictureServiceImpl extends BaseServiceImpl map = this.getOcrPictureClassifyAndHash(ocrPicture.getLocalpictrueurl()); + if(map!=null){ + ocrPicture.setImgHash(map.get("hash")); + ocrPicture.setClassificationid(map.get("classId")); + } + this.updateById(ocrPicture); } + if(StringUtils.isBlank(ocrPictureNext.getImgHash())){ + Map map = this.getOcrPictureClassifyAndHash(ocrPictureNext.getLocalpictrueurl()); + if(map!=null){ + ocrPictureNext.setImgHash(map.get("hash")); + ocrPictureNext.setClassificationid(map.get("classId")); + } + this.updateById(ocrPictureNext); + } + + String img=StringUtils.isBlank(ocrPicture.getImgHash())?StringUtils.isBlank(ocrPicture.getLocalpictrueurl()) ? ocrPicture.getImgurl() : ocrPicture.getLocalpictrueurl():ocrPicture.getImgHash(); + String imgNext=StringUtils.isBlank(ocrPictureNext.getImgHash())?StringUtils.isBlank(ocrPictureNext.getLocalpictrueurl()) ? ocrPictureNext.getImgurl() : ocrPictureNext.getLocalpictrueurl():ocrPictureNext.getImgHash(); +// JSONObject jsonObjectSimi = ImageClassUtil.getSimilarity(img,imgNext,similarityPath); +// System.out.println("responseDataXs--code = [" + jsonObjectSimi.get("code") + "]"); +// System.out.println("responseDataXs--similarity = [" + jsonObjectSimi.get("similarity") + "]"); + String resultValue = HashCompareUtil.cmpHash(img, imgNext); + //返回内容为零,表示成功,否则表示失败 +// if (null != jsonObjectSimi && jsonObjectSimi.getString("code").equals("0")) { +// resultValue = jsonObjectSimi.getString("similarity"); +// ocrPictureNext.setResult(resultValue); +// } else { +// resultValue = "0"; +// ocrPictureNext.setResult(resultValue); +// } + ocrPictureNext.setResult(resultValue); BigDecimal b1 = new BigDecimal(resultValue); BigDecimal b2 = new BigDecimal("100"); int val = b1.compareTo(b2); @@ -351,32 +366,32 @@ public class OcrPictureServiceImpl extends BaseServiceImpl 1) { - error.append("," + ocrPicture.getImgname()); - } else { - error.append(ocrPicture.getImgname()); - } - continue; - } - Category category = categoryService.getById(ocrPicture.getCategoryid()); - if (null == category) { - if (null != errorProject && errorProject.length() > 1) { - errorProject.append("," + ocrPicture.getImgname()); - } else { - errorProject.append(ocrPicture.getImgname()); - } - continue; - } else if (StringUtils.isBlank(category.getProcessdefinitionid())) { - if (null != errorFlow && errorFlow.length() > 1) { - errorFlow.append("," + category.getCategoryname()); - } else { - errorFlow.append(category.getCategoryname()); - } - continue; - } +// //查询项目对象 +// if (null == ocrPicture.getCategoryid()) { +// //TODO 没有对应项目,返回提示信息 +// if (null != error && error.length() > 1) { +// error.append("," + ocrPicture.getImgname()); +// } else { +// error.append(ocrPicture.getImgname()); +// } +// continue; +// } +// Category category = categoryService.getById(ocrPicture.getCategoryid()); +// if (null == category) { +// if (null != errorProject && errorProject.length() > 1) { +// errorProject.append("," + ocrPicture.getImgname()); +// } else { +// errorProject.append(ocrPicture.getImgname()); +// } +// continue; +// } else if (StringUtils.isBlank(category.getProcessdefinitionid())) { +// if (null != errorFlow && errorFlow.length() > 1) { +// errorFlow.append("," + category.getCategoryname()); +// } else { +// errorFlow.append(category.getCategoryname()); +// } +// continue; +// } //创建工单,如果创建成功,增加标志,用于过滤条件使用 OcrTaskchildPicture ocrTaskchildPicture = this.updateTaskChild(ocrPicture, ocrPackagetask.getId(), buessinessno); @@ -417,6 +432,20 @@ public class OcrPictureServiceImpl extends BaseServiceImpl getOcrPictureClassifyAndHash(String img) { + JSONObject jsonObjectSimi = ImageClassUtil.getClassify(img,"","http://127.0.0.1:8000/api/classify/"); + //返回内容为零,表示成功,否则表示失败 + if (null != jsonObjectSimi && jsonObjectSimi.getString("code").equals("0")) { + Map map=new HashMap(); + map.put("classId",jsonObjectSimi.getString("classId")); + map.put("hash",jsonObjectSimi.getString("hash")); + return map; + }else{ + return null; + } + } + public OcrTaskchildPicture updateTaskChild(OcrPicture ocrPicture, Long packageid, String buessinessno) { OcrTaskchildPicture ocrTaskchildPicture = ocrTaskchildPictureService.getOne(new LambdaQueryWrapper().eq(OcrTaskchildPicture::getPictureid, ocrPicture.getId())); ocrTaskchildPicture.setBuessinessno(buessinessno); diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/thread/tasks/PictureImgToLocalTask.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/thread/tasks/PictureImgToLocalTask.java index b64dbc09..518071da 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/thread/tasks/PictureImgToLocalTask.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/thread/tasks/PictureImgToLocalTask.java @@ -9,9 +9,12 @@ import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture; import cn.jyjz.xiaoyao.ocr.service.OcrPictureService; import cn.jyjz.xiaoyao.ocr.thread.entity.PictureImgToLocalEntity; import cn.jyjz.xiaoyao.ocr.util.DownloadImgUtil; +import cn.jyjz.xiaoyao.ocr.util.ImageClassUtil; +import com.alibaba.fastjson.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -28,6 +31,8 @@ public class PictureImgToLocalTask implements Runnable { private PictureImgToLocalEntity pictureImgToLocal; + + public PictureImgToLocalTask(PictureImgToLocalEntity pictureImgToLocal) { this.pictureImgToLocal = pictureImgToLocal; } @@ -42,6 +47,20 @@ public class PictureImgToLocalTask implements Runnable { if (ObjectUtil.isNotEmpty(picture)) { picture.setLocalpictrueurl(pictureImgToLocal.getLocalPath()); picture.setIsdownload(1); + //TODO 接口请求判断重复情况 + JSONObject jsonObjectSimi = ImageClassUtil.getClassify(picture.getLocalpictrueurl(),"","http://127.0.0.1:8000/api/classify/"); + System.out.println("responseDataXs " +jsonObjectSimi.toJSONString()); + System.out.println("responseDataXs--classId = [" + jsonObjectSimi.get("classId") + "]"); + System.out.println("responseDataXs--hash = [" + jsonObjectSimi.get("hash") + "]"); + String classId = ""; + String hash=""; + //返回内容为零,表示成功,否则表示失败 + if (null != jsonObjectSimi && jsonObjectSimi.getString("code").equals("0")) { + classId = jsonObjectSimi.getString("classId"); + hash = jsonObjectSimi.getString("hash"); + } + picture.setImgHash(hash); + picture.setClassificationid(classId); ocrPictureService.updateById(picture); } } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/util/HashCompareUtil.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/util/HashCompareUtil.java new file mode 100644 index 00000000..b75ba45b --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/util/HashCompareUtil.java @@ -0,0 +1,39 @@ +package cn.jyjz.xiaoyao.ocr.util; + +/** + * @Title: + * @Description: hash比对 + * @Author 郭向斌 + * @Date 2024-03-18 11:36 + * @Version V1.0 + */ +public class HashCompareUtil { + public static String cmpHash(String hash1,String hash2){ + int n = 0; + // hash长度不同则返回-1代表传参出错 + if (hash1.length() != hash2.length()){ + return "-1"; + } + for(int i = 0; i < hash1.length(); i++){ + if( hash1.charAt(i) != hash2.charAt(i)){ + n=n + 1; + } + } + return String.format("%.2f", 100.0 - n/64.0 * 100.0); + } + + + public static void main(String[] args) { + String a="1111111100000111000110110001101100110011001100000000000011110001"; + String b="1011111100000111000110110001101100110011001100000000000011110001"; + long start = System.currentTimeMillis(); + int ss=0; +// for(int i=0;i<5000000;i++){ +// String a="1111111100000111000110110001101100110011001100000000000011110001"+i; +// String b="1011111100000111000110110001101100110011001100000000000011110001"+i; + String dd = HashCompareUtil.cmpHash(a, b); + System.out.println(dd); +// ss=i; +// } + } +}