2021-01-29 来源:华纳网 责任编辑:谷雨老师 人气:
核心提示:本节课谷雨老师和大家一起来实现一个简易版的语音唤醒与语音识别功能。
人们在与软件、硬件的交互上,语音越来越占用重要的地位,比如我们身边的Siri、小度音箱、小米的小爱同学,逐渐扮演着越来越重要的角色,那么我们能否在我们的程序中实现类似的功能呢?答案是肯定的,在Python中也可以实现语音唤醒与语音识别功能,本节课谷雨老师和大家一起来实现一个简易版的语音唤醒与语音识别功能。

 
1

要想实现语音唤醒,首先要有一只麦克,用来“听”周围的语音即说话声,为了能够随时响应我们的召唤,那么我们就必须一直让这个麦克处于工作状态,直到我们的程序“听”到我们设定的触发语,在这节的程序中我们将触发指令设定为“小娜”首先我们实现让麦克一直处于“听”的状态,

while(True):

    audio_path = "./test1.wav"

    # 录制语音指令

    audio_record(audio_path, 3)

在这里我们使用pyaudio函数库,进行声音录制

p = pyaudio.PyAudio()

p.open(format=FORMAT, # 音频流wav格式

       channels=CHANNELS, # 单声道

       rate=RATE, # 采样率16000

       input=True,

       frames_per_buffer=CHUNK)

最后我们把录好的声音存成一个文件

    with wave.open(out_file, 'wb') as wf:

        wf.setnchannels(CHANNELS)

        wf.setsampwidth(p.get_sample_size(FORMAT))

        wf.setframerate(RATE)

        wf.writeframes(b''.join(frames))

2

接着,我们把上一步录制好的声音片段转为文字,在本节我们使用百度云的识别接口(可以免费注册使用)

    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

    # 读取文件

    def get_file_content(filePath):

        with open(filePath, 'rb') as fp:

            return fp.read()

    # 识别本地文件

    text = client.asr(get_file_content(audio_path), audio_type, 16000)

这样,我们得到了本段声音转换为文字后的结果

3

得到转换后的文字后,我们就可以发挥我们的想象力了来让程序做各种事情了

    if ret["err_no"] == 0:

        text = ret["result"][0]     

        print(text)



        if '小娜' in text:

            speak('我在的')

        elif '诗' in text:

            speak('白日依山尽,黄河入海流。欲穷千里目,更上一层楼。')

        elif '名字' in text:

            speak('我叫晓娜')

        # 如果是"退出"指令则结束程序

        elif text.find("退") != -1:

            speak('再见')

            break

        else:

            pass

在这里,我们只做了很简单一些处理

4

以上我们实现了一个简单但完整的语音唤醒与语音识别程序,

但这个程序需要实时联网才能工作,

对于成熟的软件或硬件,我们需要实现离线的方式进行唤醒和识别,

那样我们就需要继续学习一些人工智能和数据训练、分析的知识,

在后续的课程中,谷雨课堂会逐渐深入讲解~

完整的源代码可以在Github上下载。

https://github.com/cn09876/guyuedu





 




免责声明:本文仅代表作者个人观点,与华纳网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。