码迷,mamicode.com
首页 > 其他好文 > 详细

csharp:百度语音识别

时间:2015-11-25 18:40:31      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:

 public string API_id = "8888"; //你的ID
        public string API_record = null;
        public string API_record_format = "wav";
        public string API_record_HZ = "16000";
        public string API_key = "geovindu"; //你的KEY
        public string API_secret_key = "55519"; //你的SECRRET_KEY
        public string API_language = "zh";
        public string API_access_token = null;
        public string strJSON = "";

        //录音
        [DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]
        public static extern int mciSendString(
         string lpstrCommand,
         string lpstrReturnString,
         int uReturnLength,
         int hwndCallback
        );
        /// <summary>
        /// 
        /// </summary>
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            API_record=Application.StartupPath + "\\上班.wav";
            API_access_token = getStrAccess(API_key, API_secret_key);

        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            this.textBox2.Text = getStrText(API_id, API_access_token, API_language, API_record, API_record_format, API_record_HZ);

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="para_API_key">你的KEY</param>
        /// <param name="para_API_secret_key">你的SECRRET_KEY</param>
        /// <returns></returns>
        public string getStrAccess(string para_API_key, string para_API_secret_key)
        {

            //方法参数说明:             
            //para_API_key:API_key(你的KEY)             
            //para_API_secret_key(你的SECRRET_KEY)             
            //方法返回值说明:             
            //百度认证口令码,access_token             
            string access_html = null;
            string access_token = null;
            string getAccessUrl = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials" +"&client_id=" + para_API_key + "&client_secret=" + para_API_secret_key;
            try
            {
                HttpWebRequest getAccessRequest = WebRequest.Create(getAccessUrl) as HttpWebRequest;
                //getAccessRequest.Proxy = null;                 
                getAccessRequest.ContentType = "multipart/form-data"; 
                getAccessRequest.Accept = "*/*";
                getAccessRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";
                getAccessRequest.Timeout = 30000;//30秒连接不成功就中断                  
                getAccessRequest.Method = "post"; 
                HttpWebResponse response = getAccessRequest.GetResponse() as HttpWebResponse;
                using (StreamReader strHttpComback = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                {
                    access_html = strHttpComback.ReadToEnd();
                }
            }
            catch (WebException ex)
            {
                MessageBox.Show(ex.ToString());
            }

            JObject jo = JObject.Parse(access_html);
            access_token = jo["access_token"].ToString();//得到返回的toke             
            return access_token; 
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="para_API_id"></param>
        /// <param name="para_API_access_token"></param>
        /// <param name="para_API_language"></param>
        /// <param name="para_API_record"></param>
        /// <param name="para_format"></param>
        /// <param name="para_Hz"></param>
        /// <returns></returns>
        public string getStrText(string para_API_id, string para_API_access_token, string para_API_language, string para_API_record, string para_format, string para_Hz) 
        { 
            //方法参数说明:             
            //para_API_id: API_id (你的ID) 
            //para_API_access_token (getStrAccess(...)方法得到的access_token口令) 
            //para_API_language (你要识别的语言,zh,en,ct) 
            //para_API_record(语音文件的路径) 
            //para_format(语音文件的格式) 
            //para_Hz(语音文件的采样率 16000或者8000) 
              
            //该方法返回值:             
            //该方法执行正确返回值是语音翻译的文本,错误是错误号,可以去看百度语音文档,查看对应错误             
            string strText = null; 
            string error = null; 
            FileInfo fi = new FileInfo(para_API_record); 
            FileStream fs = new FileStream(para_API_record, FileMode.Open); 
            byte[] voice = new byte[fs.Length]; 
            fs.Read(voice, 0, voice.Length); 
            fs.Close(); 
  
            string getTextUrl = "http://vop.baidu.com/server_api?lan=" + para_API_language + "&cuid=" + para_API_id + "&token=" + para_API_access_token; 
            HttpWebRequest getTextRequst = WebRequest.Create(getTextUrl) as HttpWebRequest; 
  
           /* getTextRequst.Proxy = null; 
            getTextRequst.ServicePoint.Expect100Continue = false; 
            getTextRequst.ServicePoint.UseNagleAlgorithm = false; 
            getTextRequst.ServicePoint.ConnectionLimit = 65500; 
            getTextRequst.AllowWriteStreamBuffering = false;*/ 
  
            getTextRequst.ContentType = "audio /"+para_format+";rate="+para_Hz; 
            getTextRequst.ContentLength = fi.Length; 
            getTextRequst.Method = "post"; 
            getTextRequst.Accept = "*/*"; 
            getTextRequst.KeepAlive = true;
            getTextRequst.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"; 
            getTextRequst.Timeout = 30000;//30秒连接不成功就中断              
            using (Stream writeStream = getTextRequst.GetRequestStream()) 
            { 
                writeStream.Write(voice, 0, voice.Length); 
            } 
  
            HttpWebResponse getTextResponse = getTextRequst.GetResponse() as HttpWebResponse;        
            using (StreamReader strHttpText = new StreamReader(getTextResponse.GetResponseStream(), Encoding.UTF8)) 
            { 
                strJSON = strHttpText.ReadToEnd(); 
            } 
                
            JObject jsons = JObject.Parse(strJSON);//解析JSON  
               
            if (jsons["err_msg"].Value<string>() == "success.") 
            {                  
                    strText = jsons["result"][0].ToString(); 
                    return strText; 
            } 
            else
            { 
                    error = jsons["err_no"].Value<string>() + jsons["err_msg"].Value<string>(); 
                    return error; 
            } 
              
        }

  参考: http://yuyin.baidu.com/docs/asr/57 

API请求方式基本说明

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

 

csharp:百度语音识别

标签:

原文地址:http://www.cnblogs.com/geovindu/p/4995169.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!