Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)

首先对比一下各厂商开放接口免费额度:

  • 阿里云OCR:自购买起500次/年,过期作废。超过另计算
  • 腾讯云OCR:1000次/月。超过另计算
  • 百度云OCR:各种场景几十到几万次/天。超过另计算

小型项目,为节约成本,最终项目确定使用百度云OCR,接下来记录一下使用体验。

1、首先创建一个maven普通Java工程。项目结构如下:

2、添加依赖

 <!--  百度云OCR文字识别Java-SDK依赖      -->
        <dependency>
            <groupId>com.baidu.aip</groupId>
            <artifactId>java-sdk</artifactId>
            <version>4.11.3</version>
        </dependency>

3、在项目根目录下(路径可自定义)创建存放本地图片的目录,并加入测试需要的图片

4、编写代码

import com.baidu.aip.ocr.AipOcr;
import org.json.JSONArray;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Iterator;

/*
* 百度云文字识别测试类
* */
public class BaiduyunOCRDemo {
    //设置APPID/AK/SK
    public static final String APP_ID = "";//你的 App ID
    public static final String API_KEY = "";//你的 Api Key
    public static final String SECRET_KEY = "";//你的 Secret Key

    public static void main(String []args){
            // 初始化一个AipOcr
            AipOcr aipOcr = new AipOcr(APP_ID, API_KEY, SECRET_KEY);
            // 可选:设置网络连接参数
//            aipOcr.setConnectionTimeoutInMillis(2000);//建立连接的超时时间(单位:毫秒)
//            aipOcr.setSocketTimeoutInMillis(60000);//通过打开的连接传输数据的超时时间(单位:毫秒)

            // 可选:设置代理服务器地址, http和socket二选一,或者均不设置
//            aipOcr.setHttpProxy("proxy_host", proxy_port);  // 设置http代理
//            aipOcr.setSocketProxy("proxy_host", proxy_port);  // 设置socket代理

            // 可选:设置log4j日志输出格式,若不设置,则使用默认配置
            // 也可以直接通过jvm启动参数设置此环境变量
//            System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties");

            //设置本地图片地址
            String path = "E:\\IDEA\\IntelliJ IDEA 2019.1.3\\IdeaProjects\\BaiduyunOCRDemo\\images\\Chinese.jpg";
           //通用文字识别
            basicGeneral(aipOcr,path);
            //身份证识别
//            idCord(aipOcr,path);
            //车牌号识别
//            licencePlateNumber(aipOcr,path);
    }
    /*
    * 通用文字识别
    * */
    public static void basicGeneral(AipOcr aipOcr,String path){
            // 传入可选参数调用接口
            HashMap<String, String> options = new HashMap<String, String>();
            options.put("language_type", "CHN_ENG");//识别语言类型,默认为中英文混合
            options.put("detect_direction", "true");//是否检查图片朝向,默认false不检查
            options.put("detect_language", "true");//是否检查语言,默认false不检查
            options.put("probability", "true");//是否返回识别结果中每一行的置信度

            // 调用接口,返回JSON格式数据
            JSONObject jsonObject = aipOcr.basicGeneral(path, options);
            //获取JSON对象里提取图片文字信息数组
            JSONArray jsonArray = jsonObject.getJSONArray("words_result");
            //循环打印信息
            for(int i = 0;i<jsonArray.length();i++){
                System.out.println(jsonArray.getJSONObject(i).get("words"));
            }
    }

    /*
    * 身份证文字识别
    * */
    public  static void idCord(AipOcr aipOcr,String path){
        // 传入可选参数调用接口
        HashMap<String, String> options = new HashMap<String, String>();
        options.put("detect_direction", "true");//检查图片朝向。默认false不检测
        options.put("detect_risk", "false");//是否开启身份证类型检测功能(类型为身份证复印件、临时身份证、身份证翻拍、修改过的身份证),默认false不开启
        String idCardSide = "front";//身份证含照片一面
//        String idCardSide = "back";//身份证含国徽一面
        //本地图片识别,返回JSON对象
        JSONObject jsonObject = aipOcr.idcard(path, idCardSide, options);
        //获取到我们需要的信息
        JSONObject result = jsonObject.getJSONObject("words_result");

        //获取迭代器,
        Iterator<String> iterator = result.keys();
        while (iterator.hasNext()){
            //获取键和值
            String key = iterator.next();
            String value = result.getJSONObject(key).getString("words");
            //打印识别结果
            System.out.println(key+" : "+value);
        }
    }

    /*
    * 车牌号识别
    * */
    public static void licencePlateNumber(AipOcr aipOcr,String path){
        // 传入可选参数调用接口
        HashMap<String, String> options = new HashMap<String, String>();
        options.put("multi_detect", "false");//是否检测多张图片,默认false
        //本地图片识别,返回JSON对象
        JSONObject jsonObject = aipOcr.plateLicense(path, options);
        //获取需要的信息
        JSONObject result = jsonObject.getJSONObject("words_result");
        System.out.println("车牌颜色:"+result.getString("color")+"\n"+"车牌号:"+result.getString("number"));
    }
}

5、测试三种场景运行结果

5.1、通用文字识别结果

5.1.1

5.1.2

5.1.3

5.1.4

结果:印刷体识别效果较好。

5.2、身份证文字识别

5.2.1

5.2.2

5.2.3、识别图片为本人真实身份证

结果:对比1、2发现,身份证原件识别效果高于复印件,对比1、2、3发现前2次返回结果中身份证号码都为空,通过多次对不同真假身份证对比发现,百度云后台对识别的身份证做了真实性检查,假身份证返回号码为空,真实身份证才会返回身份证号码。

5.3、车牌识别

车牌识别仅简单体验,并未测试多图片对比。

  • 0
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值