【python语音识别】借助百度智能云实现任意时间长度语音识别,输入语音转为文字的python程序,按回车开始录制按回车结束录制,录音时间任意,无需指定录音时间|CSDN创作打卡

程序内容简述:

使用Python程序实现简单的语音识别程序,程序可以识别任意时间长度的语音,在语音输入完成后,点击回车就可以结束录音,可进行任意时间段的语音识别。

该语音识别程序借助百度智能云提供的云应用进行语音识别,使用百度智能云的语音识别模块识别语音之后返回文本,将文本以文本文件保存在磁盘中。

 在进行语音识别程序之前需要在百度智能云上创建自己的语音识别应用,在程序中调用该应用进行语音识别。注册百度智能云之后可以免费领取各种模块的使用次数,然后创建相应的应用即可。

创建的应用结果如下:

 博主创建的应用的重要信息已擦出,在创建应用时如遇到不明白的地方欢迎提问,博主将尽快回复。

程序代码如下: 

import pyaudio
import time
import wave
import _thread
from aip import AipSpeech
class Recorder():
    def __init__(self, chunk=1024, channels=1, rate=16000):
        self.CHUNK = chunk
        self.FORMAT = pyaudio.paInt16
        self.CHANNELS = channels
        self.RATE = rate
        self._running = True
        self._frames = []

    def start(self):
        _thread.start_new_thread(self.__recording, ())
    def __recording(self):
        self._running = True
        self._frames = []
        p = pyaudio.PyAudio()
        stream = p.open(format=self.FORMAT,
                        channels=self.CHANNELS,
                        rate=self.RATE,
                        input=True,
                        frames_per_buffer=self.CHUNK)
        while (self._running):
            data = stream.read(self.CHUNK)
            self._frames.append(data)
        stream.stop_stream()
        stream.close()
        p.terminate()
    def stop(self):
        self._running = False

    def save1(self, filename):
        p = pyaudio.PyAudio()
        if not filename.endswith(".wav"):
            filename = filename + ".wav"
        wf = wave.open(filename, 'wb')
        wf.setnchannels(self.CHANNELS)
        wf.setsampwidth(p.get_sample_size(self.FORMAT))
        wf.setframerate(self.RATE)
        wf.writeframes(b''.join(self._frames))
        wf.close()
    def record(self):
        print('请按下回车键开始录音:')
        a = input()
        if str.__len__(a)==0:
            begin = time.time()
            print("Start recording")
            self.start()
            print("请按下回车键结束录音:")
            b=input()
            if str.__len__(b)==0:
                print("Stop recording")
                self.stop()
                fina = time.time()
                t = fina - begin
                print('录音时间为%ds' % t)
    def positive(self):
        print('开始样本的录制')
        self.record()
        self.save1("test2.wav")
def save2(result,filename):
    if not filename.endswith(".txt"):
        filename = filename + ".txt"
    wf = open(filename, encoding='utf-8',mode='a+')
    wf.writelines(result)
    wf.writelines(['\n'])
    wf.close()

def ASR():
    rec = Recorder()
    rec.positive()
    print('识别中......')
    APP_ID = '25.....'#自己创建的百度智能云语音识别应用的APPID
    API_KEY = 'PSV4jja9................'#自己创建的百度智能云语音识别应用的API-key
    SECRET_KEY = 'Aw59NW...............'#自己创建的百度智能云语音识别应用的secret_key
    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
    # 读取文件
    def get_file_content(filePath):
        with open(filePath, 'rb') as fp:
            return fp.read()
    # 识别本地文件
    res=client.asr(get_file_content('test2.wav'), 'wav', 16000, {'dev_pid': 1536,})
    if res and res['err_no'] == 0:
        result = res['result'][0]
        print("识别结果为:")
        print(result)
        result2=res['result'][0]
        save2(result2,'wenben.txt')

if __name__ == '__main__':
    ASR()

程序运行结果如下: 

 

 由于免费试用的语音识别模块识别精度比较差,所以对于比较复杂的语音识别可能会出现比较多的错误,但是对于标准的发音的语音识别还是比较准确地。

内容仅做交流学习使用,如存在错误请大家指正,欢迎大家一起交流学习,学习更多有用有趣的知识,喜欢博主的别忘了点赞哦!

关注博主,学习更多Python程序设计知识! 

猜你喜欢

转载自blog.csdn.net/qq_59049513/article/details/122544904