百度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);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM