1. 程式人生 > >基於java的百度語音識別示例

基於java的百度語音識別示例



最近一直在搞java,就選擇了java工程。將程式碼拷過去。同時複製檔案“test.pcm”到工程目錄下。就基本上可以了。

注:test.pcm是語音檔案,可以用audacity軟體開啟,選擇 檔案->匯入->裸資料。 設定取樣率為8000Hz。點選播放就能聽見聲音了。

這個時候程式跑起來還有問題,需要將apiKey 以及secretKey填寫上。這兩個值是你申請應用對應的分配好的。

cuid填本機mac地址就可以了,這個值我試過好像無所謂沒啥要求。

程式能跑起來,並且按照正常返回識別的語音結果。但是返回結果的編碼為GBK,所以漢字顯示為亂碼,需要對其進行一次轉碼。轉碼的程式碼是我自己加上去的。

下面貼程式碼:

  1. package com.baidu.speech.serviceapi;  
  2. import java.io.BufferedReader;  
  3. import java.io.DataOutputStream;  
  4. import java.io.File;  
  5. import java.io.FileInputStream;  
  6. import java.io.IOException;  
  7. import java.io.InputStream;  
  8. import java.io.InputStreamReader;  
  9. import java.io.UnsupportedEncodingException;  
  10. import java.net.HttpURLConnection;  
  11. import java.net.URL;  
  12. import java.net.URLDecoder;  
  13. import java.net.URLEncoder;  
  14. import javax.xml.bind.DatatypeConverter;  
  15. import org.json.JSONObject;  
  16. publicclass Sample {  
  17.     privatestaticfinal String serverURL = "http://vop.baidu.com/server_api";  
  18.     privatestatic
     String token = "";  
  19.     privatestaticfinal String testFileName = "test.pcm"// 百度語音提供技術支援
  20.     //put your own params here
  21.     // 下面3個值要填寫自己申請的app對應的值
  22.     privatestaticfinal String apiKey = "";  
  23.     privatestaticfinal String secretKey = "";  
  24.     privatestaticfinal String cuid = "";  
  25.     publicstaticvoid main(String[] args) throws Exception {  
  26.         getToken();  
  27.         method1();  
  28.         method2();  
  29.     }  
  30.     privatestaticvoid getToken() throws Exception {  
  31.         String getTokenURL = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials" +   
  32.             "&client_id=" + apiKey + "&client_secret=" + secretKey;  
  33.         HttpURLConnection conn = (HttpURLConnection) new URL(getTokenURL).openConnection();  
  34.         token = new JSONObject(printResponse(conn)).getString("access_token");  
  35.     }  
  36.     privatestaticvoid method1() throws Exception {  
  37.         File pcmFile = new File(testFileName);  
  38.         HttpURLConnection conn = (HttpURLConnection) new URL(serverURL).openConnection();  
  39.         // construct params
  40.         JSONObject params = new JSONObject();  
  41.         params.put("format""pcm");  
  42.         params.put("rate"8000);  
  43.         params.put("channel""1");  
  44.         params.put("token", token);  
  45.         params.put("lan""zh");  
  46.         params.put("cuid", cuid);  
  47.         params.put("len", pcmFile.length());  
  48.         params.put("speech", DatatypeConverter.printBase64Binary(loadFile(pcmFile)));  
  49.         // add request header
  50.         conn.setRequestMethod("POST");  
  51.         conn.setRequestProperty("Content-Type""application/json; charset=utf-8");  
  52.         conn.setDoInput(true);  
  53.         conn.setDoOutput(true);  
  54.         // send request
  55.         DataOutputStream wr = new DataOutputStream(conn.getOutputStream());  
  56.         wr.writeBytes(params.toString());  
  57.         wr.flush();  
  58.         wr.close();  
  59.         printResponse(conn);  
  60.     }  
  61.     privatestaticvoid method2() throws Exception {  
  62.         File pcmFile = new File(testFileName);  
  63.         HttpURLConnection conn = (HttpURLConnection) new URL(serverURL  
  64.                 + "?cuid=" + cuid + "&token=" + token).openConnection();  
  65.         // add request header
  66.         conn.setRequestMethod("POST");  
  67.         conn.setRequestProperty("Content-Type""audio/pcm; rate=8000");  
  68.         conn.setDoInput(true);  
  69.         conn.setDoOutput(true);  
  70.         // send request
  71.         DataOutputStream wr = new DataOutputStream(conn.getOutputStream());  
  72.         wr.write(loadFile(pcmFile));  
  73.         wr.flush();  
  74.         wr.close();  
  75.         System.out.println(getUtf8String(printResponse(conn)));  
  76.     }  
  77.     privatestatic String printResponse(HttpURLConnection conn) throws Exception {  
  78.         if (conn.getResponseCode() != 200) {  
  79.             // request error
  80.             System.out.println("conn.getResponseCode() = " + conn.getResponseCode());  
  81.             return"";  
  82.         }  
  83.         InputStream is = conn.getInputStream();  
  84.         BufferedReader rd = new BufferedReader(new InputStreamReader(is));  
  85.         String line;  
  86.         StringBuffer response = new StringBuffer();  
  87.         while ((line = rd.readLine()) != null) {  
  88.             response.append(line);  
  89.             response.append('\r');  
  90.         }  
  91.         rd.close();  
  92.         System.out.println(new JSONObject(response.toString()).toString(4));  
  93.         return response.toString();  
  94.     }  
  95.     privatestaticbyte[] loadFile(File file) throws IOException {  
  96.         InputStream is = new FileInputStream(file);  
  97.         long length = file.length();  
  98.         byte[] bytes = newbyte[(int) length];  
  99.         int offset = 0;