• 百度AI开放平台,文字识别接口


    做个笔记,否则code的第二天,代码就只有上帝知道了。

    1、百度AI开放平台提供能力:https://ai.baidu.com/

    2、文字识别示例

    2.1、注册及认证

    2.2、鉴权获取access_token说明

    2.3、官方代码示例

    3、测试demo

    3.1、 依赖

        <dependencies>
            <dependency>
                <groupId>org.json</groupId>
                <artifactId>json</artifactId>
                <version>20200518</version>
            </dependency>
    
            <dependency>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
                <version>2.8.6</version>
            </dependency>
        </dependencies>

    3.2、 认证

    import org.json.JSONObject;

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.List;
    import java.util.Map;


    public
    class AuthService { /** * 获取权限token * @return 返回示例: * { * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567", * "expires_in": 2592000 * } */ public static String getAuth() { // 官网获取的 API Key 更新为你注册的 String clientId = "[API KEY]"; // 官网获取的 Secret Key 更新为你注册的 String clientSecret = "[Secret Key]"; return getAuth(clientId, clientSecret); } /** * 获取API访问token * 该token有一定的有效期,需要自行管理,当失效时需重新获取. * Access Token的有效期为30天(以秒为单位) * @param ak - 百度云官网获取的 API Key * @param sk - 百度云官网获取的 Securet Key * @return assess_token 示例: * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567" */ public static String getAuth(String ak, String sk) { // 获取token地址 String authHost = "https://aip.baidubce.com/oauth/2.0/token?"; String getAccessTokenUrl = authHost // 1. grant_type为固定参数 + "grant_type=client_credentials" // 2. 官网获取的 API Key + "&client_id=" + ak // 3. 官网获取的 Secret Key + "&client_secret=" + sk; try { URL realUrl = new URL(getAccessTokenUrl); // 打开和URL之间的连接 HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection(); connection.setRequestMethod("GET"); connection.connect(); // 获取所有响应头字段 Map<String, List<String>> map = connection.getHeaderFields(); // 遍历所有的响应头字段 for (String key : map.keySet()) { System.err.println(key + "--->" + map.get(key)); } // 定义 BufferedReader输入流来读取URL的响应 BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String result = ""; String line; while ((line = in.readLine()) != null) { result += line; } /** * 返回结果示例 */ System.err.println("result:" + result); JSONObject jsonObject = new JSONObject(result); String access_token = jsonObject.getString("access_token"); System.out.println("access_token: "+access_token); return access_token; } catch (Exception e) { System.err.printf("获取token失败!"); e.printStackTrace(System.err); } return null; } }

    3.3、文字识别接口封装

    import com.home.baidu.util.Base64Util;
    import com.home.baidu.util.FileUtil;
    import com.home.baidu.util.HttpUtil;
    
    import java.net.URLEncoder;
    
    /**
     * @Author: xu.dm
     * @Date: 2020/10/23 10:09
     * @Version: 1.0
     * @Description: 通用文字识别
     **/
    public class OCRService {
    
        // 通用文字标准版识别
        public static String generalBasic(String filePath,String accessToken) {
            // 请求url
            String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic";
            try {
                // String filePath = "[本地文件路径]";
                byte[] imgData = FileUtil.readFileByBytes(filePath);
                String imgStr = Base64Util.encode(imgData);
                String imgParam = URLEncoder.encode(imgStr, "UTF-8");
    
                String param = "image=" + imgParam;
    
                // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
    //            String accessToken = "[调用鉴权接口获取的token]";
    
                String result = HttpUtil.post(url, accessToken, param);
                System.out.println(result);
                return result;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        // 通用文字 标准版识别,含位置信息
        public static String general(String filePath,String accessToken) {
            // 请求url
            String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general";
            try {
                // 本地文件路径
    //            String filePath = "[本地文件路径]";
                byte[] imgData = FileUtil.readFileByBytes(filePath);
                String imgStr = Base64Util.encode(imgData);
                String imgParam = URLEncoder.encode(imgStr, "UTF-8");
    
                String param = "image=" + imgParam;
    
                // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
    //            String accessToken = "[调用鉴权接口获取的token]";
    
                String result = HttpUtil.post(url, accessToken, param);
                System.out.println(result);
                return result;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        // 通用文字 高精度版识别
        public static String accurateBasic(String filePath,String accessToken) {
            // 请求url
            String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic";
            try {
                // 本地文件路径
    //            String filePath = "[本地文件路径]";
                byte[] imgData = FileUtil.readFileByBytes(filePath);
                String imgStr = Base64Util.encode(imgData);
                String imgParam = URLEncoder.encode(imgStr, "UTF-8");
    
                String param = "image=" + imgParam;
    
                // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
    //            String accessToken = "[调用鉴权接口获取的token]";
    
                String result = HttpUtil.post(url, accessToken, param);
                System.out.println(result);
                return result;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        //通用文字 高精度,含位置信息
        public static String accurate(String filePath,String accessToken) {
            // 请求url
            String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate";
            try {
                // 本地文件路径
    //            String filePath = "[本地文件路径]";
                byte[] imgData = FileUtil.readFileByBytes(filePath);
                String imgStr = Base64Util.encode(imgData);
                String imgParam = URLEncoder.encode(imgStr, "UTF-8");
    
                String param = "image=" + imgParam;
    
                // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
    //            String accessToken = "[调用鉴权接口获取的token]";
    
                String result = HttpUtil.post(url, accessToken, param);
                System.out.println(result);
                return result;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
    }

    4、调用测试

    public class ApiMain {
        public static void main(String[] args) {
    
            String accessToken = AuthService.getAuth();
            String filePath = "D:\temp\ocr_test01.png";
    //        OCRService.generalBasic(filePath,accessToken);
            OCRService.accurateBasic(filePath,accessToken);
        }
    }
  • 相关阅读:
    让 .Net 程序 脱离 .net framework框架 运行的方法 转
    MySpaces性能提高的过程转
    AskNet 内容查询系统 筹备中
    关于自定义表单的一些想法
    Url重写
    show一下我的办公桌
    IronRuby 初览
    微软将终止对SQL2000的支持
    WCF 消息交换 转
    感受刘德华的努力
  • 原文地址:https://www.cnblogs.com/asker009/p/13863051.html
Copyright © 2020-2023  润新知