• python调用百度语音(语音识别-斗地主语音记牌器)


    一、概述

    本篇简要介绍百度语音语音识别的基本使用(其实是斗地主时想弄个记牌器又没money,抓包什么的又不会,只好搞语音识别的了)

    二、创建应用

    打开百度语音官网产品与使用->语音识别->立即使用->创建应用

    出现如下页面

    依照提示依次填写,最终结果

    (ps:我就想弄个记牌的,就起了个计数器的名)

    点右方的 ‘查看key’ 记下App ID,API Key,Secret Key。接下来要用到

     

    需要安装模块
    
    pip install baidu-aip
    pip install pyaudio

    语音识别代码

    from aip import AipSpeech
    """ 你的 APPID AK SK """
    APP_ID = '你记下的APP_ID'
    API_KEY = '你记下的API_KEY'
    SECRET_KEY = '你记下的SECRET_KEY'
    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
    
    # 读取文件
    def get_file_content(filePath):
        with open(filePath, 'rb') as fp:
            return fp.read()
    # 识别本地文件
    li=client.asr(get_file_content('01.pcm'), 'pcm', 8000, {
        'lan': 'zh',
    })
    
    print(li)
    # 从URL获取文件识别
    # client.asr('', 'pcm', 16000, {
    #     'url': 'http://121.40.195.233/res/16k_test.pcm',
    #     'callback': 'http://xxx.com/receive',
    # })

    python录音代码

    import wave
    from pyaudio import PyAudio,paInt16
    
    framerate=8000
    NUM_SAMPLES=2000
    channels=1
    sampwidth=2
    TIME=2
    def save_wave_file(filename,data):
        '''save the date to the wavfile'''
        wf=wave.open(filename,'wb')
        wf.setnchannels(channels)
        wf.setsampwidth(sampwidth)
        wf.setframerate(framerate)
        wf.writeframes(b"".join(data))
        wf.close()
    
    def my_record():
        pa=PyAudio()
        stream=pa.open(format = paInt16,channels=1,
                       rate=framerate,input=True,
                       frames_per_buffer=NUM_SAMPLES)
        my_buf=[]
        count=0
        while count<TIME*5:#控制录音时间
            string_audio_data = stream.read(NUM_SAMPLES)
            my_buf.append(string_audio_data)
            count+=1
            print('.')
        save_wave_file('01.pcm',my_buf)
        stream.close()
    
    chunk=2014
    def play():
        wf=wave.open(r"01.pcm",'rb')
        p=PyAudio()
        stream=p.open(format=p.get_format_from_width(wf.getsampwidth()),channels=
        wf.getnchannels(),rate=wf.getframerate(),output=True)
        while True:
            data=wf.readframes(chunk)
            if data=="":break
            stream.write(data)
        stream.close()
        p.terminate()
    
    if __name__ == '__main__':
        my_record()
        print('Over!')
        play()

    效果如下图:

     

    帮助文档:

    百度语音帮助文档or手册

    三、后记

    本代码未完全实现,有兴趣可自行整理,玩斗地主的时候声音可能要大点,因为识别有时候会报3001错误,音频质量过差,不过被打可别找我

  • 相关阅读:
    难以理解的二分查找
    程序设计第七次作业——关于计算器的总结
    程序设计第六次作业——计算器(可视化界面)
    课堂作业——1025反转链表
    程序设计第五次作业——计算器(调用文件输入输出)
    circle area
    程序设计第四次作业——计算器第二步(计算)
    第三次作业代码规范修改
    解决Type 'UnityEngine.Component' does not support slicing
    mactype支持qq浏览器
  • 原文地址:https://www.cnblogs.com/qflyue/p/8489541.html
Copyright © 2020-2023  润新知