diff --git a/conversation.db b/conversation.db index 22f8c23..71acf2d 100644 Binary files a/conversation.db and b/conversation.db differ diff --git a/main.py b/main.py index f1602df..3ee4130 100644 --- a/main.py +++ b/main.py @@ -180,42 +180,74 @@ def play_mp3(mp3_file): while pygame.mixer.music.get_busy(): # 使用一个循环来等待音频播放完毕,保证程序不会在播放结束前退出 clock.tick(3) +import cv2 +import socket +import threading +import queue +import time -def main(): - create_connection() +def detect_face(face_queue): + face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') + video_capture = cv2.VideoCapture(0) # 打开摄像头 # 用于跟踪是否已经检测到人脸 + face_detected = False while True: - # 1. 提示用户发言 - print('请发言,谢谢!') - # 2. 录制音频 - audio_record(5, 'user_audio.wav') - - print('结束发言') - # 3. 获取百度语音识别的access token - baidu_token = get_access_token() - print('Baidu access token obtained.') - - # 4. 上传录音文件并进行语音识别 - baidu_result = BaiduYuYin('./user_audio.wav', baidu_token) - print('Baidu speech recognition result:', baidu_result) - - # 5. 调用大语言模型进行文本生成 - model_response = get_completion(baidu_result) - print('Model response:', model_response) - - # 6. 将文本转换为语音,保存到唯一的文件名 - audio_filename="audio/"+str(uuid.uuid4()) + '.mp3' - unique_audio_filename = "static/"+audio_filename# 保存为不同的文件名以避免访问冲突 - asyncio.run(generate_audio_from_text(model_response, unique_audio_filename)) - - insert_data(baidu_result, model_response,audio_filename)# 插入数据库 - # 7. 播放生成的语音 - play_mp3(unique_audio_filename) - - # 8. 提示用户继续对话或退出 - user_input = input('继续对话或输入"退出"退出: ') - if user_input == '退出': + ret, frame = video_capture.read() + if not ret: + print("无法读取摄像头画面") break + gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) + faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5) + + # 在图像中绘制检测到的人脸 + for (x, y, w, h) in faces: + cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2) + + # 显示视频流 + cv2.imshow('Video', frame) + + if len(faces) > 0 and not face_detected: # 检测到人脸且之前未检测到 + face_queue.put(True) # 将检测结果放入队列 + face_detected = True # 设置为已检测到人脸 + + if len(faces) == 0: # 如果没有检测到人脸,重置状态 + face_detected = False + + if cv2.waitKey(1) & 0xFF == ord('q'): # 按 'q' 键退出 + break + + video_capture.release() + cv2.destroyAllWindows() + +def main(): + face_queue = queue.Queue() + detection_thread = threading.Thread(target=detect_face, args=(face_queue,)) + detection_thread.start() + + while True: + if not face_queue.empty(): # 检测到人脸 + face_result = face_queue.get() + if face_result: + print("识别到人脸,开始录音...") + audio_record(5, 'user_audio.wav') + # 获取百度Token + baidu_token = get_access_token() + baidu_result = BaiduYuYin('./user_audio.wav', baidu_token) + print("语音识别结果:",baidu_result) + model_response = get_completion(baidu_result) + print("模型回复:",model_response) + audio_filename = f"audio/{uuid.uuid4()}.mp3" + unique_audio_filename = f"static/{audio_filename}" + print("开始生成音频文件:", unique_audio_filename) + asyncio.run(generate_audio_from_text(model_response, unique_audio_filename)) + print("数据库信息",baidu_result, model_response, unique_audio_filename) + insert_data(baidu_result, model_response, audio_filename) + play_mp3(unique_audio_filename) + face_queue.put(False) + if input("请输入(退出)")=="退出": + break + + detection_thread.join() # 等待人脸检测线程结束 if __name__ == "__main__": main() diff --git a/static/audio/0155c46b-ab1e-487a-b6af-3d192938deee.mp3 b/static/audio/0155c46b-ab1e-487a-b6af-3d192938deee.mp3 new file mode 100644 index 0000000..64eeff0 Binary files /dev/null and b/static/audio/0155c46b-ab1e-487a-b6af-3d192938deee.mp3 differ diff --git a/static/audio/0a70cd38-7f48-447f-983e-4780fef37ec0.mp3 b/static/audio/0a70cd38-7f48-447f-983e-4780fef37ec0.mp3 new file mode 100644 index 0000000..613046f Binary files /dev/null and b/static/audio/0a70cd38-7f48-447f-983e-4780fef37ec0.mp3 differ diff --git a/static/audio/0ec49cb1-a870-4ee0-8191-b55571aac00c.mp3 b/static/audio/0ec49cb1-a870-4ee0-8191-b55571aac00c.mp3 new file mode 100644 index 0000000..1a43ac7 Binary files /dev/null and b/static/audio/0ec49cb1-a870-4ee0-8191-b55571aac00c.mp3 differ diff --git a/static/audio/21785b05-4424-411c-a37f-e87df8525e48.mp3 b/static/audio/21785b05-4424-411c-a37f-e87df8525e48.mp3 new file mode 100644 index 0000000..94fbef6 Binary files /dev/null and b/static/audio/21785b05-4424-411c-a37f-e87df8525e48.mp3 differ diff --git a/static/audio/73386525-654e-429a-b22d-a471790e7e10.mp3 b/static/audio/73386525-654e-429a-b22d-a471790e7e10.mp3 new file mode 100644 index 0000000..308bc9e Binary files /dev/null and b/static/audio/73386525-654e-429a-b22d-a471790e7e10.mp3 differ diff --git a/static/audio/7c958d8a-1f5f-4cc5-92cb-ded8cfb2c620.mp3 b/static/audio/7c958d8a-1f5f-4cc5-92cb-ded8cfb2c620.mp3 new file mode 100644 index 0000000..a0089c0 Binary files /dev/null and b/static/audio/7c958d8a-1f5f-4cc5-92cb-ded8cfb2c620.mp3 differ diff --git a/static/audio/7e2196a0-31cf-48a1-b40f-066c4559fdd3.mp3 b/static/audio/7e2196a0-31cf-48a1-b40f-066c4559fdd3.mp3 new file mode 100644 index 0000000..68d4ac7 Binary files /dev/null and b/static/audio/7e2196a0-31cf-48a1-b40f-066c4559fdd3.mp3 differ diff --git a/static/audio/82aa4609-7f24-47e8-9136-d5daf657be90.mp3 b/static/audio/82aa4609-7f24-47e8-9136-d5daf657be90.mp3 new file mode 100644 index 0000000..440ac6a Binary files /dev/null and b/static/audio/82aa4609-7f24-47e8-9136-d5daf657be90.mp3 differ diff --git a/static/audio/ad0a60dd-87b2-4f7c-9000-83cb0fbbd938.mp3 b/static/audio/ad0a60dd-87b2-4f7c-9000-83cb0fbbd938.mp3 new file mode 100644 index 0000000..f0f9f7e Binary files /dev/null and b/static/audio/ad0a60dd-87b2-4f7c-9000-83cb0fbbd938.mp3 differ diff --git a/static/audio/d804e0f3-7ffc-4f05-903f-bb46186fe10c.mp3 b/static/audio/d804e0f3-7ffc-4f05-903f-bb46186fe10c.mp3 new file mode 100644 index 0000000..c324157 Binary files /dev/null and b/static/audio/d804e0f3-7ffc-4f05-903f-bb46186fe10c.mp3 differ diff --git a/static/audio/f0899683-266f-46a1-b6bc-b5dea5e5eb4d.mp3 b/static/audio/f0899683-266f-46a1-b6bc-b5dea5e5eb4d.mp3 new file mode 100644 index 0000000..8919d7a Binary files /dev/null and b/static/audio/f0899683-266f-46a1-b6bc-b5dea5e5eb4d.mp3 differ diff --git a/static/audio/f328a348-4b12-402d-843d-0aa54f3f941b.mp3 b/static/audio/f328a348-4b12-402d-843d-0aa54f3f941b.mp3 new file mode 100644 index 0000000..28ea909 Binary files /dev/null and b/static/audio/f328a348-4b12-402d-843d-0aa54f3f941b.mp3 differ diff --git a/static/audio/f69aa01a-003b-4506-86b8-28d9dbe98f5b.mp3 b/static/audio/f69aa01a-003b-4506-86b8-28d9dbe98f5b.mp3 new file mode 100644 index 0000000..038e29d Binary files /dev/null and b/static/audio/f69aa01a-003b-4506-86b8-28d9dbe98f5b.mp3 differ diff --git a/templates/index.html b/templates/index.html index 8374430..e8a6554 100644 --- a/templates/index.html +++ b/templates/index.html @@ -10,7 +10,7 @@ font-family: Arial, sans-serif; margin: 0; padding: 20px; - background-color: #f0f0f0; + background-color: #cbe5d6; } h1 { text-align: center; @@ -24,11 +24,11 @@ th, td { padding: 12px; text-align: left; - border-bottom: 1px solid #ddd; + border-bottom: 1px solid #9714b9; } th { background-color: #5e7abf; - color: white; + color: #278080; } tr:nth-child(even) { background-color: #8568d7; diff --git a/test.py b/test.py index fedcfe3..1f75699 100644 --- a/test.py +++ b/test.py @@ -7,5 +7,33 @@ def get_completion(prompt, model="solar"): 'content': prompt, }, ]) + print(response) + print(response['message']) return response['message']['content'] -print(get_completion("你好,我是小明。")) \ No newline at end of file +print(get_completion("你好,我是小明。")) +# import cv2 + +# def test_camera(): +# video_capture = cv2.VideoCapture(0) # 打开默认摄像头 +# +# if not video_capture.isOpened(): +# print("无法打开摄像头") +# return +# +# while True: +# ret, frame = video_capture.read() +# if not ret: +# print("无法读取摄像头画面") +# break +# +# cv2.imshow('Video', frame) +# +# if cv2.waitKey(1) & 0xFF == ord('q'): # 按 'q' 键退出 +# break +# +# video_capture.release() +# cv2.destroyAllWindows() +# +# # 调用函数 +# test_camera() + diff --git a/user_audio.wav b/user_audio.wav index a37d6db..92988a0 100644 Binary files a/user_audio.wav and b/user_audio.wav differ