zoukankan      html  css  js  c++  java
  • 三、Audio To Text

    本节来概要的谈一下利用Google的Api实现将语音转换为文字

    请求的URL为:http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=zh-CN  
             http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=zh-CN&maxresults=1
    参数:
    1、xjerr  ???参数功能不详,值只能是0或1,去掉也能正常获得结果;
    2、client  客户端类型
    3、lang    语言类型,英文为en-US。更多参见http://msdn.microsoft.com/en-us/library/ms533052(v=vs.85).aspx
    4、maxresults  最大返回结果数量,多个结果在hypotheses(请求返回的数据项)列表中保存。

    使用方式:

            protected void Page_Load(object sender, EventArgs e)
            {
                Response.Write(GoogleSTT());
            }
            private string GoogleSTT()
            {
                string result = string.Empty;
    
                string inFile = @"F:\hebeidaxue.wav";
                FileStream fs = new FileStream(inFile, FileMode.Open);
                byte[] voice = new byte[fs.Length];
                fs.Read(voice, 0, voice.Length);
                fs.Close();
    
                HttpWebRequest request = null;
                string url = "http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=zh-CN";
                Uri uri = new Uri(url);
                request = (HttpWebRequest)WebRequest.Create(uri);
                request.Method = "POST";
                request.ContentType = "audio/L16; rate=16000";
                request.ContentLength = voice.Length;
                using (Stream writeStream = request.GetRequestStream())
                {
                    writeStream.Write(voice, 0, voice.Length);
                }
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (Stream responseStream = response.GetResponseStream())
                    {
                        using (StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8))
                        {
                            result = readStream.ReadToEnd();
                        }
                    }
                }
    
                return result;
            }

    返回结果的格式

    {"status":0,"id":"a44e9fab4888a7713175a07b035d49ad-1","hypotheses":[{"utterance":"大家早上好","confidence":0.7236291}]}

    其实就是通过Http向google发送语音请求,返回的是识别的内容。
    需要注意: request.ContentType
    google默认的是request.ContentType = "audio/x-flac; rate=16000; 即:支持flac格式的语音。

    其他的语音格式:

     1、WAV格式

        请求Header:Content-Type: audio/L16; rate=16000

        返回结果:识别成功

        2、MP3格式

        请求Header:Content-Type: audio/mpeg; rate=16000

        返回结果:无法识别的编码

     

        请求Header:Content-Type: audio/mpeg3; rate=16000

        返回结果:无法识别的编码

        请求Header:Content-Type: audio/x-mpeg; rate=16000

        返回结果:无法识别的编码

     

        请求Header:Content-Type: audio/x-mpeg-3; rate=16000

        返回结果:无法识别的编码

        请求Header:Content-Type: audio/mp3; rate=16000

        返回结果:无法识别的编码

        3、PCM格式

        请求Header:Content-Type: audio/x-ogg-pcm; rate=16000

        返回结果:无法识别的编码

        请求Header:Content-Type: audio/pcm; rate=16000

        返回结果:无法识别的编码

        4、SPEEX格式

        请求Header:Content-Type: audio/x-speex-with-header-byte; rate=16000

        返回结果:识别成功

        请求Header:Content-Type: audio/speex; rate=16000

        返回结果:识别成功

    无法识别的类型,就只能转码之后在去请求了。

    本机测试语音时候可以通过软件Audacity去录音(rate=16000),然后保存为想要的格式。

  • 相关阅读:
    台州 OJ 3847 Mowing the Lawn 线性DP 单调队列
    洛谷 OJ P1417 烹调方案 01背包
    快速幂取模
    台州 OJ 2649 More is better 并查集
    UVa 1640
    UVa 11971
    UVa 10900
    UVa 11346
    UVa 10288
    UVa 1639
  • 原文地址:https://www.cnblogs.com/wupeiqi/p/3064088.html
Copyright © 2011-2022 走看看