Baidu Speech Recognition rest api usage (including JAVA code)-a method without SDK Integration

Source: Internet
Author: User
Tags oauth

 

The code in this article is JAVA edition and can be used in Android Application Development. The following describes the important code.

Get Token

ApiKey and secretKey are obtained from the Baidu open platform. For more information, see the previous article.

 

  private static void getToken() throws Exception {        String getTokenURL = https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials +             &client_id= + apiKey + &client_secret= + secretKey;        HttpURLConnection conn = (HttpURLConnection) new URL(getTokenURL).openConnection();        token = new JSONObject(printResponse(conn)).getString(access_token);    }
Assume that the voice file is testFileName = test. pcm, which is stored in a file. This file can be obtained in many ways. For example, you can call the recording-related API in Android. The following code shows how to obtain recognition results through Http network requests.

 

The Http connection uses the Post method. First, you need to set parameters and then upload local voice data.

 

 private static void method1() throws Exception {        File pcmFile = new File(testFileName);        HttpURLConnection conn = (HttpURLConnection) new URL(serverURL).openConnection();        // construct params        JSONObject params = new JSONObject();        params.put(format, pcm);        params.put(rate, 8000);        params.put(channel, 1);        params.put(token, token);        params.put(cuid, cuid);        params.put(len, pcmFile.length());        params.put(speech, DatatypeConverter.printBase64Binary(loadFile(pcmFile)));        // add request header        conn.setRequestMethod(POST);        conn.setRequestProperty(Content-Type, application/json; charset=utf-8);        conn.setDoInput(true);        conn.setDoOutput(true);        // send request        DataOutputStream wr = new DataOutputStream(conn.getOutputStream());        wr.writeBytes(params.toString());        wr.flush();        wr.close();        printResponse(conn);    }
Then, the response method is obtained, and the specific recognition result is processed.
  private static void method2() throws Exception {        File pcmFile = new File(testFileName);        HttpURLConnection conn = (HttpURLConnection) new URL(serverURL                + ?cuid= + cuid + &token= + token).openConnection();        // add request header        conn.setRequestMethod(POST);        conn.setRequestProperty(Content-Type, audio/pcm; rate=8000);        conn.setDoInput(true);        conn.setDoOutput(true);        // send request        DataOutputStream wr = new DataOutputStream(conn.getOutputStream());        wr.write(loadFile(pcmFile));        wr.flush();        wr.close();        printResponse(conn);    }

The following shows all the code of this demo. developers can enter their own keys and try to use them.

 

 

public class Sample {    private static final String serverURL = http://vop.baidu.com/server_api;    private static String token = ;    private static final String testFileName = test.pcm;    //put your own params here    private static final String apiKey = ;    private static final String secretKey = ;    private static final String cuid = ;    public static void main(String[] args) throws Exception {        getToken();        method1();        method2();    }    private static void getToken() throws Exception {        String getTokenURL = https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials +             &client_id= + apiKey + &client_secret= + secretKey;        HttpURLConnection conn = (HttpURLConnection) new URL(getTokenURL).openConnection();        token = new JSONObject(printResponse(conn)).getString(access_token);    }    private static void method1() throws Exception {        File pcmFile = new File(testFileName);        HttpURLConnection conn = (HttpURLConnection) new URL(serverURL).openConnection();        // construct params        JSONObject params = new JSONObject();        params.put(format, pcm);        params.put(rate, 8000);        params.put(channel, 1);        params.put(token, token);        params.put(cuid, cuid);        params.put(len, pcmFile.length());        params.put(speech, DatatypeConverter.printBase64Binary(loadFile(pcmFile)));        // add request header        conn.setRequestMethod(POST);        conn.setRequestProperty(Content-Type, application/json; charset=utf-8);        conn.setDoInput(true);        conn.setDoOutput(true);        // send request        DataOutputStream wr = new DataOutputStream(conn.getOutputStream());        wr.writeBytes(params.toString());        wr.flush();        wr.close();        printResponse(conn);    }    private static void method2() throws Exception {        File pcmFile = new File(testFileName);        HttpURLConnection conn = (HttpURLConnection) new URL(serverURL                + ?cuid= + cuid + &token= + token).openConnection();        // add request header        conn.setRequestMethod(POST);        conn.setRequestProperty(Content-Type, audio/pcm; rate=8000);        conn.setDoInput(true);        conn.setDoOutput(true);        // send request        DataOutputStream wr = new DataOutputStream(conn.getOutputStream());        wr.write(loadFile(pcmFile));        wr.flush();        wr.close();        printResponse(conn);    }    private static void printResponse(HttpURLConnection conn) throws Exception {        if (conn.getResponseCode() != 200) {            // request error        }        InputStream is = conn.getInputStream();        BufferedReader rd = new BufferedReader(new InputStreamReader(is));        String line;        StringBuffer response = new StringBuffer();        while ((line = rd.readLine()) != null) {            response.append(line);            response.append('');        }        rd.close();        System.out.println(new JSONObject(response.toString()).toString(4));    }    private static byte[] loadFile(File file) throws IOException {        InputStream is = new FileInputStream(file);        long length = file.length();r        byte[] bytes = new byte[(int) length];        int offset = 0;        int numRead = 0;        while (offset < bytes.length                && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {            offset += numRead;        }        if (offset < bytes.length) {            is.close();            throw new IOException(Could not completely read file  + file.getName());        }        is.close();        return bytes;    }}


 


 

 

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.