本文共 3441 字,大约阅读时间需要 11 分钟。
这是工作室第一个大作业,转完专业课好多好多好多好多,准备的多多少少不完善,我其实想做个UI的…先这样吧 ,等忙完这个期末寒假好好学习,flag在此。目前因为穷买不起图灵的高级版本,所以语音机器人的功能很少,我愿意称之为智障机器人,但可以自己加语句库还是蛮好玩的,比如夸夸自己?
用python3实现一个语音聊天机器人,调用百度语音识别SDK(详情见我的上一篇博客)和图灵API.
先将自己的语音存成文件—》将文件内容上传到百度平台(调用sdk)转成文字—》将文字上传到图灵机器人平台(调用图灵API)将文字转成语音
import waveimport timefrom pyaudio import PyAudio, paInt16framerate = 16000 # 采样率num_samples = 2000 # 采样点channels = 1 # 声道sampwidth = 2 # 采样宽度2bytesFILEPATH = 'voice.wav'def save_wave_file(filepath, data): wf = wave.open(filepath, 'wb') wf.setnchannels(channels) wf.setsampwidth(sampwidth) wf.setframerate(framerate) wf.writeframes(b''.join(data)) wf.close()# 录音def my_record(): pa = PyAudio() # 打开一个新的音频stream stream = pa.open(format=paInt16, channels=channels, rate=framerate, input=True, frames_per_buffer=num_samples) my_buf = [] # 存放录音数据 t = time.time() print('正在录音...') while time.time() < t + 5: # 设置录音时间(秒) # 循环read,每次read 2000frames string_audio_data = stream.read(num_samples) my_buf.append(string_audio_data) print('录音结束.') save_wave_file(FILEPATH, my_buf) stream.close() # 音频文件转文字:采用百度的语音识别python-SDK# 百度语音识别API配置参数from aip import AipSpeechAPP_ID = '自己填'API_KEY = '自己填'SECRET_KEY = '自己填'client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)path = 'voice.wav'# 将语音转文本STTdef listen(): # 读取录音文件 with open(path, 'rb') as fp: voices = fp.read() try: # 参数dev_pid:1536普通话(支持简单的英文识别)、1537普通话(纯中文识别)、1737英语、1637粤语、1837四川话、1936普通话远场 result = client.asr(voices, 'wav', 16000, { 'dev_pid': 1537, }) # result = CLIENT.asr(get_file_content(path), 'wav', 16000, {'lan': 'zh', }) # print(result) # print(result['result'][0]) # print(result) result_text = result["result"][0] print("you said: " + result_text) return result_text except KeyError: print("KeyError")# 与机器人对话:调用的是图灵机器人import requestsimport json# 图灵机器人的API_KEY、API_URLturing_api_key = "自己填 "api_url = "http://openapi.tuling123.com/openapi/api/v2" # 图灵机器人api网址headers = { 'Content-Type': 'application/json;charset=UTF-8'}# 图灵机器人回复def Turing(text_words=""): req = { "reqType": 0, "perception": { "inputText": { "text": text_words }, "selfInfo": { "location": { "city": "天津", "province": "天津", "street": "滨海新区天津科技大学" } } }, "userInfo": { "apiKey": '自己填', # 你的图灵机器人apiKey "userId": "wangxunzhi" # 用户唯一标识(随便填, 非密钥) } } req["perception"]["inputText"]["text"] = text_words response = requests.request("post", api_url, json=req, headers=headers) response_dict = json.loads(response.text) result = response_dict["results"][0]["values"]["text"] print("AI Robot said: " + result) return resultimport pyttsx3# 初始化语音engine = pyttsx3.init() # 初始化语音库# 设置语速rate = engine.getProperty('rate')engine.setProperty('rate', rate - 50)# 输出语音engine.say("你好,很高兴认识你!") # 合成语音engine.runAndWait()while True: my_record() request = listen() response = Turing(request) engine.say(response) engine.runAndWait()
①API真的挺棒,而且代码都给你写好了(cv大法好),pyaudio也是参考完成的。
②API调用始终是上层,寒假有机会研究一下他的底层算法,为了人工智能算法工程师而努力
③多多少少有些水,因为这个有大量成品代码,以后继续努力吧
智障语音机器人
转载地址:http://wfxki.baihongyu.com/