第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > python编写的语音识别+机器人对话+文字播报一体

python编写的语音识别+机器人对话+文字播报一体

时间:2022-07-09 17:34:34

相关推荐

python编写的语音识别+机器人对话+文字播报一体

1.语音识别

这里用到了百度api的语音识别,目前开源的语音识别成文字的效果都很差,百度api的语音识别效果还可以。

2.机器人对话,这里用到了青云客机器人对话,通过爬虫获取对话的内容,机器人对话效果一般,没有图灵机器人灵活,但是目前免费,这个是很好的优点。

3.文字播报

文字转成mp3格式的音频保存,然后使用pygame播放出保存的mp3格式的语音

4.完整代码呈现

from aip import AipSpeechimport pyaudioimport pygameimport ffmpyimport timeimport waveimport osimport requestsimport jsonimport pyttsx3# BaiduAPIAPP_ID = '你的id'API_KEY = '你的key'SECRET_KEY = '你的SECRET_KEY'client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)e = pyttsx3.init()e.runAndWait()while True:# 语音识别CHUNK = 1024FORMAT = pyaudio.paInt16CHANNELS = 2RATE = 16000RECORD_SECONDS = 2WAVE_OUTPUT_FILENAME = "input.wav"try:p = pyaudio.PyAudio()stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)except:print("请插上录音设备!!!")exit()print("开始录音,请说话......")time.sleep(1)frames = []for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):data = stream.read(CHUNK)frames.append(data)print("AI:让我听听你在说什么.....")stream.stop_stream()stream.close()p.terminate()wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')wf.setnchannels(CHANNELS)wf.setsampwidth(p.get_sample_size(FORMAT))wf.setframerate(RATE)wf.writeframes(b''.join(frames))wf.close()# FFmpeg调用ff = ffmpy.FFmpeg(executable='F:\\ffmpeg\\bin\\ffmpeg.exe', # 不同电脑路径需要修改inputs={'input.wav': None},outputs={'output.pcm': '-f s16le -ar 16000 -ac 1 -acodec pcm_s16le -y'})ff.run()# 创建函数 读取文件def get_file_content(filePath):with open(filePath, 'rb') as fp:return fp.read()# 删除.wav文件path = 'input.wav'if os.path.exists(path):os.remove(path)# 识别本地文件 语音转文字result_dict = client.asr(get_file_content('output.pcm'), 'pcm', 16000, {'dev_pid': 1537,})result_list = result_dict['result']user_PO = result_list[0] # 转换后的字符串存入POprint("你说: %s" % user_PO)a = user_POif "再见。" in a:e.say("再见")e.runAndWait()print("再见")exit()else:r = requests.get('/api.php?key=free&appid=0&msg=' + a)v = json.loads(r.content)user_P1 = v['content']print("菲菲:" + v['content'])# AI回答转语音# e.say(user_P1)result = client.synthesis(user_P1, 'zh', 1, {'vol': 5, 'per': 4})if not isinstance(result, dict):with open('audio.mp3', 'wb') as f:f.write(result)# 自定义函数,用于播放mp3音频def play_mp3(file):pygame.mixer.init()pygame.mixer.music.load(file)pygame.mixer.music.play()while pygame.mixer.music.get_busy():time.sleep(1)pygame.mixer.music.stop()pygame.mixer.quit()play_mp3('audio.mp3')e.runAndWait()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。