国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Java > 正文

Java實現(xiàn)的百度語音識別功能示例

2024-07-14 08:42:09
字體:
供稿:網(wǎng)友

本文實例講述了Java實現(xiàn)的百度語音識別功能。分享給大家供大家參考,具體如下:

SDK以及示例代碼下載地址: http://yuyin.baidu.com/sdk

最近一直在搞java,就選擇了java工程。將代碼拷過去。同時復(fù)制文件“test.pcm”到工程目錄下。就基本上可以了。

注:test.pcm是語音文件,可以用audacity軟件打開,選擇 文件->導(dǎo)入->裸數(shù)據(jù)。 設(shè)置采樣率為8000Hz。點擊播放就能聽見聲音了。

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

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

程序能跑起來,并且按照正常返回識別的語音結(jié)果。但是返回結(jié)果的編碼為GBK,所以漢字顯示為亂碼,需要對其進(jìn)行一次轉(zhuǎn)碼。轉(zhuǎn)碼的代碼是我自己加上去的。

下面貼代碼:

package com.baidu.speech.serviceapi;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLDecoder;import java.net.URLEncoder;import javax.xml.bind.DatatypeConverter;import org.json.JSONObject;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"; // 百度語音提供技術(shù)支持  //put your own params here  // 下面3個值要填寫自己申請的app對應(yīng)的值  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("lan", "zh");    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();    System.out.println(getUtf8String(printResponse(conn)));  }  private static String printResponse(HttpURLConnection conn) throws Exception {    if (conn.getResponseCode() != 200) {      // request error     System.out.println("conn.getResponseCode() = " + conn.getResponseCode());      return "";    }    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('/r');    }    rd.close();    System.out.println(new JSONObject(response.toString()).toString(4));    return response.toString();  }  private static byte[] loadFile(File file) throws IOException {    InputStream is = new FileInputStream(file);    long length = file.length();    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;  }  // GBK編碼轉(zhuǎn)為UTF-8  private static String getUtf8String(String s) throws UnsupportedEncodingException  {   StringBuffer sb = new StringBuffer();   sb.append(s);   String xmlString = "";   String xmlUtf8 = ""; xmlString = new String(sb.toString().getBytes("GBK")); xmlUtf8 = URLEncoder.encode(xmlString , "GBK");   return URLDecoder.decode(xmlUtf8, "UTF-8");  }}

希望本文所述對大家java程序設(shè)計有所幫助。


注:相關(guān)教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 冕宁县| 介休市| 和林格尔县| 秦皇岛市| 宁波市| 开江县| 亚东县| 科技| 嘉禾县| 抚松县| 兰溪市| 凤冈县| 广西| 甘肃省| 托克逊县| 丹东市| 阿坝| 南川市| 吉安市| 左云县| 南华县| 贵州省| 防城港市| 南靖县| 新和县| 灯塔市| 东方市| 介休市| 香港| 绍兴市| 庐江县| 贵德县| 盱眙县| 石狮市| 新绛县| 大方县| 台中县| 光泽县| 镇原县| 南通市| 封丘县|