diff --git a/api-third/src/main/java/com/heyu/api/baidu/handle/traffic/BDriverLicenseHandle.java b/api-third/src/main/java/com/heyu/api/baidu/handle/traffic/BDriverLicenseHandle.java
new file mode 100644
index 0000000..004fcae
--- /dev/null
+++ b/api-third/src/main/java/com/heyu/api/baidu/handle/traffic/BDriverLicenseHandle.java
@@ -0,0 +1,80 @@
+package com.heyu.api.baidu.handle.traffic;
+
+import com.heyu.api.baidu.BaiduBaseHandle;
+import com.heyu.api.baidu.request.traffic.BDriverLicenseRequest;
+import com.heyu.api.data.annotation.CustomPath;
+import com.heyu.api.data.constants.ApiConstants;
+import com.heyu.api.data.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * https://console.bce.baidu.com/support/#/api?product=AI&project=文字识别&parent=交通场景OCR&api=rest%2F2.0%2Focr%2Fv1%2Fdriving_license&method=post
+ *
+ *
+ * 驾驶证识别 - 百度OCR
+ *
+ * 支持对机动车驾驶证正页及副页所有字段进行结构化识别。
+ * 驾驶证正页:证号、姓名、性别、国籍、出生日期、初次领证日期、准驾车型、有效起始日期、失效日期、住址、发证单位 11个字段
+ * 驾驶证副页:姓名、记录、证号、档案编号 4个字段
+ * 同时支持识别交管12123 APP 发放的电子驾驶证正页,包括证号、姓名、性别、国籍、出生日期、初次领证日期、准驾车型、有效起始日期、失效日期、累积记分、状态、档案编号、生成时间、当前时间、条形码下编号 15个字段
+ */
+@Component
+@Slf4j
+@CustomPath("driverLicense")
+public class BDriverLicenseHandle extends BaiduBaseHandle {
+
+ @Override
+ public String getUri() {
+ return "/rest/2.0/ocr/v1/driving_license";
+ }
+
+ @Override
+ public String check(BDriverLicenseRequest request) {
+ if (checkNotTrueFalse(request.getDetectDirection())) {
+ return "detectDirection 必须传 " + ApiConstants.trueOrFalse
+ + ",false:默认值,不检测朝向, true:检测朝向";
+ }
+ if (checkNotFrontBack(request.getDrivingLicenseSide())) {
+ return "drivingLicenseSide 必须传 " + ApiConstants.frontOrback
+ + ",front:识别驾驶证正页、电子驾驶证正页, back:识别驾驶证副页";
+ }
+ if (checkNotTrueFalse(request.getUnifiedValidPeriod())) {
+ return "unifiedValidPeriod 必须传 " + ApiConstants.trueOrFalse
+ + ",false:默认值,不进行归一化处理, true:归一化格式输出";
+ }
+ if (checkNotTrueFalse(request.getQualityWarn())) {
+ return "qualityWarn 必须传 " + ApiConstants.trueOrFalse
+ + ",false:不输出质量告警信息, true:输出遮挡、不完整质量告警信息";
+ }
+ if (checkNotTrueFalse(request.getRiskWarn())) {
+ return "riskWarn 必须传 " + ApiConstants.trueOrFalse
+ + ",false:不输出风险告警信息, true:开启,输出驾驶正复印、翻拍、PS等告警信息";
+ }
+ return checkImageUri(request);
+ }
+
+ @Override
+ public String getContent(BDriverLicenseRequest request) {
+ StringBuffer sb = getImageContent(request);
+ if (StringUtils.isNotBlank(request.getDetectDirection())) {
+ sb.append("&detect_direction=").append(request.getDetectDirection());
+ }
+ if (StringUtils.isNotBlank(request.getDrivingLicenseSide())) {
+ sb.append("&driving_license_side=").append(request.getDrivingLicenseSide());
+ }
+ if (StringUtils.isNotBlank(request.getUnifiedValidPeriod())) {
+ sb.append("&unified_valid_period=").append(request.getUnifiedValidPeriod());
+ }
+ if (StringUtils.isNotBlank(request.getQualityWarn())) {
+ sb.append("&quality_warn=").append(request.getQualityWarn());
+ }
+ if (StringUtils.isNotBlank(request.getRiskWarn())) {
+ sb.append("&risk_warn=").append(request.getRiskWarn());
+ }
+ return sb.toString();
+ }
+
+}
diff --git a/api-third/src/main/java/com/heyu/api/baidu/request/traffic/BDriverLicenseRequest.java b/api-third/src/main/java/com/heyu/api/baidu/request/traffic/BDriverLicenseRequest.java
new file mode 100644
index 0000000..5132212
--- /dev/null
+++ b/api-third/src/main/java/com/heyu/api/baidu/request/traffic/BDriverLicenseRequest.java
@@ -0,0 +1,52 @@
+package com.heyu.api.baidu.request.traffic;
+
+import com.heyu.api.baidu.request.BaiduImageUrlRequest;
+import lombok.Data;
+
+/**
+ * 驾驶证识别 - 百度OCR API请求
+ * https://console.bce.baidu.com/support/#/api?product=AI&project=文字识别&parent=交通场景OCR&api=rest%2F2.0%2Focr%2Fv1%2Fdriving_license&method=post
+ *
+ *
+ * 百度驾驶证识别:/rest/2.0/ocr/v1/driving_license
+ *
+ * 驾驶证正页:证号、姓名、性别、国籍、出生日期、初次领证日期、准驾车型、有效起始日期、失效日期、住址、发证单位 11个字段
+ * 电子驾驶证正页:证号、姓名、性别、国籍、出生日期、初次领证日期、准驾车型、有效起始日期、失效日期、累积记分、状态、档案编号、生成时间、当前时间、条形码下编号 15个字段
+ * 驾驶证副页:姓名、记录、证号、档案编号 4个字段
+ */
+@Data
+public class BDriverLicenseRequest extends BaiduImageUrlRequest {
+
+ /**
+ * - false:默认值,不检测朝向,朝向是指输入图像是正常方向、逆时针旋转90/180/270度
+ * - true:检测朝向
+ */
+ private String detectDirection = "false";
+
+ /**
+ * - front:默认值,识别驾驶证正页、电子驾驶证正页
+ * - back:识别驾驶证副页
+ */
+ private String drivingLicenseSide = "front";
+
+ /**
+ * - false: 默认值,不进行归一化处理
+ * - true: 归一化格式输出,将驾驶证正页的「有效起始日期」+「有效期限」及「有效期限」+「至」,归一化为「有效起始日期」+「失效日期」格式输出
+ */
+ private String unifiedValidPeriod = "false";
+
+ /**
+ * 是否开启质量检测功能,仅在驾驶证正页识别时生效,
+ * - false:默认值,不输出质量告警信息
+ * - true: 输出驾驶证遮挡、不完整质量告警信息
+ */
+ private String qualityWarn = "false";
+
+ /**
+ * 是否开启风险检测功能,仅在驾驶证正页识别时生效,
+ * - false:默认值,不输出风险告警信息
+ * - true:开启,输出驾驶证复印、翻拍、PS等告警信息
+ */
+ private String riskWarn = "false";
+
+}
diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/car/RecognizeDriverLicenseController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/car/RecognizeDriverLicenseController.java
index 5ac58c0..34129a1 100644
--- a/api-web/api-interface/src/main/java/com/heyu/api/controller/car/RecognizeDriverLicenseController.java
+++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/car/RecognizeDriverLicenseController.java
@@ -1,14 +1,15 @@
package com.heyu.api.controller.car;
-import com.aliyun.ocr20191230.models.RecognizeDriverLicenseResponse;
-import com.aliyun.ocr20191230.models.RecognizeDriverLicenseResponseBody;
-import com.heyu.api.alibaba.handle.common.text.ARecognizeDriverLicenseHandle;
-import com.heyu.api.alibaba.request.common.text.ARecognizeDriverLicenseRequest;
+import com.heyu.api.baidu.handle.traffic.BDriverLicenseHandle;
+import com.heyu.api.baidu.request.traffic.BDriverLicenseRequest;
import com.heyu.api.controller.BaseController;
import com.heyu.api.data.annotation.EbAuthentication;
import com.heyu.api.data.constants.ApiConstants;
import com.heyu.api.data.utils.ApiR;
+import com.heyu.api.data.utils.MapUtils;
import com.heyu.api.data.utils.R;
+import com.heyu.api.data.utils.StringUtils;
+import com.heyu.api.request.car.DriverLicenseRecognizeRequest;
import com.heyu.api.resp.car.RecognizeDriverLicenseBackResp;
import com.heyu.api.resp.car.RecognizeDriverLicenseFaceResp;
import lombok.extern.slf4j.Slf4j;
@@ -18,96 +19,128 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import java.util.Map;
+
/**
- * https://next.api.aliyun.com/api/ocr/2019-12-30/RecognizeDriverLicense?tab=DEMO&lang=JAVA
- *
- * 驾驶证识别
- *
- * RecognizeDriverLicense
- *
- * 驾驶证识别能力可以识别驾驶证首页和副页关键字段内容,包括:档案编号、姓名、有效期时长、性别、发证日期、驾驶证号、驾驶证准驾车型、有效期开始时间、地址,共 9 个关键字段信息。
- *
- *
- *
- *
- * https://console.bce.baidu.com/support/?_=1740219852952×tamp=1740325062124#/api?product=AI&project=%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB&parent=%E4%BA%A4%E9%80%9A%E5%9C%BA%E6%99%AFOCR&api=rest%2F2.0%2Focr%2Fv1%2Fdriving_license&method=post
- *
- *
- * 驾驶证识别
- *
- *
- *
+ * 驾驶证识别(百度OCR)
*
+ * 支持对机动车驾驶证正页及副页所有字段进行结构化识别。
+ * 驾驶证正页:证号、姓名、性别、国籍、出生日期、初次领证日期、准驾车型、有效起始日期、失效日期、住址、发证单位 11个字段
+ * 驾驶证副页:姓名、记录、证号、档案编号 4个字段
+ * 同时支持识别交管12123 APP 发放的电子驾驶证正页,包括证号、姓名、性别、国籍、出生日期、初次领证日期、准驾车型、有效起始日期、失效日期、累积记分、状态、档案编号、生成时间、当前时间、条形码下编号 15个字段
*
+ * 百度文档:https://console.bce.baidu.com/support/#/api?product=AI&project=文字识别&parent=交通场景OCR&api=rest%2F2.0%2Focr%2Fv1%2Fdriving_license&method=post
*/
@Slf4j
@RestController
@RequestMapping("/driver/license")
+@SuppressWarnings("unchecked")
public class RecognizeDriverLicenseController extends BaseController {
@Autowired
- private ARecognizeDriverLicenseHandle aRecognizeDriverLicenseHandle;
+ private BDriverLicenseHandle bDriverLicenseHandle;
- // http://localhost:8888/driver/license/recognize?side=face&imageBase64=/9j/4AAQSkZJRgABA
@EbAuthentication(tencent = ApiConstants.TENCENT_AUTH)
@PostMapping("/recognize")
- public R recognize(@RequestBody ARecognizeDriverLicenseRequest request) {
- if (!hasImage(request)) {
- return R.error("imageUrl和imageBase64不能同时为空");
+ public R recognize(@RequestBody DriverLicenseRecognizeRequest request) {
+ long start = System.currentTimeMillis();
+
+ if (request == null) {
+ return R.error("请求参数不能为空");
+ }
+ if (isBlank(request.getImageBase64()) && isBlank(request.getImageUrl())) {
+ return R.error("imageBase64和imageUrl不能同时为空");
+ }
+ log.info("驾驶证识别-参数校验耗时:{}ms", System.currentTimeMillis() - start);
+
+ long t1 = System.currentTimeMillis();
+ BDriverLicenseRequest bRequest = toBaiduRequest(request);
+ log.info("驾驶证识别-构建百度请求耗时:{}ms", System.currentTimeMillis() - t1);
+
+ long t2 = System.currentTimeMillis();
+ ApiR