百度云语音识别,Audio2Txt(c#)

时间:2023-12-14 12:54:14

百度云识别没有提供c#版本的sdk,下面给个c#的

1、打开网址http://developer.baidu.com/

2、登陆

3、管理控制台》开发者服务管理

4、创建工程

5、输入名称,点击创建

6、点击左边【媒体云】》【语音识别】》申请开启语音服务,申请内容写的诚恳一点,一般2天就可以通过了,开通成功后右上角有消息提示,注意观察

7、申请通过后,就可以来弄了

可以自己先看下百度提供的文档

我是百度文档,点击我查看

下面上代码 然后再详细解释

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Threading; namespace TestBaiDuAudio2Txt
{
public partial class Form1 : Form
{
string token = "";
string filename = Application.StartupPath + "\\3.wav";
string apiKey = "";//对应百度云界面基本信息的API Key
string secretKey = "";//对应百度云界面基本信息的Secret Key
string cuid = "";//这个随便写 不过尽量写唯一的,比如自己创建个guid,或者你手机号码什么的都可以
string getTokenURL = "";
string serverURL = "http://vop.baidu.com/server_api";
public Form1()
{
InitializeComponent();
cuid = Guid.NewGuid().ToString();
// getToken();
// Post();
} //这个方法得到一个密钥,这个密钥可以使用1个月,1个月之后要重新请求一次获得一个
private void getToken()
{
getTokenURL = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials" +
"&client_id=" + apiKey + "&client_secret=" + secretKey;
token = GetValue("access_token");
} private string GetValue(string key)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(getTokenURL);
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader1 = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string ssss = reader1.ReadToEnd().Replace("\"", "").Replace("{", "").Replace("}", "").Replace("\n", "");
string[] indexs = ssss.Split(',');
foreach (string index in indexs)
{
string[] _indexs = index.Split(':');
if (_indexs[] == key)
return _indexs[];
}
return "";
} private void Post()
{ serverURL += "?lan=en&cuid=kwwwvagaa&token=" + token;
FileStream fs = new FileStream(filename, FileMode.Open);
byte[] voice = new byte[fs.Length];
fs.Read(voice, , voice.Length);
fs.Close();
fs.Dispose(); HttpWebRequest request = null; Uri uri = new Uri(serverURL);
request = (HttpWebRequest)WebRequest.Create(uri);
request.Timeout = ;
request.Method = "POST";
request.ContentType = "audio/wav; rate=8000";
request.ContentLength = voice.Length;
try
{
using (Stream writeStream = request.GetRequestStream())
{
writeStream.Write(voice, , voice.Length);
writeStream.Close();
writeStream.Dispose();
}
}
catch
{
return;
}
string result = string.Empty;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8))
{
string line = string.Empty;
StringBuilder sb = new StringBuilder();
while (!readStream.EndOfStream)
{
line = readStream.ReadLine();
sb.Append(line);
sb.Append("\r");
} // result = readStream.ReadToEnd(); result = sb.ToString(); //message = result.Substring(result.IndexOf("utterance") + 12);
//message = message.Substring(0, message.IndexOf("\""));
readStream.Close();
readStream.Dispose();
MessageBox.Show(result);
}
responseStream.Close();
responseStream.Dispose();
}
response.Close();
} this.textBox1.BeginInvoke(new MethodInvoker(delegate()
{
this.textBox1.Text = result;
})); } private void button1_Click(object sender, EventArgs e)
{
Thread th = new Thread(Post);
th.IsBackground = true;
th.Start();
} }
}

getToken()方法不需要每次都执行,这个方法返回一个密钥字符串,可以使用30天,你自己进行判断,将要过期的时候再请求一次得到个新的就可以了

request.ContentType = "audio/wav; rate=8000";  这个地方注意一下,你可以在文档中看到支持6种格式,rate支持8000和16000,不过我使用8000识别有问题,你们自己可试一下

注意下:

语音识别接口支持 POST 方式
 目前 API 仅支持整段语音识别的模式,即需要上传整段语音进行识别
 语音数据上传方式有两种:隐示发送和显示发送
 原始语音的录音格式目前只支持评测 8k/16k 采样率 16bit 位深的单声道语音
 压缩格式支持:pcm(不压缩)、wav、opus、speex、amr、x-flac
 系统支持语言种类:中文(zh)、粤语(ct)、英文(en)

还有一下其他的说明你可以看百度的文档,另外可以使用网络上的语音文件

还有不懂的地方 回帖问吧