package com.basic.analy.utils;
|
import com.basic.analy.service.FaceSdkTool;
|
import lombok.Data;
|
import org.apache.log4j.Logger;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.concurrent.RecursiveTask;
|
@Data
|
public class SearchImgThreadUtil extends RecursiveTask<Integer> {
|
private static final int THRESHOLD = 200;
|
private List<Map> faceArray;
|
private byte[] imageData;
|
private int likePer;
|
private int start;
|
private int end;
|
public static List<Map> resultList = new ArrayList<>();
|
private Logger logger = Logger.getLogger(EsThreadUtils.class);
|
|
public SearchImgThreadUtil(byte[] imageData,List<Map> faceArray,int likePer,int start,int end){
|
this.imageData = imageData;
|
this.faceArray =faceArray;
|
this.likePer = likePer;
|
this.start = start;
|
this.end = end;
|
}
|
public Integer compute(){
|
|
boolean canCompute = faceArray.size() <= THRESHOLD;
|
if (canCompute){
|
logger.info("进入likePer:"+likePer);
|
for (int i = 0,item = faceArray.size(); i <item; i++){
|
|
if((byte[])faceArray.get(i).get("feature")!=null&&!"".equals((byte[])faceArray.get(i).get("feature"))){
|
// 业务处理
|
Float num= new FaceSdkTool().compareFeature(imageData, (byte[])faceArray.get(i).get("feature"));
|
if(Math.round(num*100)<likePer){ // 相似度小于阈值数据丢弃
|
continue;
|
}
|
logger.info("相似值为"+likePer);
|
faceArray.get(i).put("likePer",Math.round(num*100));
|
resultList.add(faceArray.get(i));
|
}
|
}
|
}else {
|
int middle = (end + start) / 2;
|
SearchImgThreadUtil subtask1 = new SearchImgThreadUtil(imageData,faceArray.subList(start, end),likePer,start, middle);
|
SearchImgThreadUtil subtask2 = new SearchImgThreadUtil(imageData,faceArray.subList(start, end),likePer,middle, end);
|
invokeAll(subtask1, subtask2);
|
subtask1.join();
|
subtask2.join();
|
}
|
return faceArray.size();
|
}
|
// public static void main(String[] args) {
|
//
|
// }
|
//
|
// public byte[] getImageData() {
|
// return imageData;
|
// }
|
//
|
// public void setImageData(byte[] imageData) {
|
// this.imageData = imageData;
|
// }
|
//
|
// public int getLikePer() {
|
// return likePer;
|
// }
|
// public void setLikePer(int likePer) {
|
// this.likePer = likePer;
|
// }
|
//
|
// public List<Map> getFaceArray() {
|
// return faceArray;
|
// }
|
// public void setFaceArray(List<Map> faceArray) {
|
// this.faceArray = faceArray;
|
// }
|
// public static List<Map<String, Object>> getCurrentList() {
|
// return currentList;
|
// }
|
// public static void setCurrentList(List<Map<String, Object>> currentList) {
|
// SearchImgThreadUtil.currentList = currentList;
|
// }
|
}
|