Pyhton调用百度语音识别+千帆大模型API实现智能语音助手
·
1.录制音频文件
使用pyaudio进行录音,并保存录音文件,文件名为output.wav,代码如下:
import pyaudio
import wave
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
print("开始录音,请说话...")
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
print("录音结束。")
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()
2.语音识别
使用API调用百度智能云中的语音技术

点击创建应用

应用名随便填,应用归属个人,应用描述随便填。

创建后生成对应的API_Key和SECRET_Key(后面要用)。

可以用API调试应用,把第一步生成的录音文件传入,查看应用是否可用,代码如下:
import base64
import urllib
import requests
import json
API_KEY = "GO40EP****lr5Oql"
SECRET_KEY = "4Ug8LK****VPcmPE"
def main():
url = "https://vop.baidu.com/server_api"
# speech 可以通过 get_file_content_as_base64("C:\fakepath\output.wav",False) 方法获取
payload = json.dumps({
"format": "wav",
"rate": 16000,
"channel": 1,
"cuid": "FBcahJJZPVmENtIifK8MN5XaCpZh8zrn",
"token": get_access_token(),
"speech": "UklGRiRwAgBXQVZFZm10IBAAAAABAAEAgD4AAAB9AAACABAAZGF0YQBwAgAAAAAA//8AAAAAAAAAAP//AAAAAAAAAAAAAAAAAAAA...",
"len": 159788
})
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
def get_file_content_as_base64(path, urlencoded=False):
"""
获取文件base64编码
:param path: 文件路径
:param urlencoded: 是否对结果进行urlencoded
:return: base64编码信息
"""
with open(path, "rb") as f:
content = base64.b64encode(f.read()).decode("utf8")
if urlencoded:
content = urllib.parse.quote_plus(content)
return content
def get_access_token():
"""
使用 AK,SK 生成鉴权签名(Access Token)
:return: access_token,或是None(如果错误)
"""
url = "https://aip.baidubce.com/oauth/2.0/token"
params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
return str(requests.post(url, params=params).json().get("access_token"))
if __name__ == '__main__':
main()
3.大模型
接入百度千帆大模型,具体可以参考这篇文章:https://blog.csdn.net/dream_of_grass/article/details/135535369?spm=1001.2100.3001.7377&utm_medium=distribute.pc_feed_blog_category.none-task-blog-classify_tag-9-135535369-null-null.nonecase&depth_1-utm_source=distribute.pc_feed_blog_category.none-task-blog-classify_tag-9-135535369-null-null.nonecase
4.语音输出
使用pyttsx,代码如下:
import pyttsx3 as pyttsx
engine = pyttsx.init()
a = "你好"
engine.say(a)
engine.runAndWait()
总体效果:

总的项目代码,可以参考我的github:https://github.com/Unconsoled/SR-LLM
更多推荐


所有评论(0)