• 科大讯飞语音转文字,ffmpeg将wav转成pcm二进制音频文件


    百度和讯飞和其他厂都提供了语音识别的接口,这里使用讯飞的识别将本地手机录的音频文件转成文字

    以下注意事项:

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

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

    3.本地的文件请使用ffmpeg转码成pcm标准格式,

    参考:http://ai.baidu.com/docs#/ASR-Tool-convert/top

    1.在本地将wav等上传的音频文件ffmpeg转码成pcm格式,方法如下

      /// <summary>
            /// 将Wav音频转成pcm手机音频
            /// </summary>
            /// <param name="applicationPath">ffmeg.exe文件路径</param>
            /// <param name="fileName">WAV文件的路径(带文件名)</param>
            /// <param name="targetFilName">生成目前amr文件路径(带文件名)</param>
            public void ConvertToPcm(string applicationPath, string fileName, string targetFilName)
            {
                string c = applicationPath + @"\ffmpeg.exe -y -i " + fileName + " -acodec pcm_s16le -f s16le -ac 1 -ar 16000 " + targetFilName;
                var res = Cmd(c);
            }
    
            /// <summary>
            /// 执行Cmd命令
            /// </summary>
            private string Cmd(string c)
            {
                string strOuput = string.Empty;
                try
                {
                    Process p = new Process();
                    //设置要启动的应用程序
                    p.StartInfo.FileName = "cmd.exe";
                    //是否使用操作系统shell启动
                    p.StartInfo.UseShellExecute = false;
                    // 接受来自调用程序的输入信息
                    p.StartInfo.RedirectStandardInput = true;
                    //输出信息
                    p.StartInfo.RedirectStandardOutput = true;
                    // 输出错误
                    p.StartInfo.RedirectStandardError = true;
                    //不显示程序窗口
                    p.StartInfo.CreateNoWindow = true;
                    //启动程序
                    p.Start();
    
                    //向cmd窗口发送输入信息
                    p.StandardInput.WriteLine(c + "&exit");
    
                    p.StandardInput.AutoFlush = true;
    
                    //获取输出信息
                    strOuput = p.StandardOutput.ReadToEnd();
                    //等待程序执行完退出进程
                    p.WaitForExit();
                    p.Close();
                }
                catch
                { }
                return strOuput;
            }
    

      

    2.调用讯飞语音识别转文字,代码如下

                var appid = "xxx";//讯飞申请的appid
                var apikey = "xxxxxxxxxxxxxxxxxxxxx";
    
                var data = File.ReadAllBytes(path);//path为转化后的pcm文件路径
    
                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;
    
                var content = "对不起,识别不出来...";
                if (response.IsSuccessStatusCode)
    
                {
                    var responseJson = JsonHelper.Deserialize<XfResponse>(response.Content.ReadAsStringAsync().Result);
                    if (responseJson.code == "0")
                    {
                        content = responseJson.data;
                    }
                    else
                    {
                        content = responseJson.code;
                    }
                }        
    

      

  • 相关阅读:
    2016——3——16 kmp 7题
    bzoj3942——2016——3——15
    bzoj1355——2016——3——15
    poj 3641 ——2016——3——15
    KMP之我见
    转自他人——————TLE之前,没有一个节点叫失败!!!
    省选必知
    bzoj1449————2016——3——14
    bzoj1070————2016——3——14
    bzoj1562[NOI2009]变换序列——2016——3——12
  • 原文地址:https://www.cnblogs.com/langhaoabcd/p/10446164.html
Copyright © 2020-2023  润新知