实时语音识别_c++实时语音识别 - CSDN
精华内容
参与话题
  • C# 实时语音识别

    千次阅读 2020-10-06 14:31:11
    文章转自我们团体一员:原文链接。 需要了解更多可以加群:559666429 。联系:大神“她是挚爱(326024420)”。 ...在网上查了好久,后来终于用一位大佬的源码搞了出来,经这位大佬的同意,我把这个demo放上来,以...

    文章转自我们团体一员:原文链接

    需要了解更多可以加群:559666429 。联系:大神“她是挚爱(326024420) ”。

     

     

    在网上查了好久,后来终于用一位大佬的源码搞了出来,经这位大佬的同意,我把这个demo放上来,以方便以后有同样需求的人能够轻松的解决掉这个问题,不要像我一样这么苦呵呵的。

    大佬的代码是winform,我放到了wpf上,代码都是一样的

    MainWindow.xaml

    复制代码

    <Window x:Class="TingXieB.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:TingXieB"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <TextBox x:Name="textBox1" HorizontalAlignment="Left" Height="135" Margin="69,29,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="293"/>
            <Button x:Name="button1" Content="Button" HorizontalAlignment="Left" Margin="69,227,0,0" VerticalAlignment="Top" Width="75" Click="button1_Click"/>
            <Button x:Name="button2" Content="Button" HorizontalAlignment="Left" Margin="300,227,0,0" VerticalAlignment="Top" Width="75" Click="button2_Click"/>
    
        </Grid>
    </Window>

    复制代码


    MainWindow.xaml.cs

    复制代码

    using NAudio.Wave;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using VoiceRecorder.Audio;
    
    namespace TingXieB
    {
        /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
            string session_begin_params;
            private WaveIn waveIn;
            private AudioRecorder recorder;
            private float lastPeak;//说话音量
            float secondsRecorded;
            float totalBufferLength;
            int Ends = 5;
            private const int BUFFER_SIZE = 4096;
            List<VoiceData> VoiceBuffer = new List<VoiceData>();
            public MainWindow()
            {
                InitializeComponent();
            }
            public void SpeechRecognition()//初始化语音识别
            {
                int ret = (int)ErrorCode.MSP_SUCCESS;
                string login_params = string.Format("appid=58622e79,word_dir= . ");//appid和msc.dll要配套
                #region 参数
                /*
                *sub:本次识别请求的类型  iat 连续语音识别;   asr 语法、关键词识别,默认为iat
                *domain:领域      iat:连续语音识别  asr:语法、关键词识别    search:热词   video:视频    poi:地名  music:音乐    默认为iat。 注意:sub=asr时,domain只能为asr
                *language:语言    zh_cn:简体中文  zh_tw:繁体中文  en_us:英文    默认值:zh_cn
                *accent:语言区域    mandarin:普通话    cantonese:粤语    lmz:四川话 默认值:mandarin
                *sample_rate:音频采样率  可取值:16000,8000  默认值:16000   离线识别不支持8000采样率音频
                *result_type:结果格式   可取值:plain,json  默认值:plain
                *result_encoding:识别结果字符串所用编码格式  GB2312;UTF-8;UNICODE    不同的格式支持不同的编码:   plain:UTF-8,GB2312  json:UTF-8
                */
                #endregion
                session_begin_params = "sub=iat,domain=iat,language=zh_cn,accent=mandarin,sample_rate=16000,result_type=plain,result_encoding=utf8";
    
                string Username = "";
                string Password = "";
                ret = MSCDLL.MSPLogin(Username, Password, login_params);
    
                if ((int)ErrorCode.MSP_SUCCESS != ret)//不成功
                {
                    //Console.WriteLine("失败了");
                    Console.WriteLine("MSPLogin failed,error code:{0}", ret.ToString());
                    MSCDLL.MSPLogout();
                }
            }
            private WaveIn CreateWaveInDevice()//WaveIn实例化
            {
                WaveIn newWaveIn = new WaveIn();
                //newWaveIn.WaveFormat = new WaveFormat(16000, 16, 1); // 16bit,16KHz,Mono的录音格式
                newWaveIn.WaveFormat = new WaveFormat(16000, 1);//16bit,1KHz 的录音格式
                newWaveIn.DataAvailable += OnDataAvailable;
                newWaveIn.RecordingStopped += OnRecordingStopped;
                return newWaveIn;
            }
            /// <summary>
            /// 开始录音回调函数       保存截获到的声音
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void OnDataAvailable(object sender, WaveInEventArgs e)
            {
                totalBufferLength += e.Buffer.Length;
                secondsRecorded = (float)(totalBufferLength / 32000);
    
                VoiceData data = new VoiceData();
                for (int i = 0; i < 3200; i++)
                {
                    data.data[i] = e.Buffer[i];
                }
                VoiceBuffer.Add(data);
    
                if (lastPeak < 20)
                    Ends = Ends - 1;
                else
                    Ends = 5;
    
                if (Ends == 0)
                {
                    if (VoiceBuffer.Count() > 5)
                    {
                        RunIAT(VoiceBuffer, session_begin_params);//调用语音识别
                    }
    
                    VoiceBuffer.Clear();
                    Ends = 5;
                }
    
            }
            /// <summary>
            /// 录音结束回调函数
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void OnRecordingStopped(object sender, StoppedEventArgs e)
            {
                if (e.Exception != null)
                {
                    /* MessageBox.Show(String.Format("A problem was encountered during recording {0}",
                                                   e.Exception.Message));*/
                    Console.WriteLine("A problem was encountered during recording {0}", e.Exception.Message);
                }
            }
            /// <summary>
            /// 指针转字符串
            /// </summary>
            /// <param name="p">指向非托管代码字符串的指针</param>
            /// <returns>返回指针指向的字符串</returns>
            private string PtrToStr(IntPtr p)
            {
                List<byte> lb = new List<byte>();
                try
                {
                    while (Marshal.ReadByte(p) != 0)
                    {
                        lb.Add(Marshal.ReadByte(p));
                        p = p + 1;
                    }
                }
                catch (AccessViolationException ex)
                {
                    SetText(String.Format(ex.Message));
                }
                return Encoding.UTF8.GetString(lb.ToArray());
            }
            //语音识别
            private void RunIAT(List<VoiceData> VoiceBuffer, string session_begin_params)
            {
                IntPtr session_id = IntPtr.Zero;
                string rec_result = string.Empty;
                string hints = "正常结束";
                AudioStatus aud_stat = AudioStatus.ISR_AUDIO_SAMPLE_CONTINUE;
                EpStatus ep_stat = EpStatus.ISR_EP_LOOKING_FOR_SPEECH;
                RecogStatus rec_stat = RecogStatus.ISR_REC_STATUS_SUCCESS;
                int errcode = (int)ErrorCode.MSP_SUCCESS;
    
                session_id = MSCDLL.QISRSessionBegin(null, session_begin_params, ref errcode);
                if ((int)ErrorCode.MSP_SUCCESS != errcode)
                {
                    SetText("\nQISRSessionBegin failed! error code:" + errcode);
                    return;
                }
    
                for (int i = 0; i < VoiceBuffer.Count(); i++)
                {
                    aud_stat = AudioStatus.ISR_AUDIO_SAMPLE_CONTINUE;
                    if (i == 0)
                        aud_stat = AudioStatus.ISR_AUDIO_SAMPLE_FIRST;
                    errcode = MSCDLL.QISRAudioWrite(PtrToStr(session_id), VoiceBuffer[i].data, (uint)VoiceBuffer[i].data.Length, aud_stat, ref ep_stat, ref rec_stat);
                    if ((int)ErrorCode.MSP_SUCCESS != errcode)
                    {
                        MSCDLL.QISRSessionEnd(PtrToStr(session_id), null);
                    }
                }
    
                errcode = MSCDLL.QISRAudioWrite(PtrToStr(session_id), null, 0, AudioStatus.ISR_AUDIO_SAMPLE_LAST, ref ep_stat, ref rec_stat);
                if ((int)ErrorCode.MSP_SUCCESS != errcode)
                {
                    SetText("\nQISRAudioWrite failed! error code:" + errcode);
                    return;
                }
    
                while (RecogStatus.ISR_REC_STATUS_SPEECH_COMPLETE != rec_stat)
                {
                    IntPtr rslt = MSCDLL.QISRGetResult(PtrToStr(session_id), ref rec_stat, 0, ref errcode);
                    if ((int)ErrorCode.MSP_SUCCESS != errcode)
                    {
                        SetText("\nQISRGetResult failed, error code: " + errcode);
                        break;
                    }
                    if (IntPtr.Zero != rslt)
                    {
                        string tempRes = PtrToStr(rslt);
    
                        rec_result = rec_result + tempRes;
                        if (rec_result.Length >= BUFFER_SIZE)
                        {
                            SetText("\nno enough buffer for rec_result !\n");
                            break;
                        }
                    }
    
                }
                int errorcode = MSCDLL.QISRSessionEnd(PtrToStr(session_id), hints);
    
                //语音识别结果
                if (rec_result.Length != 0)
                {
    
                    SetText(rec_result);
    
    
                    //返回错误代码10111时,可调用SpeechRecognition()函数执行MSPLogin
                }
            }
            //写行
            delegate void SetTextCallback(string text);
            public void SetText(string text)
            {
                // InvokeRequired required compares the thread ID of the
                // calling thread to the thread ID of the creating thread.
                // If these threads are different, it returns true.
    
                //if (this.textBox1.InvokeRequired)
                /*if (textBox1.InvokeRequired)
                {
                    SetTextCallback d = new SetTextCallback(SetText);
                    this.Invoke(d, new object[] { text });
                }
                else
                {
                    this.textBox1.AppendText(text + "\n");
                    this.textBox1.Refresh();
                }*/
                this.textBox1.AppendText(text + "\n");
            }
    
            private void button1_Click(object sender, RoutedEventArgs e)
            {
                SpeechRecognition();
                totalBufferLength = 0;
                recorder = new AudioRecorder();
                recorder.BeginMonitoring(-1);
                recorder.SampleAggregator.MaximumCalculated += OnRecorderMaximumCalculated;
                if (waveIn == null)
                {
                    waveIn = CreateWaveInDevice();
                }
                waveIn.WaveFormat = new WaveFormat(16000, 1);
                waveIn.StartRecording();
            }
            void OnRecorderMaximumCalculated(object sender, MaxSampleEventArgs e)
            {
                lastPeak = Math.Max(e.MaxSample, Math.Abs(e.MinSample)) * 100;
            }
    
            private void button2_Click(object sender, RoutedEventArgs e)
            {
                waveIn.StopRecording();//停止录音
            }
        }
    }

    复制代码


    MSCDLL.cs

    复制代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace TingXieB
    {
        public enum SynthStatus
        {
            MSP_TTS_FLAG_STILL_HAVE_DATA = 1,
            MSP_TTS_FLAG_DATA_END = 2,
            MSP_TTS_FLAG_CMD_CANCELED = 0
        }
        class MSCDLL
        {
            public const int GRAMID_LEN = 128;
    
            //调用 MSPLogin(...)接口登入,可以只登入一次,但是必须保证在调用其他接口前先登入
            [DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
            public static extern int MSPLogin(string userName, string password, string parameter);
    
    
            [DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
            public static extern IntPtr MSPSearch(string paramstr, byte[] text, ref uint dataLen, ref int errorCode);
    
            //不再使用服务的时候 调用MSPLogout()登出,避免不必要的麻烦
            [DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
            public static extern int MSPLogout();
    
            [DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
            public static extern int QISRInit(string configs);
    
            //调用 QISRSessionBegin(...)开始一次语音听写
            [DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
            public static extern IntPtr QISRSessionBegin(string grammarList, string _params, ref int errorCode);
    
            //调用 QISRAudioWrite(...) 分块写入音频数据
            [DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
            public static extern int QISRAudioWrite(string sessionID, byte[] waveData, uint waveLen, AudioStatus audioStatus, ref EpStatus epStatus, ref RecogStatus recogStatus);
    
            //循环调用 QISRGetResult(...) 接口返回听写结果
            [DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
            public static extern IntPtr QISRGetResult(string sessionID, ref RecogStatus rsltStatus, int waitTime, ref int errorCode);
    
            //调用 QISRSessionEnd(...) 主动结束本次听写
            [DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
            public static extern int QISRSessionEnd(string sessionID, string hints);
    
            [DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
            public static extern int QISRFini();
    
            [DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
            public static extern IntPtr QISRUploadData(string sessionID, string dataName, byte[] userData, uint lenght, string paramValue, ref int errorCode);
    
    
            //语音合成
            //[DllImport("msc.dll", CallingConvention = CallingConvention.Winapi)]
            //public static extern IntPtr QTTSSessionBegin(string _params, ref int errorCode);
    
            //[DllImport("msc.dll", CallingConvention = CallingConvention.Winapi)]
            //public static extern int QTTSTextPut(string sessionID, string textString, uint textLen, string _params);
    
            //[DllImport("msc.dll", CallingConvention = CallingConvention.Winapi)]
            //public static extern IntPtr QTTSAudioGet(string sessionID, ref uint audioLen, ref SynthStatus synthStatus, ref int errorCode);
    
            //[DllImport("msc.dll", CallingConvention = CallingConvention.Winapi)]
            //public static extern IntPtr QTTSAudioInfo(string sessionID);
    
            //[DllImport("msc.dll", CallingConvention = CallingConvention.Winapi)]
            //public static extern int QTTSSessionEnd(string sessionID, string hints);
        }
        #region 错误代号
        public enum ErrorCode
        {
            MSP_SUCCESS = 0,    //函数执行成功
            MSP_ERROR_FAIL = -1,    //失败
            MSP_ERROR_EXCEPTION = -2,
    
            /* General errors 10100(0x2774) */
            MSP_ERROR_GENERAL = 10100,     /* 0x2774 */
            MSP_ERROR_OUT_OF_MEMORY = 10101,     /* 0x2775 */
            MSP_ERROR_FILE_NOT_FOUND = 10102,     /* 0x2776 */
            MSP_ERROR_NOT_SUPPORT = 10103,     /* 0x2777 */
            MSP_ERROR_NOT_IMPLEMENT = 10104,     /* 0x2778 */
            MSP_ERROR_ACCESS = 10105,     /* 0x2779 */
            MSP_ERROR_INVALID_PARA = 10106,     /* 0x277A */
            MSP_ERROR_INVALID_PARA_VALUE = 10107,     /* 0x277B */
            MSP_ERROR_INVALID_HANDLE = 10108,     /* 0x277C */
            MSP_ERROR_INVALID_DATA = 10109,     /* 0x277D */   //客户端上传的命令词语法,存在单词长度超过128字节。     客户端上传abnf时,语法内容不是以#ABNF 1.0 UTF-8;和#ABNF 1.0 gb2312;开头,目前只支持这两种格式的abnf语法上传。     携带的语法内容为空。
            MSP_ERROR_NO_LICENSE = 10110,     /* 0x277E */
            MSP_ERROR_NOT_INIT = 10111,     /* 0x277F */
            MSP_ERROR_NULL_HANDLE = 10112,     /* 0x2780 */
            MSP_ERROR_OVERFLOW = 10113,     /* 0x2781 */
            MSP_ERROR_TIME_OUT = 10114,     /* 0x2782 */    //查看网络环境是否正常,查看是否使用的是公司网络(很多公司网络会将一些网络地址和端口屏蔽掉),查看讯飞的服务器地址和端口是不是被屏蔽(服务器地址dev.voicecloud.cn 端口号是1028和80)。
            MSP_ERROR_OPEN_FILE = 10115,     /* 0x2783 */
            MSP_ERROR_NOT_FOUND = 10116,     /* 0x2784 */
            MSP_ERROR_NO_ENOUGH_BUFFER = 10117,     /* 0x2785 */
            MSP_ERROR_NO_DATA = 10118,     /* 0x2786 */
            MSP_ERROR_NO_MORE_DATA = 10119,     /* 0x2787 */
            MSP_ERROR_SKIPPED = 10120,     /* 0x2788 */
            MSP_ERROR_ALREADY_EXIST = 10121,     /* 0x2789 */
            MSP_ERROR_LOAD_MODULE = 10122,     /* 0x278A */
            MSP_ERROR_BUSY = 10123,     /* 0x278B */
            MSP_ERROR_INVALID_CONFIG = 10124,     /* 0x278C */
            MSP_ERROR_VERSION_CHECK = 10125,     /* 0x278D */
            MSP_ERROR_CANCELED = 10126,     /* 0x278E */
            MSP_ERROR_INVALID_MEDIA_TYPE = 10127,     /* 0x278F */
            MSP_ERROR_CONFIG_INITIALIZE = 10128,     /* 0x2790 */
            MSP_ERROR_CREATE_HANDLE = 10129,     /* 0x2791 */
            MSP_ERROR_CODING_LIB_NOT_LOAD = 10130,     /* 0x2792 */
    
            /* Error codes of network 10200(0x27D8)*/
            MSP_ERROR_NET_GENERAL = 10200,     /* 0x27D8 */
            MSP_ERROR_NET_OPENSOCK = 10201,     /* 0x27D9 */   /* Open socket */
            MSP_ERROR_NET_CONNECTSOCK = 10202,     /* 0x27DA */   /* Connect socket */
            MSP_ERROR_NET_ACCEPTSOCK = 10203,     /* 0x27DB */   /* Accept socket */
            MSP_ERROR_NET_SENDSOCK = 10204,     /* 0x27DC */   /* Send socket data */
            MSP_ERROR_NET_RECVSOCK = 10205,     /* 0x27DD */   /* Recv socket data */
            MSP_ERROR_NET_INVALIDSOCK = 10206,     /* 0x27DE */   /* Invalid socket handle */
            MSP_ERROR_NET_BADADDRESS = 10207,     /* 0x27EF */   /* Bad network address */
            MSP_ERROR_NET_BINDSEQUENCE = 10208,     /* 0x27E0 */   /* Bind after listen/connect */
            MSP_ERROR_NET_NOTOPENSOCK = 10209,     /* 0x27E1 */   /* Socket is not opened */
            MSP_ERROR_NET_NOTBIND = 10210,     /* 0x27E2 */   /* Socket is not bind to an address */
            MSP_ERROR_NET_NOTLISTEN = 10211,     /* 0x27E3 */   /* Socket is not listenning */
            MSP_ERROR_NET_CONNECTCLOSE = 10212,     /* 0x27E4 */   /* The other side of connection is closed */
            MSP_ERROR_NET_NOTDGRAMSOCK = 10213,     /* 0x27E5 */   /* The socket is not datagram type */
            MSP_ERROR_NET_DNS = 10214,  //DNS解析错误,即域名转换到IP失败,可以换个网络通畅的环境,或者先用固定IP测试。
            /* Error codes of mssp message 10300(0x283C) */
            MSP_ERROR_MSG_GENERAL = 10300,     /* 0x283C */
            MSP_ERROR_MSG_PARSE_ERROR = 10301,     /* 0x283D */
            MSP_ERROR_MSG_BUILD_ERROR = 10302,     /* 0x283E */
            MSP_ERROR_MSG_PARAM_ERROR = 10303,     /* 0x283F */
            MSP_ERROR_MSG_CONTENT_EMPTY = 10304,     /* 0x2840 */
            MSP_ERROR_MSG_INVALID_CONTENT_TYPE = 10305,     /* 0x2841 */
            MSP_ERROR_MSG_INVALID_CONTENT_LENGTH = 10306,     /* 0x2842 */
            MSP_ERROR_MSG_INVALID_CONTENT_ENCODE = 10307,     /* 0x2843 */
            MSP_ERROR_MSG_INVALID_KEY = 10308,     /* 0x2844 */
            MSP_ERROR_MSG_KEY_EMPTY = 10309,     /* 0x2845 */
            MSP_ERROR_MSG_SESSION_ID_EMPTY = 10310,     /* 0x2846 */
            MSP_ERROR_MSG_LOGIN_ID_EMPTY = 10311,     /* 0x2847 */
            MSP_ERROR_MSG_SYNC_ID_EMPTY = 10312,     /* 0x2848 */
            MSP_ERROR_MSG_APP_ID_EMPTY = 10313,     /* 0x2849 */
            MSP_ERROR_MSG_EXTERN_ID_EMPTY = 10314,     /* 0x284A */
            MSP_ERROR_MSG_INVALID_CMD = 10315,     /* 0x284B */
            MSP_ERROR_MSG_INVALID_SUBJECT = 10316,     /* 0x284C */
            MSP_ERROR_MSG_INVALID_VERSION = 10317,     /* 0x284D */
            MSP_ERROR_MSG_NO_CMD = 10318,     /* 0x284E */
            MSP_ERROR_MSG_NO_SUBJECT = 10319,     /* 0x284F */
            MSP_ERROR_MSG_NO_VERSION = 10320,     /* 0x2850 */
            MSP_ERROR_MSG_MSSP_EMPTY = 10321,     /* 0x2851 */
            MSP_ERROR_MSG_NEW_RESPONSE = 10322,     /* 0x2852 */
            MSP_ERROR_MSG_NEW_CONTENT = 10323,     /* 0x2853 */
            MSP_ERROR_MSG_INVALID_SESSION_ID = 10324,     /* 0x2854 */
    
            /* Error codes of DataBase 10400(0x28A0)*/
            MSP_ERROR_DB_GENERAL = 10400,     /* 0x28A0 */
            MSP_ERROR_DB_EXCEPTION = 10401,     /* 0x28A1 */
            MSP_ERROR_DB_NO_RESULT = 10402,     /* 0x28A2 */
            MSP_ERROR_DB_INVALID_USER = 10403,     /* 0x28A3 */
            MSP_ERROR_DB_INVALID_PWD = 10404,     /* 0x28A4 */
            MSP_ERROR_DB_CONNECT = 10405,     /* 0x28A5 */
            MSP_ERROR_DB_INVALID_SQL = 10406,     /* 0x28A6 */
            MSP_ERROR_DB_INVALID_APPID = 10407,    /* 0x28A7 */  //请确认申请的Appid是否授权通过;   请确认申请的Appid和下载的SDK是否具有一致性。
    
            /* Error codes of Resource 10500(0x2904)*/
            MSP_ERROR_RES_GENERAL = 10500,     /* 0x2904 */
            MSP_ERROR_RES_LOAD = 10501,     /* 0x2905 */   /* Load resource */
            MSP_ERROR_RES_FREE = 10502,     /* 0x2906 */   /* Free resource */
            MSP_ERROR_RES_MISSING = 10503,     /* 0x2907 */   /* Resource File Missing */
            MSP_ERROR_RES_INVALID_NAME = 10504,     /* 0x2908 */   /* Invalid resource file name */
            MSP_ERROR_RES_INVALID_ID = 10505,     /* 0x2909 */   /* Invalid resource ID */
            MSP_ERROR_RES_INVALID_IMG = 10506,     /* 0x290A */   /* Invalid resource image pointer */
            MSP_ERROR_RES_WRITE = 10507,     /* 0x290B */   /* Write read-only resource */
            MSP_ERROR_RES_LEAK = 10508,     /* 0x290C */   /* Resource leak out */
            MSP_ERROR_RES_HEAD = 10509,     /* 0x290D */   /* Resource head currupt */
            MSP_ERROR_RES_DATA = 10510,     /* 0x290E */   /* Resource data currupt */
            MSP_ERROR_RES_SKIP = 10511,     /* 0x290F */   /* Resource file skipped */
    
            /* Error codes of TTS 10600(0x2968)*/
            MSP_ERROR_TTS_GENERAL = 10600,     /* 0x2968 */
            MSP_ERROR_TTS_TEXTEND = 10601,     /* 0x2969 */  /* Meet text end */
            MSP_ERROR_TTS_TEXT_EMPTY = 10602,     /* 0x296A */  /* no synth text */
    
            /* Error codes of Recognizer 10700(0x29CC) */
            MSP_ERROR_REC_GENERAL = 10700,     /* 0x29CC */
            MSP_ERROR_REC_INACTIVE = 10701,     /* 0x29CD */
            MSP_ERROR_REC_GRAMMAR_ERROR = 10702,     /* 0x29CE */   //10702为没有有效的语法文件,查看是否已经成功上传语法文件,上传的语法文件格式是否是正确的,查看文件中的字符、数字、空格、标点是否是相应的格式(如全角还是半角,英文还是中文,gb2312编码还是utf-8编码,实际编码与文件开头与代码参数设置是否一致)。
            MSP_ERROR_REC_NO_ACTIVE_GRAMMARS = 10703,     /* 0x29CF */  //客户端没有携带任何语法文件,直接调用语法接口,造成引擎找不到可激活的语法文件。
            MSP_ERROR_REC_DUPLICATE_GRAMMAR = 10704,     /* 0x29D0 */
            MSP_ERROR_REC_INVALID_MEDIA_TYPE = 10705,     /* 0x29D1 */
            MSP_ERROR_REC_INVALID_LANGUAGE = 10706,     /* 0x29D2 */
            MSP_ERROR_REC_URI_NOT_FOUND = 10707,     /* 0x29D3 */
            MSP_ERROR_REC_URI_TIMEOUT = 10708,     /* 0x29D4 */
            MSP_ERROR_REC_URI_FETCH_ERROR = 10709,     /* 0x29D5 */
    
            /* Error codes of Speech Detector 10800(0x2A30) */
            MSP_ERROR_EP_GENERAL = 10800,     /* 0x2A30 */
            MSP_ERROR_EP_NO_SESSION_NAME = 10801,     /* 0x2A31 */
            MSP_ERROR_EP_INACTIVE = 10802,     /* 0x2A32 */
            MSP_ERROR_EP_INITIALIZED = 10803,     /* 0x2A33 */
    
            /* Error codes of TUV */
            MSP_ERROR_TUV_GENERAL = 10900,     /* 0x2A94 */
            MSP_ERROR_TUV_GETHIDPARAM = 10901,     /* 0x2A95 */   /* Get Busin Param huanid*/
            MSP_ERROR_TUV_TOKEN = 10902,     /* 0x2A96 */   /* Get Token */
            MSP_ERROR_TUV_CFGFILE = 10903,     /* 0x2A97 */   /* Open cfg file */
            MSP_ERROR_TUV_RECV_CONTENT = 10904,     /* 0x2A98 */   /* received content is error */
            MSP_ERROR_TUV_VERFAIL = 10905,     /* 0x2A99 */   /* Verify failure */
    
            /* Error codes of IMTV */
            MSP_ERROR_IMTV_SUCCESS = 11000,     /* 0x2AF8 */   /* 成功 */
            MSP_ERROR_IMTV_NO_LICENSE = 11001,     /* 0x2AF9 */   /* 试用次数结束,用户需要付费 */
            MSP_ERROR_IMTV_SESSIONID_INVALID = 11002,     /* 0x2AFA */   /* SessionId失效,需要重新登录通行证 */
            MSP_ERROR_IMTV_SESSIONID_ERROR = 11003,     /* 0x2AFB */   /* SessionId为空,或者非法 */
            MSP_ERROR_IMTV_UNLOGIN = 11004,     /* 0x2AFC */   /* 未登录通行证 */
            MSP_ERROR_IMTV_SYSTEM_ERROR = 11005,     /* 0x2AFD */   /* 系统错误 */
    
            /* Error codes of HCR */
            MSP_ERROR_HCR_GENERAL = 11100,
            MSP_ERROR_HCR_RESOURCE_NOT_EXIST = 11101,
    
            /* Error codes of http 12000(0x2EE0) */
            MSP_ERROR_HTTP_BASE = 12000,    /* 0x2EE0 */
    
            /*Error codes of ISV */
            MSP_ERROR_ISV_NO_USER = 13000,    /* 32C8 */    /* the user doesn't exist */
        }
        #endregion
    
        #region ISR枚举常量
        public enum AudioStatus
        {
            ISR_AUDIO_SAMPLE_INIT = 0x00,
            ISR_AUDIO_SAMPLE_FIRST = 0x01,
            ISR_AUDIO_SAMPLE_CONTINUE = 0x02,
            ISR_AUDIO_SAMPLE_LAST = 0x04,
            ISR_AUDIO_SAMPLE_SUPPRESSED = 0x08,
            ISR_AUDIO_SAMPLE_LOST = 0x10,
            ISR_AUDIO_SAMPLE_NEW_CHUNK = 0x20,
            ISR_AUDIO_SAMPLE_END_CHUNK = 0x40,
    
            ISR_AUDIO_SAMPLE_VALIDBITS = 0x7f /* to validate the value of sample->status */
        }
    
        public enum EpStatus
        {
            ISR_EP_NULL = -1,
            ISR_EP_LOOKING_FOR_SPEECH = 0,          ///还没有检测到音频的前端点
            ISR_EP_IN_SPEECH = 1,                   ///已经检测到了音频前端点,正在进行正常的音频处理。
            ISR_EP_AFTER_SPEECH = 3,                ///检测到音频的后端点,后继的音频会被MSC忽略。
            ISR_EP_TIMEOUT = 4,                     ///超时
            ISR_EP_ERROR = 5,                       ///出现错误
            ISR_EP_MAX_SPEECH = 6                   ///音频过大
        }
    
        public enum RecogStatus
        {
            ISR_REC_NULL = -1,
            ISR_REC_STATUS_SUCCESS = 0,             ///识别成功,此时用户可以调用QISRGetResult来获取(部分)结果。
            ISR_REC_STATUS_NO_MATCH = 1,            ///识别结束,没有识别结果
            ISR_REC_STATUS_INCOMPLETE = 2,          ///正在识别中
            ISR_REC_STATUS_NON_SPEECH_DETECTED = 3, ///保留
            ISR_REC_STATUS_SPEECH_DETECTED = 4,     ///发现有效音频
            ISR_REC_STATUS_SPEECH_COMPLETE = 5,     ///识别结束
            ISR_REC_STATUS_MAX_CPU_TIME = 6,        ///保留
            ISR_REC_STATUS_MAX_SPEECH = 7,          ///保留
            ISR_REC_STATUS_STOPPED = 8,             ///保留
            ISR_REC_STATUS_REJECTED = 9,            ///保留
            ISR_REC_STATUS_NO_SPEECH_FOUND = 10     ///没有发现音频
        }
        #endregion
    }

    复制代码


    VoiceData.cs

    复制代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace TingXieB
    {
        class VoiceData
        {
            public byte[] data = new byte[3200];
        }
    }

    复制代码

     

    其中用到了三个dll文件

    分别是讯飞的msc.dll、还有其余的两个NAudio.dll和VoiceRecorder.Audio.dll

    其中讯飞的msc.dll由于是用dllimport引入的,所以需要放到debug文件夹中,还有就是msc.dll需要用自己配套的讯飞appid和该id应用下载的dll文件才可以正常使用

    以下放出连接

    NAudio.dll  链接:https://pan.baidu.com/s/1hundpEs 密码:i1m2

    VoiceRecorder.Audio.dll  链接:https://pan.baidu.com/s/1pMHGS6B 密码:fvmv

     

     

     

    展开全文
  • Python实时语音识别控制

    千次阅读 2019-01-07 15:47:41
    Python实时语音识别控制 概述 本文中的语音识别功能采用 百度语音识别库 ,首先利用 PyAudio 库录制语音指令,保存为受支持的 wav 音频文件,然后利用 百度语音识别库 提供的方法实现语音识别,最后检测识别结果,...

    代码地址如下:
    http://www.demodashi.com/demo/12946.html

    Python实时语音识别控制

    概述

    本文中的语音识别功能采用 百度语音识别库 ,首先利用 PyAudio 库录制语音指令,保存为受支持的 wav 音频文件,然后利用 百度语音识别库 提供的方法实现语音识别,最后检测识别结果,利用 PyUserInput 库提供的方法模拟控制web页面滚动。
    百度语音识别为开发者提供业界优质且免费的语音服务,通过场景识别优化,为车载导航,智能家居和社交聊天等行业提供语音解决方案,准确率达到90%以上,让您的应用绘“声”绘色。

    百度语音AI

    准备工作

    安装百度语音识别SDK

    pip install baidu-aip

    安装Python音频处理库 PyAudio

    python -m pip install pyaudio

    安装鼠标控制库 PyUserInput

    pip install pyuserinput

    PyUserInput 库依赖另外两个库 pywin32pyHook ,需要单独安装。
    安装方法可以参考下面这篇文章:Win10 Python3.5安装PyUserInput

    令附文中提到的资源下载链接:lfd-pythonlibs

    另外文中提到的两个包, 需要根据自己的系统和python版本来选择。

    如果系统是64位的,就要选择带 amd64 的。

    如果python版本为python3.7的,就要选择带 cp37 的。

    比如:pywin32-223-cp37-cp37m-win_amd64.whl
    pyHook-1.5.1-cp37-cp37m-win_amd64.whl

    申请百度开发者帐号

    参考下面链接中的文章注册百度帐号,完成开发者认证,创建应用,获取密钥
    百度AI开放平台接入流程

    用Pyaudio库录制音频

    Pyaudio 是一个非常强大的音频处理库,简单几行代码即可实现音频播放,录制等功能.
    百度语音识别API支持的语音格式有: pcm(不压缩)wav(不压缩,pcm编码)amr(压缩格式).
    推荐 pcm , 采样率: 16000 固定值, 编码: 16bit , 位深: 单声道 .百度服务端会将非pcm格式, 转为pcm格式, 因此使用wav, amr会有额外的转换耗时.
    为了实现实时语音识别功能, 这里通过pyaudio录制一段wav格式的音频, 报文成wav音频文件, 供后续识别时调用.

    # 用Pyaudio库录制音频
    #   out_file:输出音频文件名
    #   rec_time:音频录制时间(秒)
    def audio_record(out_file, rec_time):
        CHUNK = 1024
        FORMAT = pyaudio.paInt16 #16bit编码格式
        CHANNELS = 1 #单声道
        RATE = 16000 #16000采样频率
        
        p = pyaudio.PyAudio()
        # 创建音频流 
        stream = p.open(format=FORMAT, # 音频流wav格式
                        channels=CHANNELS, # 单声道
                        rate=RATE, # 采样率16000
                        input=True,
                        frames_per_buffer=CHUNK)
    
        print("Start Recording...")
    
        frames = [] # 录制的音频流
        # 录制音频数据
        for i in range(0, int(RATE / CHUNK * rec_time)):
            data = stream.read(CHUNK)
            frames.append(data)
        
        # 录制完成
        stream.stop_stream()
        stream.close()
        p.terminate()
    
        print("Recording Done...")
    
        # 保存音频文件
        wf = wave.open(out_file, 'wb')
        wf.setnchannels(CHANNELS)
        wf.setsampwidth(p.get_sample_size(FORMAT))
        wf.setframerate(RATE)
        wf.writeframes(b''.join(frames))
        wf.close()

    调用百度语音API

    # 读取paudio录制好的音频文件, 调用百度语音API, 设置api参数, 完成语音识别
    #    client:AipSpeech对象
    #    afile:音频文件
    #    afmt:音频文件格式(wav)
    def aip_get_asrresult(client, afile, afmt):
        # 选项参数:
        # cuid    String  用户唯一标识,用来区分用户,填写机器 MAC 地址或 IMEI 码,长度为60以内
        # dev_pid String  语言类型(见下表), 默认1537(普通话 输入法模型)
        # 识别结果已经被SDK由JSON字符串转为dict
        result = client.asr(get_file_content(afile), afmt, 16000, {"cuid": CUID, "dev_pid": DEV_PID,})
        #print(result)
        # 如果err_msg字段为"success."表示识别成功, 直接从result字段中提取识别结果, 否则表示识别失败
        if result["err_msg"] == "success.": 
            #print(result["result"])
            return result["result"]
        else:
            #print(result["err_msg"])
            return ""

    dev_pid 参数列表

    dev_pid 语言 模型 是否有标点 备注
    1536 普通话(支持简单的英文识别) 搜索模型 无标点 支持自定义词库
    1537 普通话(纯中文识别) 输入法模型 有标点 不支持自定义词库
    1737 英语 有标点 不支持自定义词库
    1637 粤语 有标点 不支持自定义词库
    1837 四川话 有标点 不支持自定义词库
    1936 普通话远场 远场模型 有标点 不支持

    控制(鼠标)页面滚动

    # 控制鼠标滚动
    def mouse_control(dir_tr):
        MOVE_DX = 5 # 每次滚动行数
        ms = PyMouse()
        horizontal = 0
        vertical = 0
        if dir_tr.find("上") != -1: # 向上移动
            vertical = MOVE_DX
            #print("vertical={0}, 向上".format(vertical))
        elif dir_tr.find("下") != -1: # 向下移动
            vertical = 0 - MOVE_DX
            #print("vertical={0}, 向下".format(vertical))
        elif dir_tr.find("左") != -1: # 向左移动
            horizontal = 0 - MOVE_DX
            #print("horizontal={0}, 向左".format(horizontal))
        elif dir_tr.find("右") != -1: # 向右移动
            horizontal = MOVE_DX
            #print("horizontal={0}, 向右".format(horizontal))
    
        #print("horizontal, vertical=[{0},{1}]".format(horizontal, vertical))
        # 通过scroll(vertical, horizontal)函数控制页面滚动
        # 另外PyMouse还支持模拟move光标,模拟鼠标click,模拟键盘击键等
        ms.scroll(vertical, horizontal) 

    完成实时语音识别控制

    while(True):
        # 请说出语音指令,例如["向上", "向下", "向左", "向右"]
        print("\n\n==================================================")
        print("Please tell me the command(limit within 3 seconds):")
        #print("Please tell me what you want to identify(limit within 10 seconds):")
        audio_record(AUDIO_OUTPUT, 3) # 录制语音指令
        print("Identify On Network...")
        asr_result =  aip_get_asrresult(client, AUDIO_OUTPUT, AUDIO_FORMAT) # 识别语音指令
        if len(asr_result) != 0: # 语音识别结果不为空,识别结果为一个list
            print("Identify Result:", asr_result[0])
            print("Start Control...")
            mouse_control(asr_result[0]) # 根据识别结果控制页面滚动
            print("Control End...")
            if asr_result[0].find("退出") != -1: # 如果是"退出"指令则结束程序
                break;
            time.sleep(1) # 延时1秒

    程序运行截图

    语音识别

    程序运行截图

    语音控制

    程序运行截图

    项目内文件截图

    项目内文件截图
    Python实时语音识别控制

    代码地址如下:
    http://www.demodashi.com/demo/12946.html

    注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

    展开全文
  • 对比从5:00分钟开始 视频地址: https://www.bilibili.com/video/av48112826 ).以下测试结果基于测试点(祝福语、数字、日期、绕口令、诗、日常用语) [百度收费] [优点] ).比起百度自家发布的免费版本,速度...)....

    • ).以下测试结果基于测试点(祝福语、数字、日期、绕口令、诗、日常用语)

    [百度收费]

    [优点]

    • ).比起百度自家发布的免费版本,速度快很多,很好的解决了丢字(丢句、就是有的地方没有翻译)
    • ).比起百度自家发布的免费版本,语义解析在有些方面增强了,翻译的更准确些
    • ).百度断点,自动标点符号绝对优势

    [缺点]

    • ).还存在丢字的现象,有些地方翻译不准确
    • ).对于普通话的兼容度还不够好(发音不准、口音)
    • ).语义自动解析还需要加强,有的地方直译(不能结合语境、不够智能就显得呆板)
    • ).如说2019年04月02日星期二20点20分16秒320毫秒 这些固定格式的,最好能格式化输出
    • ).有些完全翻译错的地方
    • ).绕口令需加强(常用的就那些、至少常用的能做加强处理)
    • ).整体相比于之前版本,有所提升,但是比起别人的免费版本不占优势,希望加强
    • ).希望百度在训练自己语音系统时,不只看重日常常用语,把他当个人,能很好的理解各种语境,甚至有的地方可以猜、或推出用户的想法(中国崛起)

         因为各种教学、培训,都需要录视频,都加上字幕会对表达效果好很多,所以如果百度能更好的理解各种行业知识,都能准确理解,智能识别,智能人机交互,都是基于语音对话,影响是重大的。
    • ).希望爱奇艺所有视频支持自动生成字幕,+自动转各国主流语言支持

    [SpeechTexter免费]

    [优点]

    • ).语义解析,自动纠正能力超强,有的地方比较智能(如数据规律能找出来、日期时间显示能很友好的格式化处理、发音错误的地方能自动纠正)
    • ).整体非常不错,像一个智能的人,有一定的理解能力

    [缺点]

    • ).受网络的影响,有时访问不了
    • ).不能自动中文加标点符号,断句

    以下为测试内容

    简介
    
    拿这款免费的语音识别软件         VS       百度收费版语音识别
    ------------------------------------------
    【祝福语测试】
    
    
    祝大家,身体倍健康心情特别好,好运天天交,口味顿顿炒,家里出黄金,墙上长钞票
    
    祝愿大家在新的一年里,所有的美梦都成真,所有的愿望都实现,所有的付出都能回报
    
    祝大家新的一年里大吉大利,大红大紫,大显身手,大炮而红,大鸣惊人,大马当先
    
    ------------------------------------------
    
    【数字测试】
    1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1
    10 20 30 40 50 60 70 80 90 100 90 80 70 60 50 40 30 20 10
    1 3 5 7 9 11 9 7 5 3 1
    
    100 200 300 400 500 600 700 800 900 1000 900 800 700 600 500 400 300 200 100
    ------------------------------------------
    【日期时间测试】
    
    2019年04月02日星期二20点20分16秒320毫秒
    中华人民共和国成立时间: (1949年10月01日 1点1分1秒 1毫秒 农历八月初十) 星期六
    
    ------------------------------------------
    【绕口令测试】
    八百标兵
    八百标兵奔北坡 炮兵并排北边跑 炮兵怕把标兵碰 标兵怕碰炮兵跑
    
    黑化肥发灰,灰化肥发黑.黑化肥发黑不发灰,灰化肥发灰不发黑. 
    
     
    
    扁担长,板凳宽,板凳没有扁担长,扁担没有板凳宽。 。
    
    
    刘奶奶找牛奶奶买牛奶,
    牛奶奶给刘奶奶拿牛奶,
    刘奶奶说牛奶奶的牛奶不如柳奶奶的牛奶,
    牛奶奶说柳奶奶的牛奶会流奶,
    柳奶奶听见了大骂牛奶奶你的才会流奶,
    柳奶奶和牛奶奶泼牛奶吓坏了刘奶奶,
    大骂再也不买柳奶奶和牛奶奶的牛奶。
    
    
    ------------------------------------------
    【诗测试】
    《再别康桥》作者:徐志摩
    轻轻的我走了,
    正如我轻轻的来;
    我轻轻的招手,
    作别西天的云彩。
    
    那河畔的金柳,
    是夕阳中的新娘;
    波光里的艳影,
    在我的心头荡漾。
    
    软泥上的青荇,
    油油的在水底招摇;
    在康河的柔波里,
    我甘心做一条水草!
    
    那榆荫下的一潭,
    不是清泉,
    是天上虹;
    揉碎在浮藻间,
    沉淀着彩虹似的梦。
    
    寻梦?撑一支长篙,
    向青草更青处漫溯;
    满载一船星辉,
    在星辉斑斓里放歌。
    
    但我不能放歌,
    悄悄是别离的笙箫;
    夏虫也为我沉默,
    沉默是今晚的康桥!
    
    悄悄的我走了,
    正如我悄悄的来;
    我挥一挥衣袖,
    不带走一片云彩。
    
    展开全文
  • Python 实时语音识别

    千次阅读 2019-11-27 14:54:38
    Python 实时语音识别语音识别语音识别API语音识别步骤效果展示代码下载 最近自己想接触下语音识别,经过一番了解和摸索,实现了对语音识别API的简单调用,正好写文章记录下。目前搜到的帖子里,有现成的调用百度语音...


    最近自己想接触下语音识别,经过一番了解和摸索,实现了对语音识别API的简单调用,正好写文章记录下。目前搜到的帖子里,有现成的调用百度语音API来对音频文件进行识别的;也有通过谷歌语音服务来实现了实时语音识别的。由于我这谷歌语音一直调用不成功,就将二者结合,简单实现了通过百度语音API来进行实时语音识别。

    语音识别

    语音识别技术就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的技术,微信中将语音消息转文字,以及“Hi Siri”启用Siri时对其进行发号施令,都是语音识别的现实应用。

    语音识别API

    百度语音识别通过REST API的方式给开发者提供一个通用的HTTP接口。任意操作系统、任意编程语言,只要可以对百度语音服务器发起http请求,均可使用此接口来实现语音识别。调用API的流程在百度语音官方文档中有说明。

    在这里插入图片描述

    语音识别步骤

    1. 先注册百度云的账号,控制台中创建百度语音的应用,获取API Key和Secret Key
    2. 通过API Key 和 Secret Key获取token
    3. 将token和本地音频数据上传到API链接
    4. 根据API返回结果获取解析后的文字结果

    注意上述过程中我们是使用的本地音频数据,那么我们如何将自己的语音转为相应的数据呢?只要调用麦克风记录我们的语音信息存为wav格式的文件即可。而实时语音识别,即一直保持检测麦克风,只要有声音就生成wav文件向API发送请求;当识别不到语音信息时,自动停止。

    代码中我参考了调用谷歌语音的 speech_recognition 模块,因为它调用麦克风的命令特别简单,而且会根据检测麦克风结果自动结束录音。

    需要通过pip install SpeechRecognition 下载 speech_recognition 模块来实现上述录音工作。

    效果展示

    语音识别结果如下图:
    在这里插入图片描述

    代码下载

    语音识别代码下载

    百度网盘下载:
    链接:https://pan.baidu.com/s/1l8JrYKn1pR5CZPCCme17OA
    提取码:rc2e

    GitHub代码下载:
    https://github.com/pengfexue2/yuyin.git

    以上算是对语音识别的初步实现,希望后续能挖掘些更有意思的应用,欢迎继续关注哈~
    最后也希望推下自己记录学习 Python、前端以及微信小程序开发的公众号 TEDxPY
    在这里插入图片描述

    展开全文
  • Python实时语音识别

    2019-10-09 10:40:30
    题图 摄于爬山时“长在石壁洞里的小可爱”今天是2019年4月4日,星期四,今年的第94天,这一年的25.75%的时间已流逝。数字总是给人最直接的刺激,尤其在工作日的尾巴、...
  • 这是我们计算机视听觉的第三个实验,也是本学期语音部分的最后一个实验,大概花了两天才写完。上个实验做的是语音编码问题,这个实验是语音识别的事,感觉处理语音还是比较有意思的。
  • NLP之ASR:基于python和机器学习算法带你玩转的语音实时识别技术 导读 带你玩转python实现的语音实时识别技术(包括音频混音、回声消除、噪音滤除、杂音消除、静音检测等方法) 视频观看:软件设计之基于算法的...
  • 识别结果对比如下:http://download.csdn.net/download/elesos/10138377 百度 http://yuyin.baidu.com/asr REST API http://yuyin.baidu.com/docs/asr/54 格式:推荐pcm 推荐16K 编码:16bit 位深...
  • ASR:基于pyaudio利用python进行语音生成、语音识别总结及其案例详细攻略 目录 利用python进行语音生成 利用python进行语音识别 利用python进行语音生成 T1、调用win系统自带程序将文字转为...
  • 基于STM32F429的语音识别交互系统

    万次阅读 多人点赞 2018-08-14 11:52:47
    器件:STM32F429开发板、YS-LDV7语音识别模块、YS-SYN6288语音合成模块 二、项目描述:  1、 YS-LDV7识别语音信息,通过串口传输识别码给STM32主控板; 2、 主控板通过DHT11获取环境信息,进行编码传输给YS-SYN...
  • 导读11 月 21 日到 23 日,搜狗、百度和科大讯飞三家公司接连召开了三场发布会,向外界展示了自己在语音识别和机器翻译等方面的最新进展。值得注意的是,这三家公司几乎在同一时段宣布了各自中文语音识别准确率达到...
  • 中文语音识别pytorch

    万次阅读 2020-04-11 17:35:26
    https://github.com/libai3/masr
  • ASR自动语音识别技术

    万次阅读 2016-07-24 22:51:19
    自动语音识别技术(Automatic Speech Recognition)是一种将人的语音转换为文本的技术。语音识别是一个多学科交叉的领域,它与声学、语音学、语言学、数字信号处理理论、信息论、计算机科学等众多学科紧密相连。...
  • 语音识别、声纹识别的区别及测试

    万次阅读 多人点赞 2018-09-02 22:15:45
    很多除接触AI的小伙伴, 不清楚语音识别和声纹识别的区别,经常混淆概念,以为语音识别、声纹识别、语义识别是同一回事,其实不然。这篇文章主要为小伙伴普及一下这三者的区别, 并且分别讲一讲如何测试。   语音...
  • 语音识别之Python开发

    万次阅读 多人点赞 2017-12-18 05:43:39
    语音识别之Python教程概述技术原理教程开发案例参考案例python实现将文本转换成语音的方法Python如何实现文本转语音Python3.5 调用讯飞动态链接库实现语音识别Python建立简易语音识别系统Python 语音识别框架用...
  • 语音识别评估标准-WER

    万次阅读 2017-02-24 11:05:30
    语音识别评估标准-WER
  • 较之开发者常用的获取语音识别功能的方法,本方法最大的优势是轻量级,不需要在所开发的应用中集成任何SDK开发工具包,也不需要在测试机中添加任何识别引擎软件,开发者只要了解Http网络请求以及百度语音识别 REST ...
  • 首先在讯飞官网下载语音识别的SDK,这些网上教程很多。(下载window平台语音听写SDK) 1、创建一个C#工程 按照讯飞官网的说明文档(https://doc.xfyun.cn/msc_windows/SDK%E5%8C%85%E5%AF%BC%E5%85%A5.html)将SDK...
  • 语音识别类产品的分类及应用场景

    万次阅读 2018-01-18 12:22:39
    前言:本文作者@焦糖玛奇朵,是我们“AI产品经理大本营”早期成员,下面是她分享的第1篇文章,欢迎更多有兴趣“主动输出”的朋友们一起加入、共同进步:)音频由公众号“闪电配音”提供媒体和AI巨头们乐于给大众描绘...
  • html5语音识别的demo

    千次阅读 2013-07-17 17:41:17
    alert("很遗憾,你的浏览器不支持语音识别。"); } else{ alert("尝试使用语言识别来输入内容吧"); } //事件的触发(可使用下面的js调用完成) /* input.onwebkitspeechchange = fu
1 2 3 4 5 ... 20
收藏数 114,451
精华内容 45,780
关键字:

实时语音识别