FaceUtils.java 4.83 KB
package com.objecteye.utils;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.objecteye.pojo.FaceInfoParam;
import com.objecteye.pojo.FacePosition;
import org.springframework.stereotype.Component;

/**
 * 人的工具类
 */
@Component
public class FaceUtils {

    //封装Human类
    public FaceInfoParam rabbitToFaceInfo(JSONObject VehicleFaceJson, String id) {
        FaceInfoParam faceInfoParam = new FaceInfoParam();

//        JSONObject VehicleFaceJson = JSONObject.parseObject(rabbitInfo);
        JSONObject faceJson = VehicleFaceJson.containsKey("faceInfoParam") ? VehicleFaceJson.getJSONObject("faceInfoParam") : null;
        if (faceJson != null) {
//            String id;    //人像id
//            faceInfoParam.setId(id);//因为从图片中提取到的人像没有id

//            String mattingData;   //抠图的base64
            String mattingData = faceJson.containsKey("mattingData") ? faceJson.getString("mattingData") : null;
            faceInfoParam.setMattingData(mattingData);

            JSONObject faceDetectInfoParam = faceJson.containsKey("faceDetectInfoParam") ? faceJson.getJSONObject("faceDetectInfoParam") : null;
            if (faceDetectInfoParam != null) {
                // FacePosition facePosition;  //脸部位置
                JSONObject face_position = faceDetectInfoParam.containsKey("face_position") ? faceDetectInfoParam.getJSONObject("face_position") : null;
                FacePosition facePosition = null;
                if (face_position != null) {
                    facePosition = new FacePosition();
                    facePosition.setLeft(face_position.containsKey("left") ? face_position.getInteger("left") : null);
                    facePosition.setTop(face_position.containsKey("top") ? face_position.getInteger("top") : null);
                    facePosition.setWidth(face_position.containsKey("width") ? face_position.getInteger("width") : null);
                    facePosition.setHeigth(face_position.containsKey("height") ? face_position.getInteger("height") : null);
                }
                faceInfoParam.setFacePosition(facePosition);

//            float facePosScore; //人脸框置信度
                float face_pos_score = faceDetectInfoParam.containsKey("face_pos_score") ? faceDetectInfoParam.getFloat("face_pos_score") : 0L;
                faceInfoParam.setFacePosScore(face_pos_score);

//            Integer quality; //质量评价
                int quality = faceDetectInfoParam.containsKey("quality") ? faceDetectInfoParam.getInteger("quality") : 0;
                faceInfoParam.setQuality(quality);

//            Integer  clarity;   //清晰度 0 - 100
                int clarity = faceDetectInfoParam.containsKey("clarity") ? faceDetectInfoParam.getInteger("clarity") : 0;
                faceInfoParam.setClarity(clarity);

//            Integer brightness; //亮度 0 - 255
                int brightness = faceDetectInfoParam.containsKey("brightness") ? faceDetectInfoParam.getInteger("brightness") : 0;
                faceInfoParam.setBrightness(brightness);

//            float roll; //姿态角--float
                float roll = faceDetectInfoParam.containsKey("roll") ? faceDetectInfoParam.getFloat("roll") : 0L;
                faceInfoParam.setRoll(roll);

//            float yaw;  //姿态角--float
                float yaw = faceDetectInfoParam.containsKey("yaw") ? faceDetectInfoParam.getFloat("yaw") : 0L;
                faceInfoParam.setYaw(yaw);

//            float pitch;    //姿态角--float
                float pitch = faceDetectInfoParam.containsKey("pitch") ? faceDetectInfoParam.getFloat("pitch") : 0L;
                faceInfoParam.setPitch(pitch);

//            float score; //人脸置信度-float
                float score = faceDetectInfoParam.containsKey("score") ? faceDetectInfoParam.getFloat("score") : 0L;
                faceInfoParam.setScore(score);
            }

            // float[] fea;  //人脸特征值 512位
            JSONArray feaJsonArr = faceJson.containsKey("fea") ? faceJson.getJSONArray("fea") : null;
            float[] fea = null;
            if (feaJsonArr != null && feaJsonArr.size() == 512) {
                fea = new float[512];
                for (int i = 0; i < 512; i++) {
                    fea[i] = feaJsonArr.getFloat(i);
                }
            }
            faceInfoParam.setFea(fea);

//            String retrieveKey;		//1vN检索key值
            String retrieveKey = faceJson.containsKey("retrieveKey") ? faceJson.getString("retrieveKey") : null;
            faceInfoParam.setRetrieveKey(retrieveKey);

            System.out.println("==================");

//            Integer label; //聚类下标
            int label = faceJson.containsKey("label") ? faceJson.getInteger("label") : 0;
            faceInfoParam.setLabel(label);
        }
        return faceInfoParam;
    }

}