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; } }