python案例#基于cozeAI智能体语音聊天助手项目案例
4.调用百度智能云API实现语音识别,语音合成等功能,对用户的语音进行识别,传给cozeAPI进行语音合成并回复。2.设计仿qq聊天窗口,实现窗口部分功能,包括表情包、发送图片、查看聊天记录等。8.关于百度智能云和cozeAPI可自行从官方文档调用,使用自己的token。1.设计仿qq好友列表,实现点击好友,进行用户聊天(单用户)3.调用cozeAPI对用户的输入进行回复。2.1聊天窗口(点击麦克
·
项目需求:
- 使用PySide6绘制用户交互界面
- 调用cozeAPI,实现机器人与用户聊天
- 调用百度智能云API,实现识别用户的语音输入及机器人语音回复用户
- 使用SQLite实现数据持久化
设计思路:
1.设计仿qq好友列表,实现点击好友,进行用户聊天(单用户)
2.设计仿qq聊天窗口,实现窗口部分功能,包括表情包、发送图片、查看聊天记录等
3.调用cozeAPI对用户的输入进行回复
4.调用百度智能云API实现语音识别,语音合成等功能,对用户的语音进行识别,传给cozeAPI进行语音合成并回复
用户交互界面展示:
1.好友列表
2.
2.1聊天窗口(点击麦克风可以语音输入)
2.1表情包
2.2发送图片
2.3发红包
2.4聊天历史(使用SQLite实现数据持久化)
代码展示:
1.好友列表
class FriendListWindow(QMainWindow, Ui_Form):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setFixedSize(361, 641)
self.chat_window = ChatWindow()
self.chat_his_window = ChatHisWindow()
self.pushButton_6.clicked.connect(self.openChat)
self.chat_window.setTitle(self.pushButton_6.text())
self.chat_his_window.setTitle(self.pushButton_6.text())
#打开聊天窗口
def openChat(self):
"""
打开聊天窗口
:return:
"""
self.chat_window.show()
2.聊天窗口(初始化)
def __init__(self):
super().__init__()
self.setupUi(self)
self.setFixedSize(721, 661)
# 创建数据库
# self.create_database()
# 发送按钮点击事件
self.pushButton.clicked.connect(lambda: self.sendTextMessage())
# 关闭按钮点击事件
self.pushButton_2.clicked.connect(lambda: self.closePage())
# 打开表情包
self.pushButton_3.clicked.connect(lambda: self.openEmoji())
# 发送图片
self.pushButton_6.clicked.connect(lambda: self.sendImage())
# 打开红包
self.pushButton_7.clicked.connect(lambda: self.openRedPacket())
# 打开聊天历史界面
self.pushButton_9.clicked.connect(lambda: self.openChatHistory())
# 为文本编辑控件安装事件过滤器,以便自定义处理各类事件
self.textEdit.installEventFilter(self)
# 连接推送按钮的按下和释放事件到相应的录音开始和停止方法
self.recording_status = False # 录音状态,默认为False
self.pushButton_8.pressed.connect(self.start_recording)
self.pushButton_8.released.connect(self.stop_recording)
self.setButtonToolTip()
# 初始化录音状态为False,表示未开始录音
self.recording = False
# 创建线程锁,用于同步访问录音数据帧
self.frames_lock = threading.Lock()
# 初始化录音数据帧列表
self.frames = []
# 设置音频块大小
self.CHUNK = 1024
# 设置音频格式为16位整数
self.FORMAT = paInt16
# 设置音频通道数为单声道
self.CHANNELS = 1
# 设置音频采样率为16000Hz
self.RATE = 16000
# 创建PyAudio对象,用于音频流的录入和播放
self.audio = PyAudio()
3.表情包
class Emoji(QMainWindow):
sendTextSignal = Signal(str)
def __init__(self, parent=None):
super().__init__(parent)
self.initUI()
def initUI(self):
self.setFixedSize(190, 91)
vertical_layout = QVBoxLayout()
button_texts = [
['😀', '😁', '😅', '🤣'],
['😊', '😏', '🫡', '😋']
]
for row_texts in button_texts:
horizontal_layout = QHBoxLayout()
buttons_row = []
for text in row_texts:
button = QPushButton(text, self)
try:
button.setFixedSize(31, 31)
except Exception as e:
# 更具体的异常处理
print(f"Error setting fixed size for button '{text}': {e}")
continue
# 解决Lambda变量捕获问题
button.clicked.connect(lambda _, btn=button: self.getEmoji(btn.text()))
buttons_row.append(button)
horizontal_layout.addWidget(button)
vertical_layout.addLayout(horizontal_layout)
4.发送图片
# 使用QFileDialog打开文件选择对话框
file_path, _ = QFileDialog.getOpenFileName(self, "选择图片", "",
"图片文件 (*.png *.jpg *.jpeg *.bmp)")
try:
if file_path:
# 更新图片路径到文本行
if file_path:
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
html_image = f"""
<div style="text-align: left; margin-bottom: 10px;">
<span style="font-size: 10px; color: gray;">我:{now}</span>
<br/>
<img src="{file_path}" style="width: 150px; height: 150px; object-fit: cover;"/><br/>
</div>
"""
print(f"Selected file path: {file_path}") # 调试输出
self.textBrowser.append(html_image)
5.发红包
def on_send_button_clicked(self):
# 获取输入框中的红包金额
amount = self.amount_input.text()
try:
amount = float(amount)
if amount <= 0:
raise ValueError("红包金额必须大于0")
except ValueError as e:
print(f"错误:{e}")
return
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
text = (f"我:[{now}]\n"
f"🧧发放成功!\n"
f"🧧金额:{amount} 元")
self.sendTextSignal.emit(text)
print("红包发放成功!")
6.聊天记录
def __init__(self):
super().__init__()
self.setupUi(self)
self.setFixedSize(649, 658)
conn = sqlite3.connect('chat.db')
cursor = conn.cursor()
# 将数据库的数据加载到文本中
cursor.execute("SELECT * FROM chat_history")
for row in cursor.fetchall():
self.textBrowser.append(f"我:[{row[3]}]\n{row[1]}\n李四:[{row[3]}]\n{row[2]}\n")
7.语音识别及语音合成功能
# 语音识别功能
def speech_recognition(self):
#语音识别功能
# 初始化BaiduVoice对象,用于后续的语音识别和合成操作
voice = BaiduVoice()
# 识别语音文件并打印识别结果
recognition_result = voice.recognize_speech('medium/user.wav')
# 发送识别结果到聊天窗口
self.sendSpeechMessage(recognition_result)
print("已识别的文本:", recognition_result)
if recognition_result:
#调用cozeapi接口
response = self.coze_api(recognition_result)
self.replySpeechMessage(response)
self.insert_data(recognition_result, response)
else:
print("识别失败")
# 语音合成功能
def speech_synthesis(self,kword):
# 语音合成功能
# 初始化BaiduVoice对象,用于后续的语音识别和合成操作
voice = BaiduVoice()
# 合成文本并保存为音频文件
voice.synthesize_text(kword, 'medium/bot.mp3')
print("已合成的语音文本:", kword)
# 播放合成的音频文件
# 初始化Pygame,这是运行Pygame功能的必要步骤
pygame.init()
# 加载背景音乐文件
pygame.mixer.music.load('medium/bot.mp3')
# 播放背景音乐
pygame.mixer.music.play()
# 等待音乐播放完毕,避免程序提前退出
while pygame.mixer.music.get_busy():
# 控制循环帧率为10帧/秒,以节省资源
pygame.time.Clock().tick(10)
# 音乐播放结束后,释放Pygame资源
pygame.quit()
8.关于百度智能云和cozeAPI可自行从官方文档调用,使用自己的token
,
更多推荐
已为社区贡献3条内容
所有评论(0)