美文网首页
.NET调用讯飞语音识别webapi

.NET调用讯飞语音识别webapi

作者: 峰_e901 | 来源:发表于2018-08-16 21:02 被阅读0次

参考资料:语音听写 · 科大讯飞REST_API开发指南

开发目的:前面做语音识别的时候用的百度的API,发现百度API的处理速度比较慢,所以这两天研究了下讯飞的语音识别API,识别速度比百度的快许多

开发中遇到的问题

1.X_Param 参数开始的时候带了空格导致验证不过,原因是讯飞将字符串做了repelce处理

2.讯飞后台设置白名单IP

以下是关键代码:

string path = "語音文件路徑";

var data = File.ReadAllBytes(path);

string base64_audio = Convert.ToBase64String(data);//将二进制的语音文件转base64

string body = "audio="+ System.Web.HttpUtility.UrlEncode(base64_audio);

string url = "http://api.xfyun.cn/v1/service/v1/iat";

string X_Param = ToBase64String("{ \"engine_type\": \"sms16k\", \"aue\": \"raw\"}");//转base64,注意要保去除空格,因为讯飞后台有去空格操作

string X_Time = GetTimeStamp(true);//获取时间戳

HttpContent httpContent = new StringContent(body,Encoding.UTF8, "application/x-www-form-urlencoded");

httpContent.Headers.Add("X-Param", X_Param);

httpContent.Headers.Add("X-CurTime", X_Time);

httpContent.Headers.Add("X-Appid", appid);

httpContent.Headers.Add("X-CheckSum", MD5String(apikey, X_Time, X_Param));

var httpClient = new HttpClient();

HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;

if (response.IsSuccessStatusCode)

{

  string responseJson = response.Content.ReadAsStringAsync().Result;

  Console.WriteLine(responseJson); 

}

 else

 {

      Console.WriteLine("Error,StatusCode:" + response.StatusCode.ToString());

 }

Console.ReadKey();


字符串转base64方法

public static string ToBase64String(string value)

{

value = value.Replace(" ", "");

if (value == null || value == ""){

return "";

}

byte[] bytes = Encoding.UTF8.GetBytes(value); return Convert.ToBase64String(bytes);

}


MD5方法

public static string MD5String(string api_key, string x_time, string x_param)

{

var hash = System.Security.Cryptography.MD5.Create(); //拼接签名数据

var signStr = api_key + x_time + x_param ;

var bytes = Encoding.UTF8.GetBytes(signStr); //使用MD5加密

var md5Val = hash.ComputeHash(bytes); //把二进制转化为大写的十六进制

StringBuilder result = new StringBuilder();

foreach (var c in md5Val) {

result.Append(c.ToString("X2"));

}

return result.ToString().ToLower();

}


获取时间戳方法

public static string GetTimeStamp(bool bflag)

{

TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);

string ret = string.Empty;

if (bflag)

ret = Convert.ToInt64(ts.TotalSeconds).ToString();

else

ret = Convert.ToInt64(ts.TotalMilliseconds).ToString();

return ret;

}

相关文章

网友评论

      本文标题:.NET调用讯飞语音识别webapi

      本文链接:https://www.haomeiwen.com/subject/mwxabftx.html