MultiObjectDetect.java 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. package com.ydtech.utils.baidu;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.ydtech.core.page.HttpResult;
  5. import com.ydtech.modules.ins.model.CardUserInfo;
  6. import org.apache.commons.lang3.StringUtils;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.core.env.Environment;
  9. import org.springframework.stereotype.Component;
  10. import javax.annotation.PostConstruct;
  11. import java.net.URLEncoder;
  12. import java.util.HashMap;
  13. import java.util.Map;
  14. import java.util.Optional;
  15. /**
  16. * @ClassName MultiObjectDetect
  17. * @Description: TODO
  18. * @Author
  19. * @Date 2021/6/25
  20. **/
  21. @Component
  22. public class MultiObjectDetect {
  23. @Autowired
  24. private Environment environment;
  25. @Autowired
  26. private static Environment staticEnvironment;
  27. @PostConstruct
  28. public void init() {
  29. staticEnvironment = environment;
  30. }
  31. public static HttpResult multiObjectDetect(String imgData) {
  32. Map<String, Object> ma = new HashMap<>();
  33. // 请求url
  34. String url = staticEnvironment.getProperty("baidu.vehicle");
  35. try {
  36. // 本地文件路径
  37. imgData = imgData.substring(imgData.indexOf(",") + 1);
  38. String imgParam = URLEncoder.encode(imgData, "UTF-8");
  39. String param = "image=" + imgParam;
  40. // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
  41. String accessToken = AuthService.getAuth();
  42. String result = HttpUtil.post(url, accessToken, param);
  43. JSONObject ja = JSON.parseObject(result);
  44. String wordsResult = ja.getString("words_result");
  45. CardUserInfo cardUserInfo = new CardUserInfo();
  46. JSONObject jb = JSON.parseObject(wordsResult);
  47. cardUserInfo.setVIN(JSON.parseObject(jb.getString("车辆识别代号")).getString("words").toString());
  48. cardUserInfo.setIssueDate(JSON.parseObject(jb.getString("发证日期")).getString("words"));
  49. String hpzl = JSON.parseObject(jb.getString("车辆类型")).getString("words");
  50. if (hpzl != null && hpzl.equals("小型轿车")) {
  51. cardUserInfo.setPlateType("02");
  52. } else {
  53. cardUserInfo.setPlateType("01");
  54. }
  55. cardUserInfo.setMotorUsageTypeCode("8A");
  56. cardUserInfo.setMotorTypeCode("A0");
  57. if (!StringUtils.isEmpty(jb.getString("注册日期"))) {
  58. cardUserInfo.setRegisterDate(JSON.parseObject(jb.getString("注册日期")).getString("words"));
  59. } else if (!StringUtils.isEmpty(jb.getString("注册登记日期"))) {
  60. cardUserInfo.setRegisterDate(JSON.parseObject(jb.getString("注册登记日期")).getString("words"));
  61. }
  62. cardUserInfo.setEngine(JSON.parseObject(jb.getString("发动机号码")).getString("words"));
  63. cardUserInfo.setPlateNo(JSON.parseObject(jb.getString("号牌号码")).getString("words"));
  64. cardUserInfo.setBackOcrID(JSON.parseObject(jb.getString("品牌型号")).getString("words"));
  65. ma.put("carInfo", cardUserInfo);
  66. return HttpResult.ok("200", ma);
  67. } catch (Exception e) {
  68. e.printStackTrace();
  69. }
  70. return HttpResult.ok("201", ma);
  71. }
  72. public static JSONObject request(String images, String vehicleLicenseSide) {
  73. // 请求url
  74. String url = staticEnvironment.getProperty("baidu.vehicle");
  75. try {
  76. images = images.substring(images.indexOf(",") + 1);
  77. String imgParam = URLEncoder.encode(images, "UTF-8");
  78. String param = "image=" + imgParam + "&vehicle_license_side=" + vehicleLicenseSide;
  79. // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
  80. String accessToken = AuthService.getAuth();
  81. String result = HttpUtil.post(url, accessToken, param);
  82. JSONObject ja = JSON.parseObject(result);
  83. String wordsResult = ja.getString("words_result");
  84. return JSON.parseObject(wordsResult);
  85. } catch (Exception e) {
  86. e.printStackTrace();
  87. }
  88. return new JSONObject();
  89. }
  90. public static void drivingPermitFront(String images, CardUserInfo cardUserInfo) {
  91. if (StringUtils.isEmpty(images)) {
  92. return;
  93. }
  94. try {
  95. JSONObject jb = request(images, "front");
  96. cardUserInfo.setVIN(JSON.parseObject(jb.getString("车辆识别代号")).getString("words").toString());
  97. cardUserInfo.setIssueDate(JSON.parseObject(jb.getString("发证日期")).getString("words"));
  98. //先获取使用性质
  99. String useNature = JSON.parseObject(jb.getString("使用性质")).getString("words");
  100. String hpzl = JSON.parseObject(jb.getString("车辆类型")).getString("words");
  101. String s = Optional.ofNullable(hpzl).orElse("");
  102. if(s.contains("货车")) {
  103. cardUserInfo.setPlateType("A1");
  104. if("货运".equals(useNature)){
  105. cardUserInfo.setVehicleUse("04");
  106. }else if("非营运".equals(useNature)){
  107. cardUserInfo.setVehicleUse("08");
  108. }
  109. cardUserInfo.setCategory("H31");
  110. }else {
  111. cardUserInfo.setPlateType("A0");
  112. cardUserInfo.setCategory("K33");
  113. if("非营运".equals(useNature)){
  114. cardUserInfo.setVehicleUse("05");
  115. }
  116. }
  117. //判断使用性质
  118. cardUserInfo.setUseNature(JSON.parseObject(jb.getString("使用性质")).getString("words"));
  119. cardUserInfo.setMotorUsageTypeCode("8A");
  120. cardUserInfo.setMotorTypeCode("A0");
  121. if (!StringUtils.isEmpty(jb.getString("注册日期"))) {
  122. cardUserInfo.setRegisterDate(JSON.parseObject(jb.getString("注册日期")).getString("words"));
  123. } else if (!StringUtils.isEmpty(jb.getString("注册登记日期"))) {
  124. cardUserInfo.setRegisterDate(JSON.parseObject(jb.getString("注册登记日期")).getString("words"));
  125. }
  126. cardUserInfo.setEngine(JSON.parseObject(jb.getString("发动机号码")).getString("words"));
  127. cardUserInfo.setPlateNo(JSON.parseObject(jb.getString("号牌号码")).getString("words"));
  128. cardUserInfo.setBackOcrID(JSON.parseObject(jb.getString("品牌型号")).getString("words"));
  129. cardUserInfo.setCarOwner(JSON.parseObject(jb.getString("所有人")).getString("words"));
  130. } catch (Exception e) {
  131. e.printStackTrace();
  132. }
  133. }
  134. public static void conversionFront(CardUserInfo cardUserInfo, CardUserInfo cardUserInfoNew) {
  135. cardUserInfo.setVIN(cardUserInfoNew.getVIN());
  136. cardUserInfo.setIssueDate(cardUserInfoNew.getIssueDate());
  137. cardUserInfo.setCategory(cardUserInfoNew.getCategory());
  138. cardUserInfo.setPlateType(cardUserInfoNew.getPlateType());
  139. cardUserInfo.setVehicleUse(cardUserInfoNew.getVehicleUse());
  140. cardUserInfo.setUseNature(cardUserInfoNew.getUseNature());
  141. cardUserInfo.setMotorUsageTypeCode(cardUserInfoNew.getMotorUsageTypeCode());
  142. cardUserInfo.setMotorTypeCode(cardUserInfoNew.getMotorTypeCode());
  143. cardUserInfo.setRegisterDate(cardUserInfoNew.getRegisterDate());
  144. cardUserInfo.setEngine(cardUserInfoNew.getEngine());
  145. cardUserInfo.setPlateNo(cardUserInfoNew.getPlateNo());
  146. cardUserInfo.setBackOcrID(cardUserInfoNew.getBackOcrID());
  147. cardUserInfo.setCarOwner(cardUserInfoNew.getCarOwner());
  148. }
  149. /**
  150. * 行驶证背面
  151. *
  152. * @param images
  153. * @return
  154. */
  155. public static void drivingPermitBack(String images, CardUserInfo cardUserInfo) {
  156. if (StringUtils.isEmpty(images)) {
  157. return;
  158. }
  159. try {
  160. JSONObject jb = request(images, "back");
  161. cardUserInfo.setGrossMass(JSON.parseObject(jb.getString("总质量")).getString("words").replace("kg", ""));
  162. cardUserInfo.setApprovedPassengersCapacity(JSON.parseObject(jb.getString("核定载人数")).getString("words").replace("人", ""));
  163. cardUserInfo.setUnladenMass(JSON.parseObject(jb.getString("整备质量")).getString("words").replace("kg", ""));
  164. cardUserInfo.setLimitLoad(JSON.parseObject(jb.getString("核定载质量")).getString("words").replace("kg", ""));
  165. } catch (Exception e) {
  166. e.printStackTrace();
  167. }
  168. }
  169. public static void conversionBack(CardUserInfo cardUserInfo, CardUserInfo cardUserInfoNew) {
  170. cardUserInfo.setGrossMass(cardUserInfoNew.getGrossMass());
  171. cardUserInfo.setApprovedPassengersCapacity(cardUserInfoNew.getApprovedPassengersCapacity());
  172. cardUserInfo.setUnladenMass(cardUserInfoNew.getUnladenMass());
  173. cardUserInfo.setLimitLoad(cardUserInfoNew.getLimitLoad());
  174. }
  175. }