• 三、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),然后保存为想要的格式。

  • 相关阅读:
    简单的三级联动练习
    JavaScript中定时器的暂停和继续
    关于ajax网络请求的封装
    关于JS历史
    KVC中setValuesForKeysWithDictionary:
    collectionView 中cell间距设置建议
    iOS中你必须了解的多线程
    iOS中关于动态Tableview中的cell数据传输的多线程问题解决之拙见
    Touch
    Filemanager 的使用
  • 原文地址:https://www.cnblogs.com/wupeiqi/p/3064088.html
Copyright © 2020-2023  润新知