Commit 23e1ef10 by YANGYANG

人像比对(他是谁接口)暂使用云天静态接口

parent 78754e4b
package com.founder.commonutils.peopleEntity;
import java.util.List;
/**
* 人脸检索参数
* @Author yangyang
* @Date 2021/04/01
*/
public class FaceJtSearchParam {
//节点类型 district(分局), area(派出所)
private List<String> cameraIds;
//排序方式 score 相似度,time 时间,camera 摄像机,calendar 日历
private String displayType;
//0:重点人员库;
//1:布控抓拍人脸库;
//2:警局内非布控抓拍
//3:户籍库人员搜索;
//4:居住库人员搜索;
// 人脸库默认值 1
private Integer type = 3;
//图片来源类型 100表示图片上传 当上传多个图片时,多个100用逗号拼接
private String dataType="100";
//人脸id
private String faceId= "";
//人脸id多个时,用英文逗号拼接
private String ids= "";
private Integer mergeType= 0;
//相似度 默认0.92
private double scoreThreshold = 0.92;
//开始时间 格式 2019-12-07 00:00:00
private String starttime= "";
//结束时间 格式 2020-03-06 23:59:59
private String endtime= "";
private String dayStartTime= "00:00:00";
private String dayEndTime= "23:59:59";
private String weekDay= "0";
private String quality= "0";
//性别 性别不限 男 女
private String gender= "";
private Integer genderConfidence= 1;
//种族
private String race= "";
private Integer raceConfidence= 1;
//年龄
private String age= "";
//帽子 戴帽子 不戴帽子
private String hat= "";
// 1-低,3-中,5-高
private Integer hatConfidence= 1;
//眼镜 眼镜不限 不戴眼镜 戴普通眼镜
private String glasses= "";
private Integer glassesConfidence= 1;
//口罩
private String mask= "";
private Integer maskConfidence= 1;
public List<String> getCameraIds() {
return cameraIds;
}
public void setCameraIds(List<String> cameraIds) {
this.cameraIds = cameraIds;
}
public String getDisplayType() {
return displayType;
}
public void setDisplayType(String displayType) {
this.displayType = displayType;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public String getDataType() {
return dataType;
}
public void setDataType(String dataType) {
this.dataType = dataType;
}
public String getFaceId() {
return faceId;
}
public void setFaceId(String faceId) {
this.faceId = faceId;
}
public String getIds() {
return ids;
}
public void setIds(String ids) {
this.ids = ids;
}
public Integer getMergeType() {
return mergeType;
}
public void setMergeType(Integer mergeType) {
this.mergeType = mergeType;
}
public double getScoreThreshold() {
return scoreThreshold;
}
public void setScoreThreshold(double scoreThreshold) {
this.scoreThreshold = scoreThreshold;
}
public String getStarttime() {
return starttime;
}
public void setStarttime(String starttime) {
this.starttime = starttime;
}
public String getEndtime() {
return endtime;
}
public void setEndtime(String endtime) {
this.endtime = endtime;
}
public String getDayStartTime() {
return dayStartTime;
}
public void setDayStartTime(String dayStartTime) {
this.dayStartTime = dayStartTime;
}
public String getDayEndTime() {
return dayEndTime;
}
public void setDayEndTime(String dayEndTime) {
this.dayEndTime = dayEndTime;
}
public String getWeekDay() {
return weekDay;
}
public void setWeekDay(String weekDay) {
this.weekDay = weekDay;
}
public String getQuality() {
return quality;
}
public void setQuality(String quality) {
this.quality = quality;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Integer getGenderConfidence() {
return genderConfidence;
}
public void setGenderConfidence(Integer genderConfidence) {
this.genderConfidence = genderConfidence;
}
public String getRace() {
return race;
}
public void setRace(String race) {
this.race = race;
}
public Integer getRaceConfidence() {
return raceConfidence;
}
public void setRaceConfidence(Integer raceConfidence) {
this.raceConfidence = raceConfidence;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getHat() {
return hat;
}
public void setHat(String hat) {
this.hat = hat;
}
public Integer getHatConfidence() {
return hatConfidence;
}
public void setHatConfidence(Integer hatConfidence) {
this.hatConfidence = hatConfidence;
}
public String getGlasses() {
return glasses;
}
public void setGlasses(String glasses) {
this.glasses = glasses;
}
public Integer getGlassesConfidence() {
return glassesConfidence;
}
public void setGlassesConfidence(Integer glassesConfidence) {
this.glassesConfidence = glassesConfidence;
}
public String getMask() {
return mask;
}
public void setMask(String mask) {
this.mask = mask;
}
public Integer getMaskConfidence() {
return maskConfidence;
}
public void setMaskConfidence(Integer maskConfidence) {
this.maskConfidence = maskConfidence;
}
}
package com.founder.commonutils.peopleEntity;
/**
* 人脸检索结果人像比对暂使用静态检索接口
* @Author yangyang
* @Date 2020/4/2119:29
*/
public class FaceJtSearchResult {
private String id;//人脸id (faceId)
private String cameraId;//摄像头id
private String cameraName;//摄像头名称
private String file;//图片路径
private String imageUrl;//大图路径
private String time;//拍摄时间
private String score;//相似度
private String gender;//性别
private String race;//种族
private String age;//年龄段
private String hat;//帽子
private String glass;//眼镜
private String mask;//口罩
private String hair;//发型
private String xm;// 姓名
private String address;//摄像头地址
private String x;//摄像头经度
private String y;//摄像头纬度
private String cameraType;//摄像头类型
private String districtCode;//刑专标准的行政区划code
private String districtCodeName;//
private String areaCode;
private String areaCodeName;
private double scoreThreshold;
private Integer type;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCameraId() {
return cameraId;
}
public void setCameraId(String cameraId) {
this.cameraId = cameraId;
}
public String getCameraName() {
return cameraName;
}
public void setCameraName(String cameraName) {
this.cameraName = cameraName;
}
public String getFile() {
return file;
}
public void setFile(String file) {
this.file = file;
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getScore() {
return score;
}
public void setScore(String score) {
this.score = score;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getRace() {
return race;
}
public void setRace(String race) {
this.race = race;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getHat() {
return hat;
}
public void setHat(String hat) {
this.hat = hat;
}
public String getGlass() {
return glass;
}
public void setGlass(String glass) {
this.glass = glass;
}
public String getMask() {
return mask;
}
public void setMask(String mask) {
this.mask = mask;
}
public String getHair() {
return hair;
}
public void setHair(String hair) {
this.hair = hair;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getX() {
return x;
}
public void setX(String x) {
this.x = x;
}
public String getY() {
return y;
}
public void setY(String y) {
this.y = y;
}
public String getCameraType() {
return cameraType;
}
public void setCameraType(String cameraType) {
this.cameraType = cameraType;
}
public String getDistrictCode() {
return districtCode;
}
public void setDistrictCode(String districtCode) {
this.districtCode = districtCode;
}
public String getDistrictCodeName() {
return districtCodeName;
}
public void setDistrictCodeName(String districtCodeName) {
this.districtCodeName = districtCodeName;
}
public String getAreaCode() {
return areaCode;
}
public void setAreaCode(String areaCode) {
this.areaCode = areaCode;
}
public String getAreaCodeName() {
return areaCodeName;
}
public void setAreaCodeName(String areaCodeName) {
this.areaCodeName = areaCodeName;
}
public double getScoreThreshold() {
return scoreThreshold;
}
public void setScoreThreshold(double scoreThreshold) {
this.scoreThreshold = scoreThreshold;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public String getXm() {
return xm;
}
public void setXm(String xm) {
this.xm = xm;
}
}
package com.founder.imageapi.controller;
import com.founder.commonutils.peopleEntity.CameraFaceTask;
import com.founder.commonutils.peopleEntity.FaceJtSearchParam;
import com.founder.commonutils.peopleEntity.FaceSearchParam;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.commonutils.util.TokenUtils;
......@@ -79,5 +80,18 @@ public class ImageController {
@RequestParam(required = false)String jswd) {
return imageService.selectRxXx(qsjd,qswd,jsjd,jswd);
}
// 人像比对接口(暂使用云天励飞静态检索接口)
@OperLog(message = "人像比对接口",operation = OperationType.QUERY)
@ApiOperation(value = "人像比对接口")
@PostMapping(value = "/getFaceImageByUploadImageJt",consumes = "multipart/*",headers = "content-type=multipart/form-data")
public MapRestResult getFaceIdsByUploadImage(@RequestParam(value = "files",required = true) MultipartFile files, FaceJtSearchParam faceSearchParam) {
long startTime=new Date().getTime();
MapRestResult result=imageService.getFaceImageByUploadImageJt(files,faceSearchParam);
long endTime=new Date().getTime();
long timeDiffer=endTime-startTime;
System.out.println("人像比对检索**请求时长**********"+timeDiffer+"毫秒");
return result;
}
}
package com.founder.imageapi.service;
import com.founder.commonutils.peopleEntity.CameraFaceTask;
import com.founder.commonutils.peopleEntity.FaceJtSearchParam;
import com.founder.commonutils.peopleEntity.FaceSearchParam;
import com.founder.commonutils.publicEntity.MapRestResult;
import org.springframework.web.multipart.MultipartFile;
......@@ -25,4 +26,7 @@ public interface ImageService {
MapRestResult sendTask(CameraFaceTask cameraFaceTask);
MapRestResult selectRxXx(String qsjd,String qswd,String jsjd,String jswd);
MapRestResult getFaceImageByUploadImageJt(MultipartFile files, FaceJtSearchParam faceSearchParam);
}
......@@ -519,5 +519,164 @@ public class ImageServiceImpl implements ImageService {
List<Camera> cameras = cameraInfoDao.getCameraInfoByQsJwd(qsjd,qswd,jsjd,jswd);
return MapRestResult.build(200,"获取人像信息",null,cameras);
}
/**
* 人像比对暂使用静态检索接口
* @param files
* @return
*/
/**
* 根据上传的图片获取人脸检索的结果,总共分为如下四步
* 1、根据上传的图片获取图片id,云天称该id为imageId,每张照片对应一个imageId
* 2、根据图片id(imageId)获取人像id(faceId),人像id可能为多个
* 6、通过人像id获取检索的照片结果(静态检索)
* 4、通过摄像头id获取摄像头经纬度以及基本信息
* 5、通过人脸id获取照片大图信息
* @return
*/
@Override
public MapRestResult getFaceImageByUploadImageJt(MultipartFile files, FaceJtSearchParam faceSearchParam){
MapRestResult result = null;
Map returnMap=new HashMap();
//前台传送的参数不为空,上传的照片不为空
try {
if (null != faceSearchParam && null != files) {
List<Map<String,String>> faceIdList=new ArrayList<>();
//判断文件格式
String fileName=files.getOriginalFilename();
if(fileName.indexOf(".")!=-1){
String gs=fileName.substring(fileName.indexOf("."),fileName.length());
if(!gs.equalsIgnoreCase(".jpg")&&!gs.equalsIgnoreCase(".jpeg")&&!gs.equalsIgnoreCase(".png")&&!gs.equalsIgnoreCase(".bmp")){
result = MapRestResult.build(1001,"支持jpg,jpeg,png,bmp格式的照片",null,null);
return result;
}
}
// 调用file文件二进制上传方式接口
String imageId = getImageIdsByUploadImage(files);
// 根据人像id获取人脸id
List<Map<String,String>> faceIds = getFaceIdsByImageId(imageId);
faceIdList.addAll(faceIds);//获取到每张照片的人像id,放入集合中
if (null != faceIdList && faceIdList.size() > 1) {//当有多个人像id时
List<String> faceIdss=new ArrayList<>();
for(Map map:faceIdList){
faceIdss.add(map.get("id").toString());
}
//将list中的元素拼接为以逗号分隔的字符串,末尾不带逗号
String faceIdStr = StringUtils.join(faceIds, ",");
//faceId的个数需要与dataType的个数一一对应,所以这里也需要拼接
List<String> dataType = new ArrayList<>();
for (int i = 0; i < faceIds.size(); i++) {
dataType.add(faceSearchParam.getDataType());//图片来源类型 默认为100
}
String dataTypeStr = StringUtils.join(dataType, ",");
faceSearchParam.setIds(faceIdStr);
faceSearchParam.setDataType(dataTypeStr);
} else if (null != faceIdList && faceIdList.size() == 1) {//当图片上有只有一个人脸时
faceSearchParam.setFaceId(faceIdList.get(0).get("id"));
}
if (null != faceIdList&faceIdList.size()>0) {//获取数据并翻译
//将实体类对象转换为json字符串
List<FaceJtSearchResult> resultList = getFaceSearchResultByFaceIdJt(JSONObject.toJSONString(faceSearchParam));
returnMap.put("data",resultList);
int total=0;
if(null!=resultList&&resultList.size()>0){
total=resultList.size();
}
returnMap.put("total",total);
result = MapRestResult.build(200,"成功获取人像比对检索信息",null,returnMap);
}else{
result = MapRestResult.build(1001,"未检索到人像比对信息",null,null);
}
}else{
result = MapRestResult.build(1001,"请上传照片",null,null);
}
}catch (Exception e){
result = MapRestResult.build(500,"获取人像比对检索信息失败",null,null);
e.printStackTrace();
}
return result;
}
/**
*6、通过人像id获取检索的照片结果(静态检索)人像比对暂使用这个接口
*/
public List<FaceJtSearchResult> getFaceSearchResultByFaceIdJt(String jsonObjectStr){
List<FaceJtSearchResult> faceSearchResults=new ArrayList<>();
String token=TokenUtils.getYtgsToken();
Map herders=new HashMap();
//设置请求的header参数
herders.put("Authorization","Bearer "+token);
herders.put("Content-Type","application/json");
//循环请求
Boolean flag=true;
int page=1;
int pageSize=5000;
int currentPageTotal=0;//当前页返回的结果总数
try {
while (flag) {
String url = "http://26.3.12.56:8083/api/intellif/share/face/search/face/page/" + page + "/pagesize/" + pageSize;
String resultString = HttpClient.doPostJson(url, herders, jsonObjectStr);
if (null != resultString) {//如果返回结果不为空
JSONObject result = JSONObject.parseObject(resultString);
if (result.containsKey("data")) {
JSONArray jsonArray = result.getJSONArray("data");//当前页返回的结果总数
if(null!=jsonArray&&jsonArray.size()>0) {
currentPageTotal = jsonArray.size();
for (Object object : jsonArray) {
FaceJtSearchResult faceSearchResult = new FaceJtSearchResult();
JSONObject jsonObject1 = (JSONObject) object;
String camera = jsonObject1.getString("camera");//摄像头id
String file = jsonObject1.getString("file");// 图片地址
//如果图片不是以 http 开头的情况才会加上
if(!file.startsWith("http")){
file="http://26.3.12.73"+file;
}
String id = jsonObject1.getString("id");//人脸id(faceId)
String xm = jsonObject1.getString("xm");//人脸姓名
long time = jsonObject1.getLong("time");//时间戳格式
String score = jsonObject1.getString("score");//相似度
String gender = jsonObject1.getString("gender");//性别
String race = jsonObject1.getString("race");//种族
String accessories = jsonObject1.getString("accessories");//配饰
String age = jsonObject1.getString("age");//年龄
Map<String,Object> map=commonService.accessoriesToValue(gender, race, accessories, age);
faceSearchResult.setId(id);
faceSearchResult.setXm(xm);
faceSearchResult.setCameraId(camera);
faceSearchResult.setFile(file);
faceSearchResult.setTime(DataUtil.getDateString(time));
faceSearchResult.setScore(score);
faceSearchResult.setGender(map.get("gender")+"");
faceSearchResult.setRace(map.get("race")+"");
faceSearchResult.setAge(map.get("age")+"");
faceSearchResult.setHat(map.get("hat")+"");
faceSearchResult.setGlass(map.get("glass")+"");
faceSearchResult.setMask(map.get("mask")+"");
faceSearchResult.setHair(map.get("hair")+"");
faceSearchResults.add(faceSearchResult);
}
}
}
}
if (currentPageTotal < pageSize || currentPageTotal > pageSize) {//每页的总数大于当前页返回的总数,退出循环,d当期页的总数大于分页数,说明其接口无分页
flag = false;
} else if (currentPageTotal == pageSize) {//当前页等于总页数,则循环请求
++page;
}
}
}catch (Exception e){
e.printStackTrace();
}
return faceSearchResults;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment