一、先购买阿里云的身份证识别服务,拿到对应的AccessKey ID 和 AccessKey Secret
二、在项目中添加阿里云的相关依赖,找到对应的工具类,这里用的是新版依赖
1、引入阿里云图片识别的依赖
- <dependency>
- <groupId>com.aliyun</groupId>
- <artifactId>ocr20191230</artifactId>
- <version>${aliyun.ocr.version}</version>
- </dependency>
复制代码 这是对应的依赖版本号查询地点,新版和旧版的依赖都可以在这里查
https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-ocr
接入步调中的依赖我只添加了这个,json处置惩罚的依赖包项目本身就有,看本身环境,没有缺少对应的依赖就不需要添加了。
这是阿里云的示例地点
https://help.aliyun.com/document_detail/153132.htm?spm=a2c4g.11186623.0.0.65296d04gaIiFP#task-2406409
2、查询引入依赖,看是否导入成功
但是在调用过程发现引入依赖后与示例有点不一样!!!
我并没有看到com.aliyuncr:0.0.3这个依赖,以为是版本的题目,但看了一下也没有0.0.3这个版本
这是阿里云示例地点中的截图
这是我引入的阿里云依赖后,找到最像示例中的依赖包
RecognizeBankCardAdvanceRequest和RecognizeBankCardRequest这两个类倒是有,但是我的models包下面没有Config这个类,当时就想,示例代码中是需要这个类的,就算是高版本的jar包也不应该删了啊,保留疑问继续往下走。
既然和示例中的jar包有些出入,就先看看识别身份证的相关类吧,阿里云示例中提到
对于同一个接口,如果 SDK 中包含雷同 xxxAdvanceRequest 的结构,那么这个接口支持本地文件上传,否则不支持。
示例截图中框的是识别银行卡的,我需要的是识别身份证的,那就找相关的工具类吧。
3、这是我找工具类的过程,可以跳过
(1)、识别身份证的类
识别身份证的是RecognizeIdentityCardAdvanceRequest和RecognizeIdentityCardRequest,其中RecognizeIdentityCardAdvanceRequest支持本地上传,那么就用这个。
识别本舆图片的话,就将本舆图片的输入流赋值给RecognizeIdentityCardAdvanceRequest实例的imageURLObject属性,示例代码中也有提到。
(2)、调用服务的类
调用身份证识别的服务需要Client这个类,通过在Client实例的recognizeIdentityCardAdvance方法中传入RecognizeIdentityCardAdvanceRequest实例进行图片识别,阿里云示例中没有明说Client这个是谁人包中,引入的依赖和示例截图中(不同依赖)都有这个类,当时就想着先使用已经引入的依赖中的Client类,不行再换。
(3)、调用服务的类需要的Config实例,也是前面提到的没有看到的Config类
在实例化Client这个类中需要传入Config类的示例,由于modules中没有Config,进入Client源码,发现使用的是com.aliyun.teaopenapi.models这个包下的Config,行,那就用这个吧。
(4)、Config实例传参
一开始还不知道Config实例如何传参,后面看到阿里云身份证识别产品体验的示例代码(示例代码是旧版依赖的调用方式)中传了regionId、AccessKey ID 和 AccessKey Secret,加上Config确实有对应的变量,那就传这三个参数试试吧。
这是阿里云产品体验中央的代码:
三、示例代码
Config实例中的regionId相沿示例代码中的cn-shanghai。
运行测试一下
识别成功!
完整代码如下:
- import com.aliyun.ocr20191230.Client;
- import com.aliyun.ocr20191230.models.RecognizeIdentityCardAdvanceRequest;
- import com.aliyun.ocr20191230.models.RecognizeIdentityCardResponse;
- import com.aliyun.teaopenapi.models.Config;
- import com.aliyun.teautil.models.RuntimeOptions;
- import com.aliyuncs.exceptions.ClientException;
- import com.aliyuncs.exceptions.ServerException;
- import com.google.gson.Gson;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.InputStream;
- /**
- * TODO
- *
- * @author:user
- * @date: 2022-08-08 14:21
- */
- public class IdCardIdentifyUtil {
- public static void main(String[] args) throws Exception {
- Config config = new Config();
- config.setAccessKeyId("你的accessKeyId");
- config.setAccessKeySecret("你的accessKeySecret");
- config.setRegionId("cn-shanghai");
- Client client = new Client(config);
- InputStream inputStream = new FileInputStream(new File("D:\\opt\\jeecg-boot\\upload\\temp\\upload_1644998658029.jpg"));
- //这是上传本地图片的
- RecognizeIdentityCardAdvanceRequest request = new RecognizeIdentityCardAdvanceRequest();
- request.setSide("face");
- request.imageURLObject = inputStream;
- //识别本地图片才要上传,但只是new一个实例进行传参,也没做什么
- RuntimeOptions runtimeOptions = new RuntimeOptions();
- RecognizeIdentityCardResponse response = null;
- try {
- response = client.recognizeIdentityCardAdvance(request, runtimeOptions);
- } catch (ServerException e) {
- e.printStackTrace();
- throw new RuntimeException(e.getMessage());
- } catch (ClientException e) {
- System.out.println("ErrCode:" + e.getErrCode());
- System.out.println("ErrMsg:" + e.getErrMsg());
- System.out.println("RequestId:" + e.getRequestId());
- throw new RuntimeException("ErrCode:" + e.getErrCode() + ",ErrMsg:" + e.getErrMsg());
- }
- System.out.println("response::" + new Gson().toJson(response));
- }
- }
复制代码 四、工具类
这是我改造后的工具类,个人以为比较适合在项目中使用。
1、身份证识别服务的请求参数
- import lombok.Data;
- /**
- * 身份证识别接口的参数
- *
- * @author:user
- * @date: 2022-08-08 15:28
- */
- @Data
- public class IdCardRequestParam {
- //阿里云accessKeyId
- private String accessKeyId;
- //阿里云accessSecret
- private String accessSecret;
- //阿里云识别身份证的regionId,设置请求参数的方法有横线,似乎废弃了
- private String regionId;
- //身份证正反面
- private String side;
- //上传图片路径
- private String imageURL;
- }
复制代码 2、身份证正面识别的吸收dto
- import lombok.Data;
- /**
- * 身份证正面dto
- *
- * @author:user
- * @date: 2022-08-08 14:59
- */
- @Data
- public class IdCardFrontDto {
- //地址
- private String Address;
- //出生日期
- private String BirthDate;
- //性别
- private String Gender;
- //身份证号码
- private String IDNumber;
- //姓名
- private String Name;
- //民族
- private String Nationality;
- //身份证位置,目前没有用到
- private String CardAreas;
- }
复制代码 3、身份证反面识别的吸收dto
- import lombok.Data;
- /**
- * 身份证反面dto
- *
- * @author:user
- * @date: 2022-08-08 15:09
- */
- @Data
- public class IdCardBackDto {
- //开始日期
- private String StartDate;
- //结束日期
- private String EndDate;
- //发证机关
- private String Issue;
- }
复制代码 4、身份证正反面枚举类
- /**
- * 身份证正反面枚举类
- *
- * @author:user
- * @date: 2022-08-08 16:09
- */
- public enum IdCardSideEnum {
- FACE("face", "人像面"),
- BACK("back", "国徽面");
- private String code;
- private String desc;
- IdCardSideEnum(String code, String desc) {
- this.code = code;
- this.desc = desc;
- }
- public String getCode() {
- return code;
- }
- public void setCode(String code) {
- this.code = code;
- }
- public static String getDesc(String code) {
- for (IdCardSideEnum value : IdCardSideEnum.values()) {
- if (value.code.equals(code))
- return value.desc;
- }
- throw new RuntimeException("未知状态:" + code);
- }
- public String getDesc() {
- return desc;
- }
- public void setDesc(String desc) {
- this.desc = desc;
- }
- }
复制代码 5、身份证识别工具类
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |