1. 程式人生 > >百度雲人工智慧api使用

百度雲人工智慧api使用

登入或者註冊使用者

百度找到官網連結:
這裡寫圖片描述
點選控制檯:
這裡寫圖片描述
登入上去,沒有百度賬戶的可以先註冊:
這裡寫圖片描述
點選產品服務,找到人工智慧,然後點選文字識別:
這裡寫圖片描述
點選建立應用
這裡寫圖片描述
隨便填自己的想要的名字,應用型別也可以自己選一個:
這裡寫圖片描述
自己填點內容進去,點選立即建立即可:
這裡寫圖片描述
建立成功,這兩個東西以後要用到的:
這裡寫圖片描述

下面是程式碼呼叫api

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.FileReader;
import java.io.IOException;
import
java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.util.Base64; import java.util.List; import java.util.Map; import org.json.JSONObject; import com.alibaba.fastjson.JSON; public class TestApi
{
public static void main(String[] args) throws Exception { /* String ss= "中國"; String s=Base64.getEncoder().encodeToString(ss.getBytes("gbk")); System.out.println(s); byte[] b = Base64.getDecoder().decode(s); System.out.println(new String(b,"gbk"));*/ //第一步,官方要求需要把圖片轉base64再轉URLEncoder
//獲取圖片base64編碼 String image =getImageStr("D:\\360Rec\\183410564149088537.jpg"); String APIKey = "你的APIKey"; String SecretKey = "你的SecretKey"; //第二步, 通過API Key和Secret Key獲取的access_token String access_token = getAuth(APIKey, SecretKey); System.out.println("access_token: " + access_token); //拼接請求體 String content = "access_token=" + URLEncoder.encode(access_token, "gbk") + "&image=" + URLEncoder.encode(image, "gbk"); //表格識別url String imageUrl= "https://aip.baidubce.com/rest/2.0/solution/v1/form_ocr/request"; //第三步,傳送請求 String response = sendPost(imageUrl, content); //解析結果拿到request_id再次傳送結果介面請求獲取識別內容 String result = JSON.parseObject(response).get("result").toString(); String request_id = JSON.parseObject(result.substring(1,result.length()-1)).get("request_id").toString(); System.out.println("request_id: " + request_id); Thread.sleep(1000*10);//由於解析有延時,所以睡眠一下 //第四步,通過上面獲取到的request_id去獲取解析結果 //獲取結果url String resultURL= "https://aip.baidubce.com/rest/2.0/solution/v1/form_ocr/get_request_result"; //拼接結果請求體 String requestData = "access_token=" + URLEncoder.encode(access_token, "gbk") + "&request_id=" + URLEncoder.encode(request_id, "gbk") + "&result_type=excel"; //傳送結果請求 sendPost(resultURL,requestData); } /** * 解析圖片轉成base64編碼 * @param imgFile * @return * @throws Exception */ public static String getImageStr(String imgFile) throws Exception { // 將圖片檔案轉化為位元組陣列字串,並對其進行Base64編碼處理 //String imgFile = "d:\\111.jpg";// 待處理的圖片 /* InputStream in = null; byte[] data = null; // 讀取圖片位元組陣列 try { in = new FileInputStream(imgFile); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); }*/ StringBuffer buffer = new StringBuffer(); BufferedReader bf= new BufferedReader(new FileReader(imgFile)); String s = null; while((s = bf.readLine())!=null){//使用readLine方法,一次讀一行 buffer.append(s.trim()); } String data = buffer.toString(); // 對位元組陣列Base64編碼 // BASE64Encoder encoder = new BASE64Encoder(); // 返回Base64編碼過的位元組陣列字串 // return encoder.encode(data.getBytes("gbk")); return Base64.getEncoder().encodeToString(data.getBytes("gbk")); } /** * * @param u url地址 * @param param 跟在?後面的引數 * @return */ public static String sendPost(String u, String param) { StringBuffer sbf = new StringBuffer(); try { URL url = new URL(u); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setRequestMethod("POST"); connection.setUseCaches(false); connection.setInstanceFollowRedirects(true); // connection.addRequestProperty("role", "Admin"); connection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); connection.connect(); DataOutputStream out = new DataOutputStream(connection.getOutputStream()); if (!"".equals(param)) { // 正文,正文內容其實跟get的URL中 '? '後的引數字串一致 // String content = "欄位名=" + URLEncoder.encode("字串值", "編碼"); out.writeBytes(param); } out.flush(); out.close(); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); String lines; while ((lines = reader.readLine()) != null) { lines = new String(lines.getBytes(), "utf-8"); sbf.append(lines); } System.out.println(sbf); reader.close(); // 斷開連線 connection.disconnect(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return sbf.toString(); } /** * 通過API Key和Secret Key獲取的access_token * @param ak API Key * @param sk Secret Key * @return */ 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.out.println("result:" + result); JSONObject jsonObject = new JSONObject(result); String access_token = jsonObject.getString("access_token"); return access_token; } catch (Exception e) { System.err.printf("獲取token失敗!"); e.printStackTrace(System.err); } return null; } }
 <!--百度雲api  -->
    <dependency>
    <groupId>com.baidu.aip</groupId>
    <artifactId>java-sdk</artifactId>
    <version>${aip.version}</version>
</dependency>

下面是使用案例程式碼:

import java.util.HashMap;

import org.json.JSONObject;

import com.baidu.aip.ocr.AipOcr;

public class TestAip {
    //設定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 client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);

        // 可選:設定網路連線引數
        client.setConnectionTimeoutInMillis(2000);
        client.setSocketTimeoutInMillis(60000);

        // 可選:設定代理伺服器地址, http和socket二選一,或者均不設定
     //   client.setHttpProxy("proxy_host", proxy_port);  // 設定http代理
       // client.setSocketProxy("proxy_host", proxy_port);  // 設定socket代理

        // 可選:設定log4j日誌輸出格式,若不設定,則使用預設配置
        // 也可以直接通過jvm啟動引數設定此環境變數
        System.setProperty("aip.log4j.conf", "log4j.properties");

        // 傳入可選引數呼叫介面
        HashMap<String, String> options = new HashMap<String, String>();
        options.put("result_type", "json");

        //解析結果拿到request_id再次傳送結果介面請求獲取識別內容
        String result = JSON.parseObject(res.toString(2)).get("result").toString();
        String request_id = JSON.parseObject(result.substring(1,result.length()-1)).get("request_id").toString();
        System.out.println("request_id: " + request_id);

        //String requestId = "11253090_374367";
        //睡眠10秒,由於上面請求後,圖片解析需要一點時間,這裡睡眠一會再去呼叫結果介面,不然會返回的狀態ret_msg是未開始或者進行中
        Thread.sleep(1000*10);
        // 表格識別結果
        JSONObject ress = client.tableResultGet(request_id, options);
        System.out.println(ress.toString(2));

    }

}

執行結果:
這裡寫圖片描述