Java实现 自主学习一套身份证识别(识别营业执照信息和语音识别接口)

20.身份证识别-沙溪行政执法系统-未验证

1.在学习身份证识别 接口 (语音识别接口,营业执照识别接口--我发现他们都是类似的)

20.1-身份证识别接口

实体层

BaseEntity-基础类

java 复制代码
/**
 * Created by vincent.yang on 2016-01-05.
 * <p/>
 * 基础实体类
 */
@Getter
@Setter
@ToString
public abstract class BaseEntity  {
    private static final long serialVersionUID = -5488114907242694673L;


    // 状态: 0无效 1有效
    private Long status = 1L;
    /**
     * 删除标记:逻辑删除用, 0-表示未删除, 1-表示已删除
     */
    private String deletedFlag = "0";
    /**
     * 数据标识,S-系统数据(初始化),I-插入数据,O-其他
     */
    private String inputType = "I";
    /**
     * 描述
     */
    private String description = "";
    /**
     * 备注
     */
    private String note = "";

    private String updatedUser;
    private String createdUser;
    private Long updatedUserId;
    private Long createdUserId;
    private Date updatedTime;
    private Date createdTime;

}

身份证识别结果类

java 复制代码
@Getter
@Setter
public class IDCardResult extends BaseEntity {
    /**
     * 身份证号
     */
    String idcard;
    /**
     * 籍贯
     */
    String address;
    /**
     * 性别 男/女
     */
    String sexnual;
    /**
     * 民族
     */
    String nation;
    /**
     * 出生年月 年/月/日 不补全
     */
    String birth;


}

身份证识别-控制层

java 复制代码
/**
 * 识别身份证信息
 *
 * @param file 图片
 * @return 识别结果
 */
@PostMapping("secured/IDCardIdentify")
@ResponseBody
public IDCardResult identifyIDCard(@RequestParam("file") MultipartFile file) {
    return videoCollectService.identifyIDCard(file);
}

身份证识别-service层

java 复制代码
/**
 * 调用接口识别身份证信息
 * @param file 图片
 * @return 结果
 */
IDCardResult identifyIDCard(MultipartFile file);
java 复制代码
/**
 * 身份证识别
 *
 * @param file 图片
 * @return 结果
 */
@Override
public IDCardResult identifyIDCard(MultipartFile file) {
    String pictureParamName = "idcard";
    String ticketParamName = "appid";
    //IDCardIdentifyUrl 这个是识别的url的服务  录入identify.idCardUrl=http://47.XXXX:8888/idcardocr
    String jsonStr = identify(file, IDCardIdentifyUrl, pictureParamName, ticketParamName);  //==》这里
    if (jsonStr != null) {
        JSONObject object = JSON.parseObject(jsonStr);
        return object.getJSONArray("results").getJSONObject(0).getObject("ocrresult", IDCardResult.class);
    }
    return new IDCardResult();
}

所用到的identify公共这个方法

java 复制代码
/**
 * 识别公共方法
 *
 * @param file             文件
 * @param interfaceUrl     接口地址
 * @param pictureParamName 文件参数名
 * @param ticketParamName  授权码参数名
 * @return 返回信息
 */
private String identify(MultipartFile file, String interfaceUrl, String pictureParamName, String ticketParamName) {
    CloseableHttpClient httpClient = HttpClients.createDefault();
    HttpPost httpPost = new HttpPost(interfaceUrl);
    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    String jsonStr = null;
    try {
        builder.addBinaryBody(pictureParamName, file.getBytes(), ContentType.MULTIPART_FORM_DATA, file.getOriginalFilename());
        //identifyToken 这个也是识别的token例如:identify.token=02628280fa5c45b1af06cXXX
        builder.addTextBody(ticketParamName, identifyToken, ContentType.MULTIPART_FORM_DATA);
        HttpEntity entity = builder.build();
        httpPost.setEntity(entity);
        CloseableHttpResponse response = httpClient.execute(httpPost);
        HttpEntity responseEntity = response.getEntity();
        jsonStr = EntityUtils.toString(responseEntity, "utf-8");
    } catch (IOException e) {
        e.printStackTrace();
    }
    return jsonStr;
}

这个方法需要MultipartEntityBuilder引入这个相关的maven

xml 复制代码
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpmime</artifactId>
    <version>4.5.13</version>
</dependency>

20.2-识别营业执照信息接口

营业执照信息实体

java 复制代码
/**
 * @author Steven.sun
 * @date 2020/11/30 16:07
 * 营业执照识别结果
 */
@Getter
@Setter
public class BusinessLicenseResult extends BaseEntity {
    /**
     * 法人代表
     */
    String lawer;
    /**
     * 类型
     */
    String type;
    /**
     * 营业期限
     */
    String limit;
    /**
     * 地址
     */
    String address;
    /**
     * 注册资本
     */
    String regmoney;
    /**
     * 信用代码
     */
    String sid;
    /**
     * 成立日期
     */
    String created;
    /**
     * 经营范围
     */
    String business;

}

识别营业执照信息-控制层

java 复制代码
/**
 * 识别营业执照信息
 * @param file 图片
 * @return 识别结果
 */
@PostMapping("licenseIdentify")
@ResponseBody
public BusinessLicenseResult identityBusinessLicense(@RequestParam("file") MultipartFile file){
    return videoCollectService.identityBusinessLicense(file);
}

识别营业执照信息-service层

java 复制代码
/**
 * 调用接口识别营业执照信息
 * @param img 图片
 * @return 结果
 */
BusinessLicenseResult identityBusinessLicense(MultipartFile img);
java 复制代码
/**
 * 营业执照识别
 *
 * @param file 图片
 * @return 结果
 */
@Override
public BusinessLicenseResult identityBusinessLicense(MultipartFile file) {
    //图片字段名
    String pictureParamName = "taxcard";
    //鉴权字段名
    String ticketParamName = "appid";
    //===taxLicenseIdentifyUrl是        identify.taxLicenseUrl=http://47.xxxx:8888/taxcardocr
    //identify  上面公共的方法
    String jsonStr = identify(file, taxLicenseIdentifyUrl, pictureParamName, ticketParamName);
    if (jsonStr != null) {
        return JSON.parseObject(jsonStr, BusinessLicenseResult.class);
    }
    return new BusinessLicenseResult();

}

20.3 语音识别接口

控制层

java 复制代码
/**
 * 语音识别
 *
 * @param file 文件
 * @return 结果
 */
@PostMapping("APP_VOICE_IDENTIFY")
@ResponseBody
public String identifyVoice(@RequestParam("file") MultipartFile file) {
    return videoCollectService.identifyVoice(file);
}

service层

java 复制代码
/**
 * 语音识别
 * @param file 文件
 * @return 结果
 */
String identifyVoice(MultipartFile file);
java 复制代码
/**
 * 语音识别
 * @param file 文件
 * @return 结果
 */
@Override
public String identifyVoice(MultipartFile file) {
    String voiceParamName = "speechfile";
    String ticketParamName = "appid";
    //identify        公共的方法
    //voiceIdentifyUrl服务            identify.voiceUrl=http://47.xxxx:8888/speechrec
    return identify(file, voiceIdentifyUrl, voiceParamName, ticketParamName);
}
相关推荐
xcbeyond4 分钟前
Kubernetes 中 Java 应用性能调优指南:从容器化特性到 JVM 底层原理的系统化优化
java·jvm·云原生·kubernetes
蓝白咖啡20 分钟前
华为OD机试 - 王者荣耀匹配机制 - 回溯(Java 2024 D卷 200分)
java·python·算法·华为od·机试
傍晚冰川23 分钟前
【STM32】WDG看门狗(学习笔记)
c语言·笔记·科技·stm32·单片机·嵌入式硬件·学习
一人の梅雨25 分钟前
西域平台关键字搜索接口开发指南
java·开发语言·数据库
Moonnnn.40 分钟前
运算放大器(三)运算放大器的典型应用
笔记·学习·硬件工程
triticale1 小时前
【图论】最短路径问题总结
java·开发语言·图论
技术小齐1 小时前
网络运维学习笔记(DeepSeek优化版)026 OSPF vlink(Virtual Link,虚链路)配置详解
运维·网络·学习
暮辰7771 小时前
多JDK环境安装及切换使用
java
qq_447663051 小时前
Spring的事务处理
java·后端·spring
男Ren、麦根1 小时前
Java抽象类:深入理解与应用
java·开发语言