Commit b31b6c88 by yangyang

海南人像轨迹、比对、回溯、摄像头落地接口提交

parent 9565b9ca
package com.founder.commonutils.peopleEntity;
import lombok.Data;
/**
* 翻译结果
* @Author yangyang
* @Date 2022/04/28
*/
@Data
public class CameraData {
private String deviceId;
private String deviceName;
private String longitude;
private String latitude;
private String deviceAddress;
private String gbCode;
}
......@@ -12,6 +12,8 @@ public class CameraFaceResult {
//摄像头id(云天)
private String cameraId;
//摄像头名称
private String cameraName;
//抓拍时间
......
......@@ -62,6 +62,7 @@ public class FaceSearchParam {
private String mask= "";
private Integer maskConfidence= 1;
private List<String> tagIds;
private String base64Img;
public String getFaceSize() {
return faceSize;
......@@ -310,4 +311,12 @@ public class FaceSearchParam {
public void setTagIds(List<String> tagIds) {
this.tagIds = tagIds;
}
public String getBase64Img() {
return base64Img;
}
public void setBase64Img(String base64Img) {
this.base64Img = base64Img;
}
}
......@@ -9,7 +9,7 @@ public class FaceSearchResult {
private String id;//人脸id (faceId)
private String cameraId;//摄像头id
private String cameraName;//摄像头名称
private String file;//图片路径
private String file;//人脸图片路径
private String imageUrl;//大图路径
private String time;//拍摄时间
private String score;//相似度
......
......@@ -66,7 +66,7 @@ public class HttpUtil {
e.printStackTrace();
}
StringBuffer sb = new StringBuffer();
// System.out.println(response.getStatusLine());
// System.out.println(response.getStatusLine());
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = null;
......@@ -126,6 +126,41 @@ public class HttpUtil {
return sb.toString();
}
public static String doGetKyCamera(String uri) {
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(uri);
httpget.setHeader("Authorization",TokenUtils.getHnKyToken());
httpget.setHeader("Content-Type","application/json");
HttpResponse response = null;
try {
response = httpclient.execute(httpget);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
StringBuffer sb = new StringBuffer();
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = null;
try {
instream = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(instream,"UTF-8"));
String temp = null;
while((temp = reader.readLine())!=null){
sb.append(temp);
}
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
}
}
httpclient.getConnectionManager().shutdown();
return sb.toString();
}
public static String doGetEsb(String uri, String id) {
HttpClient httpclient = new DefaultHttpClient();
......
package com.founder.commonutils.util;
import org.apache.commons.codec.binary.Base64;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
/**
* SHA1WithRSA-数字签名工具类
* Created by yangyang on 2022/04/27.
*/
public class RsaUtil {
//加密算法
public static final String SIGN_ALGORITHMS = "SHA1WithRSA";
//私钥
private static final String privateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANF/IIsbi9+v5V0V" +
"lXeDWp3LlWNXf1gQ3EYjbdj4qMJJoVaLUv2T6fsQq4MTGO6h0HaPQPb80g2VXXgt" +
"wOBAGhTN5ifi8VLkHp8h+sU3/hmR2q3eyUeUEaX8t53leWQiI462O23bysectI5l" +
"mqzkL/68LTzSpu8z308XSWOFdXKVAgMBAAECgYA7qjIxjCndDjKLvT7xZ8aiFD46" +
"qcvJ4BtsGmEJn2Ao3WGGzW1YbQ0BhTDjxseeBxXg/lGpRj3ownZ5aMZ616bVa8xF" +
"dI9agmElnM78RhUgJNtOelY4yB3vMQmdpYxhA6Zp+Z10DCvKyxiostqrLw/zdSr8" +
"ZkmRof1DUMml5FZzYQJBAPe8zQsHqXeGSjvAEpPpBX87Wzc7/T6tObuOokxOrWfP" +
"mZFO7qy2rsdOkmn8LghIhzvOognoT6DiBhO4UIgJAMkCQQDYe9Kfju7JhbhE0SRh" +
"+1hSRRV8+6vRmpTIxJpy+AN3Oc6oeiQ6UE7/ZxyeZ0pDgmBZGJDBHoX1rIYrsuMm" +
"grVtAkEA0YwHO88tTwZuAABFNoshtS71xtCdMsi/TqAlM7pQ/sAgu0IyrDCRwc/6" +
"FF/UZ/lBOhtcAFlaEVFdpox+wbIr0QJBAM9BJHF7ruKiMbs4m2Nu9ay11Q+2BlYC" +
"b0US7Gb7SJ4hatdjMEHf1vGvrvd8Hd4p+MHzwcoRxeBhToaRmeSpqLUCQFFTCNRl" +
"E/0Qo8hKLJlu8NpN00/VznTp+llGsSelmpOJ3QVWWoFR4egxfkvS5k+lU3Xwwu4l" +
"jXh7gLxPRfTprgk=";
//公钥
private static final String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRfyCLG4vfr+VdFZV3g1qdy5Vj\n" +
"V39YENxGI23Y+KjCSaFWi1L9k+n7EKuDExjuodB2j0D2/NINlV14LcDgQBoUzeYn" +
"4vFS5B6fIfrFN/4Zkdqt3slHlBGl/Led5XlkIiOOtjtt28rHnLSOZZqs5C/+vC08" +
"0qbvM99PF0ljhXVylQIDAQAB";
/**
* 使用私钥给入参签名
* @param param 签名的数据
* @return 返回入参签名16进制字符串
* */
public static String sign(String param) {
try {
//获取privatekey
byte[] privateKeyByte = new Base64().decode(privateKey);
KeyFactory keyfactory = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec encoderule = new PKCS8EncodedKeySpec(privateKeyByte);
PrivateKey key = keyfactory.generatePrivate(encoderule);
//用私钥给入参加签
Signature sign = Signature.getInstance(SIGN_ALGORITHMS);
sign.initSign(key);
sign.update(param.getBytes());
byte[] signature = sign.sign();
//将签名的入参转换成16进制字符串
return bytesToHexStr(signature);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 用公钥验证签名
* @param param 入参
* @param signature 使用私钥签名的入参字符串
* @param publicKey 公钥
* @return 返回验证结果
* */
public static boolean verifyRes(String param,String signature,String publicKey){
try {
//获取公钥
KeyFactory keyFactory=KeyFactory.getInstance("RSA");
byte[] publicKeyByte= new Base64().decode(publicKey);
X509EncodedKeySpec encodeRule=new X509EncodedKeySpec(publicKeyByte);
PublicKey key= keyFactory.generatePublic(encodeRule);
//用获取到的公钥对 入参中未加签参数param入参中的加签之后的参数signature进行验签
Signature sign=Signature.getInstance(SIGN_ALGORITHMS);
sign.initVerify(key);
sign.update(param.getBytes());
//将16进制码转成字符数组
byte[] hexByte = hexStrToBytes(signature);
//验证签名
return sign.verify(hexByte);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* byte数组转换成十六进制字符串
* @param bytes byte数组
* @return 返回十六进制字符串
*/
private static String bytesToHexStr(byte[] bytes) {
StringBuffer stringBuffer = new StringBuffer("");
for (int i = 0; i < bytes.length; ++i) {
stringBuffer.append(Integer.toHexString(0x0100 + (bytes[i] & 0x00FF)).substring(1).toUpperCase());
}
return stringBuffer.toString();
}
/**
* 十六进制字符串转成byte数组
* @param hexStr 十六进制字符串
* @return 返回byte数组
* */
private static byte[] hexStrToBytes(String hexStr) {
byte[] bytes = new byte[hexStr.length() / 2];
for (int i = 0; i < bytes.length; i++) {
bytes[i] = (byte) Integer.parseInt(hexStr.substring(2 * i, 2 * i + 2), 16);
}
return bytes;
}
public static void main(String[] args) {
String param = "yanshao";
String sign = sign(param);
System.out.println("签名后的参数>>>"+sign);
System.out.println("验证结果>>>"+verifyRes(param,sign,publicKey));
}
}
\ No newline at end of file
......@@ -16,7 +16,6 @@ import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
......@@ -24,9 +23,9 @@ import java.util.*;
/**
* @ClassName: HttpClient
* @Auther: 杨洋
* @Auther: yangyang
* @Description: java类作用描述
* @CreateDate: 2021-03-18
* @CreateDate: 2022-04-28
* @Version: 1.0
*/
@Component
......@@ -161,4 +160,66 @@ public class TokenUtils {
}
return resultString;
}
// 海南凯亚token获取
public static String getHnKyToken(){
String result_token = "";
try{
//先比较已有token是否过期
long nowtime = new Date().getTime();
//获取绝对路径下的token属性文件
String token= PropertieUtil.readTokenValue("tokenKy",tokenPath);;
String expiration =PropertieUtil.readTokenValue("expirationKy",tokenPath);
if(StringUtils.isEmpty(token) || StringUtils.isEmpty(expiration)){
result_token=readeWriteHnKyToken(nowtime);
}else{
//token值已过期
if(nowtime > Long.valueOf(expiration)){
result_token=readeWriteHnKyToken(nowtime);
}else{
result_token = token;
}
}
}catch (Exception e){
e.printStackTrace();
logger.info(e.getMessage());
}
return result_token;
}
//读和写海南凯亚的token值
public static String readeWriteHnKyToken(long nowtime){
String result_token="";
//如果过期先获取新的token值
Map headerMap=new HashMap();
String username =PropertieUtil.readTokenValue("usernameKy",tokenPath);
String token_url =PropertieUtil.readTokenValue("token_url",tokenPath);
String clientUid = getClientUid(token_url);// 随机码
String password =RsaUtil.sign(clientUid+"."+username);// 随机码+“.”+用户名 RSA私钥进行SHA1WithRSA数字签名
JSONObject object = new JSONObject();
object.put("username", username);
object.put("password", password);
object.put("clientUid", clientUid);
try {
String resultString = doPostUrlEncodedFormEntity(token_url+"/auth/login",headerMap,JSONObject.toJSONString(object));
if (!StringUtils.isEmpty(resultString)) {
JSONObject result=JSONObject.parseObject(resultString);
result_token = result.getString("authorization");
String expires_in = result.getString("expiresTime");//有效时间段 单位为秒 1800秒
String result_expiration = nowtime+Integer.parseInt(expires_in)*1000+"";
//写入新的token值和本次token的过期时间
PropertieUtil.writeTokenProperties(tokenPath, "tokenKy", result_token);
PropertieUtil.writeTokenProperties(tokenPath, "expirationKy", result_expiration);
}
}catch (Exception e){
e.printStackTrace();
logger.info("获取token错误"+e.getMessage());
}
return result_token;
}
// 获取海南凯亚的clientUid
public static String getClientUid(String token_url){
return com.founder.commonutils.util.HttpUtil.doGet(token_url+"/auth/getClientUid");
}
}
......@@ -15,10 +15,16 @@ token=
#\u8FC7\u671F\u65F6\u95F4
expiration=
####################云天励飞请求token配置参数##结束#################
####################云天励飞开始########################
image_url=http://26.3.12.56:8083
####################云天励飞结束########################
####################海南凯亚请求token配置参数##开始#################
token_urlKy=http://74.10.30.174:18093
#body
usernameKy=diapp-digitaldf-xx
#token\u503C
tokenKy=
#\u8FC7\u671F\u65F6\u95F4
expirationKy=
####################海南凯亚请求token配置参数##结束#################
package com.founder.peopleapi.controller;
import com.founder.commonutils.carEntity.CarKkXxParams;
import com.founder.commonutils.peopleEntity.CameraFaceTask;
import com.founder.commonutils.peopleEntity.FaceSearchParam;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.commonutils.util.TokenUtils;
import com.founder.peopleapi.service.ImageService;
import com.founder.servicebase.logs.OperLog;
import com.founder.servicebase.logs.OperationType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
/**
* <p>
* 人像相关接口管理
* </p>
*
* @author yangyang
* @since 2022-04-28
*/
@Api(description = "第三方图像接口管理-海南")
@RestController
@RequestMapping("/image")
@Component
public class ImageController {
@Autowired
private ImageService imageService;
@OperLog(message = "token获取",operation = OperationType.QUERY)
@ApiOperation(value = "token获取")
@PostMapping("/token")
public MapRestResult getToken() {
//获取token
String accessToken = TokenUtils.getHnKyToken();
return MapRestResult.build(202,"成功获取token信息",accessToken);
}
//@OperLog(message = "人脸动态检索接口",operation = OperationType.QUERY)
@ApiOperation(value = "人脸动态检索接口")
@PostMapping(value = "/getFaceImageByUploadImage")
public MapRestResult getFaceIdsByUploadImage(@RequestPart(value = "files") MultipartFile[] files, FaceSearchParam faceSearchParam) {
long startTime=new Date().getTime();
MapRestResult result=imageService.getFaceImageByUploadImage(files,faceSearchParam);
long endTime=new Date().getTime();
long timeDiffer=endTime-startTime;
System.out.println("人脸检索**请求时长**********"+timeDiffer+"毫秒");
return result;
}
//@OperLog(message = "人像回溯接口",operation = OperationType.QUERY)
@ApiOperation(value = "人像回溯接口")
@PostMapping(value = "/sendTask")
public MapRestResult sendTask(@RequestBody CameraFaceTask cameraFaceTask) {
return imageService.sendTask(cameraFaceTask);
}
//@OperLog(message = "范围内人像点位数据接口",operation = OperationType.QUERY)
@ApiOperation(value = "范围内人像点位数据接口")
@PostMapping(value = "/selectRxXx")
public MapRestResult selectRxXx(@RequestBody CarKkXxParams carKkXxParams) {
return imageService.selectRxXx(carKkXxParams.getQsjd(),carKkXxParams.getQswd(),carKkXxParams.getJsjd(),carKkXxParams.getJswd());
}
//@OperLog(message = "人像比对接口",operation = OperationType.QUERY)
@PostMapping("/getRxbd")
@ApiOperation(value = "发起人像比对任务", notes = "发起人像比对任务")
public MapRestResult getRxbd(
@RequestParam(value = "file", required = false) MultipartFile file,@RequestParam(value = "base64Img", required = false) String base64Img,@RequestParam(value = "fjmc", required = false) String fjmc,@RequestParam(value = "threshold", required = false) String threshold,@RequestParam(value = "topNumber", required = false) String topNumber,@RequestParam(value = "model", required = false) String model, HttpServletRequest request) {
return imageService.getFqRxbdjgrw(file, base64Img,request, fjmc, threshold, topNumber, model);
}
//@OperLog(message = "人像比对接口",operation = OperationType.QUERY)
@PostMapping("/getAllCamera")
@ApiOperation(value = "获取所有摄像机落地", notes = "获取所有摄像机落地")
public MapRestResult getAllCamera() {
return imageService.getAllCamera();
}
}
package com.founder.peopleapi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.founder.commonutils.peopleEntity.Camera;
import com.founder.commonutils.peopleEntity.CameraData;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import java.util.List;
@Mapper
@Component
public interface CameraInfoMapper extends BaseMapper<Camera> {
List<Camera> getCameraInfoByIds(@Param(value = "cameraIds") String cameraIds);
List<Camera> getCameraInfoByQsJwd(@Param(value = "qsjd") String qsjd,
@Param(value = "qswd") String qswd,
@Param(value = "jsjd") String jsjd,
@Param(value = "jswd") String jswd);
int getCameraInfoByDeviceId(@Param(value = "deviceId") String deviceId);
void insertCameraInfo(CameraData cameraData);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.founder.publicapi.mapper.CameraInfoMapper">
<!--根据起始经纬度获取人像点位数据-->
<select id="getCameraInfoByIds" parameterType="java.lang.String" resultType="com.founder.commonutils.peopleEntity.Camera">
select
t.ID as cameraId,
t.NAME as cameraName,
(select name from sys_dictitem where groupid = 'CODE_UNIT' and code = substr(t.camera_code,0,6)||'000000') as districtCodeName,
substr(t.camera_code,0,6)|| '000000' as districtCode,
(select name from sys_dictitem where groupid = 'CODE_XZQH' and code = substr(t.camera_code,0,6)) as areaCodeName,
substr(t.camera_code,0,6) as areaCode,
t.CITY as areaName,
x as x,
y as y,
NAME as cameraType
from tb_zy_camera t where 1=1
<if test="cameraIds!=null and cameraIds!=''">and id in ${cameraIds}</if>
</select>
<!--根据起始经纬度获取人像点位数据-->
<select id="getCameraInfoByQsJwd" parameterType="java.lang.String" resultType="com.founder.commonutils.peopleEntity.Camera">
select
ID as cameraId,
NAME as cameraName,
CITY as areaName,
(select name from sys_dictitem where groupid = 'CODE_UNIT' and code = substr(t.camera_code,0,6)||'000000') as districtCodeName,
substr(t.camera_code,0,6)|| '000000' as districtCode,
(select name from sys_dictitem where groupid = 'CODE_XZQH' and code = substr(t.camera_code,0,6)) as areaCodeName,
substr(t.camera_code,0,6) as areaCode,
x as x,
y as y,
NAME as cameraType
from tb_zy_camera t where 1=1
<if test="qsjd!=null and qsjd!='' and qsjd!=null and qsjd!='' and qswd!=null and qswd!='' and jswd!=null and jswd!=''">
AND x<![CDATA[>=]]>#{qsjd,jdbcType=VARCHAR} AND x<![CDATA[<=]]>#{jsjd,jdbcType=VARCHAR}
AND y<![CDATA[>=]]>#{qswd,jdbcType=VARCHAR} AND y<![CDATA[<=]]>#{jswd,jdbcType=VARCHAR}
</if>
</select>
<!--根据摄像头id获取摄像头-->
<select id="getCameraInfoByDeviceId" parameterType="java.lang.String" resultType="java.lang.Integer">
select
count(*)
from tb_zy_camera t where deviceId = #{deviceId}
</select>
<!--摄像头数据落地-->
<insert id="insertCameraInfo" parameterType="com.founder.commonutils.peopleEntity.CameraData">
INSERT INTO tb_zy_camera (
deviceId,deviceName,longitude,latitude,deviceAddress,gbCode;
)
VALUES(
#{deviceId, jdbcType=VARCHAR}
,#{deviceName, jdbcType=VARCHAR}
,#{longitude, jdbcType=VARCHAR}
,#{latitude, jdbcType=VARCHAR}
,#{deviceAddress, jdbcType=VARCHAR}
,#{gbCode, jdbcType=VARCHAR}
)
</insert>
</mapper>
package com.founder.peopleapi.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;
import javax.servlet.http.HttpServletRequest;
/**
* <p>
* 云天接口 服务类
* </p>
*
* @author yangyang
* @since 2021-03-19
*/
public interface ImageService {
MapRestResult getFaceImageByUploadImage(MultipartFile[] files, FaceSearchParam faceSearchParam);
MapRestResult sendTask(CameraFaceTask cameraFaceTask);
MapRestResult selectRxXx(String qsjd, String qswd, String jsjd, String jswd);
MapRestResult getFqRxbdjgrw(MultipartFile file, String base64Img, HttpServletRequest request, String fjmc, String threshold, String topNumber, String model);
MapRestResult getAllCamera();
}
package com.founder.peopleapi.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.founder.commonutils.peopleEntity.*;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.commonutils.util.DataUtil;
import com.founder.commonutils.util.HttpClient;
import com.founder.commonutils.util.HttpUtil;
import com.founder.commonutils.util.TokenUtils;
import com.founder.peopleapi.mapper.CameraInfoMapper;
import com.founder.peopleapi.service.ImageService;
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;
import sun.misc.BASE64Encoder;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/*
*
* <p>
* 凯亚接口 服务实现类
* </p>
*
* @author yangyang
* @since 2022-04-28
*/
@Service
public class ImageServiceImpl implements ImageService {
@Value("${imageUrl}")
private String imageUrl;
@Autowired
private CameraInfoMapper cameraInfoDao;
@Override
public MapRestResult getFaceImageByUploadImage(MultipartFile[] files, FaceSearchParam faceSearchParam){
MapRestResult result = null;
Map returnMap=new HashMap();
// 前台传送的参数不为空,上传的照片不为空
try {
if (null != faceSearchParam && null != files && files.length > 0) {
List<FaceSearchResult> resultListAll = new ArrayList<>();
for (MultipartFile file : files) {//轮询检索照片
//判断文件格式
String fileName=file.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;
}
}
BASE64Encoder base64Encoder = new BASE64Encoder();
faceSearchParam.setBase64Img(base64Encoder.encode(file.getBytes()));
List<FaceSearchResult> resultList=handelCameraTrialInfo(faceSearchParam);
resultListAll.addAll(resultList);
}
returnMap.put("data",resultListAll);
returnMap.put("total",resultListAll.size());
result = MapRestResult.build(200,"成功获取人像检索信息",null,returnMap);
}else{
result = MapRestResult.build(1001,"请上传照片",null,null);
}
}catch (Exception e){
result = MapRestResult.build(500,"获取人像检索信息失败",null,null);
e.printStackTrace();
}
return result;
}
/**
* 发送时空回溯任务
* @param cameraFaceTask
* @return
*/
public MapRestResult sendTask(CameraFaceTask cameraFaceTask){
MapRestResult mapRestResult=null;
try {
// 获取时空回溯结果
List<String> sourceIds= cameraFaceTask.getSourceIds();
if(null!=sourceIds&&sourceIds.size()>0){
mapRestResult = sendTaskAndGetResult(cameraFaceTask);
}else{
mapRestResult=MapRestResult.build(1001,"请选择至少一个摄像头",null,null);
}
}catch (Exception e){
e.printStackTrace();
mapRestResult=MapRestResult.build(500,"获取人像信息失败",null,null);
}
return mapRestResult;
}
/**
*人像轨迹查询
* @param faceSearchParam
* @return
*/
public List<FaceSearchResult> handelCameraTrialInfo(FaceSearchParam faceSearchParam){
JSONObject params = new JSONObject();// 请求参数
List<FaceSearchResult> cameraFaceResults=new ArrayList<>();// 存储返回结果
//请求参数
params.put("imgFace",faceSearchParam.getBase64Img());// 图片base64
params.put("imgType",2);// 比对图片类型1:url 全 路 径2:base64
params.put("thresholdMin",0.9);// 最低相似度,默认0.95,最低 0.90
params.put("captureBeginTime",faceSearchParam.getStarttime());// 抓拍开始时间
params.put("captureEndTime",faceSearchParam.getEndtime());// 抓拍结束时间
params.put("queryCount",100);// 匹配最大数量, 默认10,最大100
try {
String url = imageUrl+"/govServerWeb/capture/captureTrack";
String resultString = HttpClient.doPostJson(url, getToken(), String.valueOf(params));
if (null != resultString) {//如果返回结果不为空
JSONObject result = JSONObject.parseObject(resultString);
JSONArray jsonArray=result.getJSONArray("data");
if(null!=jsonArray&&jsonArray.size()>0){
for(Object o:jsonArray){
// 返回结果和前端一致
FaceSearchResult faceSearchResult=new FaceSearchResult();
JSONObject jsonObject=(JSONObject) o;
String deviceId=jsonObject.getString("deviceId");// 像机id
String deviceName=jsonObject.getString("deviceName");// 像机名称
String x=jsonObject.getString("longitude");// 经度
String y=jsonObject.getString("latitude");// 纬度
String deviceAddress=jsonObject.getString("deviceAddress");// 像机地址
String threshold=jsonObject.getString("threshold");// 相似度
String captureTime=jsonObject.getString("captureTime");// 抓拍时间
String captureUrl= jsonObject.getString("captureUrl");// 抓拍人脸地址
String panoramaUrl=jsonObject.getString("panoramaUrl");// 全景抓拍地址
faceSearchResult.setCameraId(deviceId);
faceSearchResult.setCameraName(deviceName);
faceSearchResult.setAddress(deviceAddress);
faceSearchResult.setX(x);
faceSearchResult.setY(y);
faceSearchResult.setFile(captureUrl);
faceSearchResult.setImageUrl(panoramaUrl);
faceSearchResult.setTime(captureTime);
faceSearchResult.setScore(threshold);
cameraFaceResults.add(faceSearchResult);
}
}
}
}catch (Exception e){
e.printStackTrace();
System.out.println("获取接口错误"+e.getMessage());
}
return cameraFaceResults;
}
/**
*查询一段时间内所有像机抓拍
* @param cameraFaceTask
* @return
* @throws Exception
*/
public MapRestResult sendTaskAndGetResult(CameraFaceTask cameraFaceTask) {
JSONObject params = new JSONObject();// 请求参数
MapRestResult mapRestResult=null;
List<CameraFaceResult> cameraFaceResults=new ArrayList<>();
//请求参数
params.put("deviceIds",cameraFaceTask.getSourceIds());// 像机id集合
params.put("captureBeginTime",cameraFaceTask.getStarttime());// 抓拍开始时间
params.put("captureEndTime",cameraFaceTask.getEndtime());// 抓拍结束时间
try {
String url = imageUrl + "/govServerWeb/capture/allDeviceCapture";
String jsonObjectStr=JSONObject.toJSONString(cameraFaceTask);
String resultString = HttpClient.doPostJson(url, getToken(), jsonObjectStr);
if (null != resultString) {//如果返回结果不为空
JSONObject result = JSONObject.parseObject(resultString);
JSONArray jsonArray = result.getJSONArray("data");
if (null != jsonArray && jsonArray.size() > 0) {
for (Object o : jsonArray) {
// 返回结果和前端一致
CameraFaceResult cameraFaceResult = new CameraFaceResult();
JSONObject jsonObject = (JSONObject) o;
String deviceId=jsonObject.getString("deviceId");// 像机id
String deviceName=jsonObject.getString("deviceName");// 像机名称
String x=jsonObject.getString("longitude");// 经度
String y=jsonObject.getString("latitude");// 纬度
String deviceAddress=jsonObject.getString("deviceAddress");// 像机地址
String threshold=jsonObject.getString("threshold");// 相似度
String captureTime=jsonObject.getString("captureTime");// 抓拍时间
String captureUrl= jsonObject.getString("captureUrl");// 抓拍人脸地址
String panoramaUrl=jsonObject.getString("panoramaUrl");// 全景抓拍地址
cameraFaceResult.setCameraId(deviceId);
cameraFaceResult.setTime(captureTime);
cameraFaceResult.setFaceUrl(captureUrl);
cameraFaceResult.setImageUrl(panoramaUrl);
cameraFaceResult.setScore(threshold);
cameraFaceResult.setAddress(deviceAddress);
cameraFaceResult.setX(x);
cameraFaceResult.setY(y);
cameraFaceResult.setCameraName(deviceName);
cameraFaceResults.add(cameraFaceResult);
}
}
}
}catch (Exception e){
e.printStackTrace();
mapRestResult=MapRestResult.build(500,"时空回溯结果返回失败",null,null);
}
return mapRestResult;
}
@Override
public MapRestResult selectRxXx(String qsjd, String qswd, String jsjd, String jswd) {
List<Camera> cameras = cameraInfoDao.getCameraInfoByQsJwd(qsjd,qswd,jsjd,jswd);
return MapRestResult.build(200,"获取人像点位信息",cameras.size(),cameras);
}
@Override
public MapRestResult getFqRxbdjgrw(MultipartFile file, String base64Img, HttpServletRequest request, String fjmc, String threshold, String topNumber, String model) {
List<Map<String, Object>> list = new ArrayList<>();// 返回结果
JSONObject params = new JSONObject();// 请求参数
MapRestResult mapRestResult = null;
//请求参数
params.put("compareFace", base64Img);// 像机id集合
params.put("faceType", 2);// 1:url 全 路 径 2:base64
params.put("thresholdMin", 0.85);// 最低相似度,不能 低 于0.85, 默认0.85
try {
String url = imageUrl + "/govServerWeb/personFace/compareFace";
String resultString = HttpClient.doPostJson(url, getToken(), String.valueOf(params));
if (null != resultString) {//如果返回结果不为空
JSONObject result = JSONObject.parseObject(resultString);
JSONArray jsonArray = result.getJSONArray("data");
if (null != jsonArray && jsonArray.size() > 0) {
for (Object o : jsonArray) {
// 返回结果和前端一致
JSONObject jsonObject = (JSONObject) o;
String name = jsonObject.getString("name");// 对比人员姓名
String certNo = jsonObject.getString("certNo");// 对比人员证件号
String faceUrl = jsonObject.getString("faceUrl");// 对比人员图片路径
String similarity = jsonObject.getString("threshold");// 对比人员相似度(0-1)
String faceDbName = jsonObject.getString("deviceAddress");// 对比人员所在人像库
Map<String, Object> maphn = new HashMap<>();
maphn.put("xm", name);
maphn.put("cid", certNo);
maphn.put("score", similarity);
maphn.put("repositoryName", faceDbName);
maphn.put("nativePlace", faceDbName);
maphn.put("nativePlaceAddr", faceDbName);
maphn.put("repositoryId", faceDbName);
maphn.put("file", faceUrl);
list.add(maphn);
}
}
}
} catch (Exception e) {
e.printStackTrace();
mapRestResult = MapRestResult.build(500, "时空获取人像比对结果返回失败", null, null);
}
return mapRestResult;
}
@Override
public MapRestResult getAllCamera() {
MapRestResult mapRestResult = null;
try {
String url = imageUrl + "/govServerWeb/camera/allDevice";
String resultString = HttpUtil.doGetKyCamera(url);
if (null != resultString) {// 如果返回结果不为空
JSONArray jsonArray = JSONObject.parseObject(resultString).getJSONArray("data");
List<CameraData> listCameraAll = jsonArray.toJavaList(CameraData.class);
// 数据批量落地
float number=listCameraAll.size()/1000+1;
int flnum= (int) Math.ceil(number);
long start = System.currentTimeMillis();
// 数据批量分流
List<List<CameraData>> pllist= null;
try {
pllist = DataUtil.pldata(listCameraAll,flnum);
ExecutorService executorService = Executors.newCachedThreadPool();//按需分配线程池
// 入库成功list
List<CameraData> sucesslist = new ArrayList<>();
// 全流式处理转换成CompletableFuture[]
CompletableFuture[] cfs = pllist.stream()
.map(camera -> CompletableFuture.supplyAsync(() -> saveCamera(camera),executorService)
.handle((t, throwable) ->{
if(throwable!=null){
System.out.println("摄像头入库数据失败=============="+throwable);
return t;
}else{
System.out.println("摄像头入库数据成功=============="+t.toString());
sucesslist.addAll(t);
return t;
}
} )
).toArray(CompletableFuture[]::new);
CompletableFuture.allOf(cfs).join();
System.out.println("摄像头入库成功===================="+sucesslist.size());
System.out.println("耗时="+(System.currentTimeMillis()-start));
} catch (Exception e) {
e.printStackTrace();
return MapRestResult.build(200,"摄像头信息入库失败",e);
}
}
} catch (Exception e) {
e.printStackTrace();
mapRestResult = MapRestResult.build(500, "时空获取所有摄像头失败", "1", e);
}
return mapRestResult;
}
/**
* 摄像头全量入库
* @param listCameraAll
* @return
*/
public List<CameraData> saveCamera(List<CameraData> listCameraAll){
List<CameraData> sucesslist = new ArrayList<>();
listCameraAll.forEach(p ->{
try{
// 入库前先根据像机id查看库中是否存在 若不存在则插入
int count = cameraInfoDao.getCameraInfoByDeviceId(p.getDeviceId());
if(count == 0){
// 入库
cameraInfoDao.insertCameraInfo(p);
}
sucesslist.add(p);
}catch (Exception e){
e.printStackTrace();
System.out.println("入库失败===================="+p);
}
});
return sucesslist;
}
// token获取
public Map getToken(){
String token= TokenUtils.getHnKyToken();
Map herders=new HashMap();
//设置请求的header参数
herders.put("Authorization",token);
herders.put("Content-Type","application/json");
return herders;
}
}
......@@ -9,10 +9,12 @@ logging.level.root=INFO
#mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#oracle数据库连接
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@47.92.129.99:1560:orcl
spring.datasource.url=jdbc:oracle:thin:@10.184.17.3:1521:HNXZXT1
spring.datasource.username=XZXT
spring.datasource.password=XzPwd#11022
spring.datasource.password=XzxtPwd#46
#xml扫包
mybatis-plus.mapper-locations=classpath:com/founder/peopleapi/mapper/xml/*.xml
#单位
ssdw=460000000000
#海南凯亚人像请求公共地址
imageUrl=http://74.10.30.174:18093
\ No newline at end of file
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