SdkToVehicleDetail.java 14.8 KB
package com.objecteye.websocket;

import com.objecteye.pojo.PendantParams;
import com.objecteye.pojo.PlatePlateNumParams;
import com.objecteye.pojo.RabbitMQVehicle;
import com.objecteye.pojo.VehicleDetails;
import com.objecteye.utils.RelationMappingUtil;
import com.objecteye.utils.VehicleDetailsUtils;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Author: lr
 * @Date: 2019/9/25 11:47
 * @Version 1.0
 * @Message:
 */
public class SdkToVehicleDetail {

    private static float sdkThreshold = 0.7F;  //sdk的阈值
    private static float cpsbThreshold = 0.99F;  //车牌识别的阈值
    private static String errorMsg = "识别异常";


    /**
     * 将SDK中的数据封装成VehicleDetails类
     */
    public static VehicleDetails sdktodetail(RabbitMQVehicle captureRedis) {

        VehicleDetails vehicleDetails = new VehicleDetails();
        //抓拍图片id
        String id = captureRedis.getId();
        vehicleDetails.setId(id);

        //抓拍图片url
        String picurl = captureRedis.getPicurl();
        vehicleDetails.setPicurl(picurl);

        double vehicle_detect_score1 = captureRedis.getVehicle_detect_score();
        String snapshotBase64 = "";
        if (vehicle_detect_score1 > sdkThreshold) {
            //增加车头的检测坐标值
            int[] vehicle_detect_syRectParam1 = captureRedis.getVehicle_detect_syRectParam();
            //获取抓拍图
            snapshotBase64 = VehicleDetailsUtils.picToSnapshot(picurl, vehicle_detect_syRectParam1[1], vehicle_detect_syRectParam1[2], vehicle_detect_syRectParam1[3], vehicle_detect_syRectParam1[0]);
        }
        vehicleDetails.setSnapshot(snapshotBase64);

        //车辆类型
        String vehicle_recg_type = errorMsg;
        //品牌型号
        String vehicle_recg_info = errorMsg;
        double vehicle_recg_name_score = captureRedis.getVehicle_recg_name_score();
        if (vehicle_recg_name_score > sdkThreshold) {
            StringBuilder brand = new StringBuilder();
            vehicle_recg_type = captureRedis.getVehicle_recg_type();
            String vehicle_recg_brand = captureRedis.getVehicle_recg_brand();
            String vehicle_recg_subbrand = captureRedis.getVehicle_recg_subbrand();
            String vehicle_recg_issue_year = captureRedis.getVehicle_recg_issue_year();
            if (vehicle_recg_brand.length() != 0) {
                brand = brand.append(vehicle_recg_brand);
            }
            if (vehicle_recg_subbrand.length() != 0) {
                brand = brand.append("-" + vehicle_recg_subbrand);
            }
            if (vehicle_recg_issue_year.length() != 0) {
                brand = brand.append("-" + vehicle_recg_issue_year);
            }
            vehicle_recg_info = brand.toString();
        }
        vehicleDetails.setVehicle_recg_type(vehicle_recg_type);
        vehicleDetails.setVehicle_recg_brand(vehicle_recg_info);
        vehicleDetails.setVehicle_recg_name_score(Float.parseFloat(String.format("%.2f", vehicle_recg_name_score)));

        //车辆颜色
        double vehicle_color_score = captureRedis.getVehicle_color_score();
        String vehicleColor = errorMsg;
        if (vehicle_color_score > sdkThreshold) {
            int vehicle_color_index = captureRedis.getVehicle_color_index();
            vehicleColor = RelationMappingUtil.getVehicleColor(vehicle_color_index);
        }
        vehicleDetails.setVehicle_color(vehicleColor);

        //车牌相关信息
        double vehicle_plate_numScore = captureRedis.getVehicle_plate_numScore();
        String vehiclePlateType = errorMsg;
        String vehiclePlateNum = errorMsg;
        String vehiclePlateNumStatus = "无";
        if (vehicle_plate_numScore > cpsbThreshold) { //按总体的车牌分数衡量,如果总体车牌分数大于0.99,默认车牌完好
            int vehicleplatetype = captureRedis.getVehicleplatetype();
            vehiclePlateType = RelationMappingUtil.getVehiclePlateType(vehicleplatetype);
            PlatePlateNumParams[] vehicle_plate_plateNumParams = captureRedis.getVehicle_plate_plateNumParams();
            int length = vehicle_plate_plateNumParams.length;
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < length; i++) {
                String character = vehicle_plate_plateNumParams[i].getCharacter();
                sb.append(character);
            }
            vehiclePlateNum = sb.toString();
            vehiclePlateNumStatus = "有";
        }
        vehicleDetails.setVehicle_plate_type(vehiclePlateType); //车牌类型
        vehicleDetails.setVehicle_plate_detectScore(Float.parseFloat(String.format("%.2f", vehicle_plate_numScore))); //车牌可信度
        vehicleDetails.setVehicle_plate_hphm(vehiclePlateNum); //车牌号码
        vehicleDetails.setVehicle_plate_status(vehiclePlateNumStatus); //车牌状态

        //抓拍时间
        Long pictime = captureRedis.getPictime();
        Date date = new Date(pictime);
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateString = dateFormat.format(date);
        vehicleDetails.setPictime(dateString);

        String longitude = captureRedis.getLongitude();
        vehicleDetails.setLongitude(longitude);
        String latitude = captureRedis.getLatitude();
        vehicleDetails.setLatitude(latitude);

        //违规信息(司机与副驾)
        String driverStatus = "";
        StringBuilder driverIll = new StringBuilder();
        String copilotStatus = "";
        StringBuilder copilotIll = new StringBuilder();
        //司机
        double vehicle_illegal_driver_person_confidence = captureRedis.getVehicle_illegal_driver_person_confidence();
        if (vehicle_illegal_driver_person_confidence > sdkThreshold) {
            String driverPersonStatus = null;
            int vehicle_illegal_driver_person_status = captureRedis.getVehicle_illegal_driver_person_status();
            switch (vehicle_illegal_driver_person_status) {
                case 1003:
                    driverPersonStatus = "无人";
                    break;
                case 1004:
                    driverPersonStatus = "有人";
                    break;
                default:
                    driverPersonStatus = "有无人未知";
            }
            driverIll.append(driverPersonStatus).append("、");
        }

        double vehicle_illegal_driver_belt_confidence = captureRedis.getVehicle_illegal_driver_belt_confidence();
        if (vehicle_illegal_driver_belt_confidence > sdkThreshold) {
            String driverBeltStatus = null;
            int vehicle_illegal_driver_belt_status = captureRedis.getVehicle_illegal_driver_belt_status();
            switch (vehicle_illegal_driver_belt_status) {
                case 1000:
                    driverBeltStatus = "未系安全带";
                    break;
                case 1001:
                    driverBeltStatus = "系安全带";
                    break;
                default:
                    driverBeltStatus = "安全带未知";
            }
            driverIll.append(driverBeltStatus).append("、");
        }

        double vehicle_illegal_driver_smoke_confidence = captureRedis.getVehicle_illegal_driver_smoke_confidence();
        if (vehicle_illegal_driver_smoke_confidence > sdkThreshold) {
            String driverSmokeStatus = null;
            int vehicle_illegal_driver_smoke_status = captureRedis.getVehicle_illegal_driver_smoke_status();
            switch (vehicle_illegal_driver_smoke_status) {
                case 1000:
                    driverSmokeStatus = "抽烟";
                    break;
                case 1001:
                    driverSmokeStatus = "未抽烟";
                    break;
                default:
                    driverSmokeStatus = "抽烟未知";
            }
            driverIll.append(driverSmokeStatus).append("、");
        }

        double vehicle_illegal_driver_phone_confidence = captureRedis.getVehicle_illegal_driver_phone_confidence();
        if (vehicle_illegal_driver_phone_confidence > sdkThreshold) {
            String driverPhoneStatus = null;
            int vehicle_illegal_driver_phone_status = captureRedis.getVehicle_illegal_driver_phone_status();
            switch (vehicle_illegal_driver_phone_status) {
                case 1000:
                    driverPhoneStatus = "打电话";
                    break;
                case 1001:
                    driverPhoneStatus = "未打电话";
                    break;
                default:
                    driverPhoneStatus = "打电话未知";
            }
            driverIll.append(driverPhoneStatus).append("、");
        }
        String driverIllInfo = driverIll.toString();
        int lengths = driverIllInfo.length();
        if (lengths > 0) {
            driverStatus = driverIllInfo.substring(0, lengths - 1);
        }


        //副驾
        double vehicle_illegal_copilot_person_confidence = captureRedis.getVehicle_illegal_copilot_person_confidence();
        if (vehicle_illegal_copilot_person_confidence > sdkThreshold) {
            String copilotPersonStatus = null;
            int vehicle_illegal_copilot_person_status = captureRedis.getVehicle_illegal_copilot_person_status();
            switch (vehicle_illegal_copilot_person_status) {
                case 1003:
                    copilotPersonStatus = "无人";
                    break;
                case 1004:
                    copilotPersonStatus = "有人";
                    break;
                default:
                    copilotPersonStatus = "有无人未知";
            }
            copilotIll.append(copilotPersonStatus).append("、");
        }


        double vehicle_illegal_copilot_belt_confidence = captureRedis.getVehicle_illegal_copilot_belt_confidence();
        if (vehicle_illegal_copilot_belt_confidence > sdkThreshold) {
            String copilotBeltStatus = null;
            int vehicle_illegal_copilot_belt_status = captureRedis.getVehicle_illegal_copilot_belt_status();
            switch (vehicle_illegal_copilot_belt_status) {
                case 1000:
                    copilotBeltStatus = "未系安全带";
                    break;
                case 1001:
                    copilotBeltStatus = "系安全带";
                    break;
                default:
                    copilotBeltStatus = "安全带未知";
            }
            copilotIll.append(copilotBeltStatus).append("、");
        }

        double vehicle_illegal_copilot_smoke_confidence = captureRedis.getVehicle_illegal_copilot_smoke_confidence();
        if (vehicle_illegal_copilot_smoke_confidence > sdkThreshold) {
            String copilotSmokeStatus = null;
            int vehicle_illegal_copilot_smoke_status = captureRedis.getVehicle_illegal_copilot_smoke_status();
            switch (vehicle_illegal_copilot_smoke_status) {
                case 1000:
                    copilotSmokeStatus = "抽烟";
                    break;
                case 1001:
                    copilotSmokeStatus = "未抽烟";
                    break;
                default:
                    copilotSmokeStatus = "抽烟未知";
            }
            copilotIll.append(copilotSmokeStatus).append("、");
        }

        double vehicle_illegal_copilot_phone_confidence = captureRedis.getVehicle_illegal_copilot_phone_confidence();
        if (vehicle_illegal_copilot_phone_confidence > sdkThreshold) {
            String copilotPhoneStatus = null;
            int vehicle_illegal_copilot_phone_status = captureRedis.getVehicle_illegal_copilot_phone_status();
            switch (vehicle_illegal_copilot_phone_status) {
                case 1000:
                    copilotPhoneStatus = "打电话";
                    break;
                case 1001:
                    copilotPhoneStatus = "未打电话";
                    break;
                default:
                    copilotPhoneStatus = "打电话未知";
            }
            copilotIll.append(copilotPhoneStatus).append("、");
        }

        String copilotIllInfo = copilotIll.toString();
        int lengthss = copilotIllInfo.length();
        if (lengthss > 0) {
            copilotStatus = copilotIllInfo.substring(0, lengthss - 1);
        }
        vehicleDetails.setVehicle_illegal_driver_status(driverStatus);
        vehicleDetails.setVehicle_illegal_copilot_status(copilotStatus);

        //获取车头照片
        double vehicle_detect_score = captureRedis.getVehicle_detect_score();
        Integer ctCenter = 0; //车头中间线,用于分割主副驾位置
        if (vehicle_detect_score > sdkThreshold) {
            int[] vehicle_detect_syRectParam = captureRedis.getVehicle_detect_syRectParam();
            Integer width = vehicle_detect_syRectParam[0];
            Integer left = vehicle_detect_syRectParam[2];
            ctCenter = left + (width / 2);
        }

        //车头信息
        //获取主副驾驶遮阳板、挂件、纸巾盒、转经筒
        PendantParams[] vehicle_pendant_params = captureRedis.getVehicle_pendant_Params();
        Integer count = captureRedis.getVehicle_pendant_count(); //车属性个数
        int njbNumber = 0;  //年检标数量
        String driverZYB = "无"; //主驾遮阳板
        String copilotZYB = "无"; //副驾遮阳板
        String gj = "无";  //挂件
        String zjh = "无";  //纸巾盒
        String zjt = "无"; //转经筒
        for (int i = 0; i < count; i++) {
            Double confidence = vehicle_pendant_params[i].getConfidence();
            if (confidence >= sdkThreshold) {
                Integer index = vehicle_pendant_params[i].getIndex();
                switch (index) {
                    case 3:
                        //判断主副驾驶
                        //获取遮阳板距离左边的距离
                        Integer zybLeft = vehicle_pendant_params[i].getSyrectparam()[i];
                        if (ctCenter != 0) {
                            if (zybLeft > ctCenter) {  //为主驾驶
                                driverZYB = "有";
                            } else {
                                copilotZYB = "有";
                            }
                        }
                    case 4:
                        njbNumber++;
                    case 5:
                        gj = "有";
                    case 6:
                        zjh = "有";
                    case 7:
                        zjt = "有";
                }
            }
        }
        vehicleDetails.setVehicle_driver_sunvisor(driverZYB);
        vehicleDetails.setVehicle_copilot_sunvisor(copilotZYB);
        vehicleDetails.setVehicle_annualInspectionStandard(String.valueOf(njbNumber));
        vehicleDetails.setVehicle_pendant(gj);
        vehicleDetails.setVehicle_tissuebox(zjh);
        vehicleDetails.setVehicle_prayerwheel(zjt);

        if (vehicleDetails != null) {
            return vehicleDetails;
        }
        return null;
    }
}