制作一个语音智能助手小艺

部署运行你感兴趣的模型镜像

目录

一、准备工作

1.准备爬虫工具

2.python库的安装

3.国内常用源镜像地址

4.镜像安装,下载速度更快

5.爬虫使用步骤

6.用到的工具

二、项目构思

1.创建基础窗口

2.创建按钮

3.添加动态背景

4.退出方法添加

5.按钮实现模块

三、整体代码

四、项目运行效果


一、准备工作

1.准备爬虫工具
爬取机器人回复数据:
  • 注册机器人平台:https://console.ownthink.com/
  • 获取Appid
  • 对机器人进行一些基本的设置和训练
2.python库的安装
pip install 库名
pip uninstall 库名
pip list 查询当前安装库和版本号
3.国内常用源镜像地址
附国内常用源镜像地址
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
豆瓣(douban) :http://pypi.douban.com/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
4.镜像安装,下载速度更快
pip install 库名 -i
https://pypi.tuna.tsinghua.edu.cn/simple
5.爬虫使用步骤
  • 安装requests库
pip install requests -i
https://pypi.tuna.tsinghua.edu.cn/simple
  • 1. 导入爬虫库
    2. 定义 url
    3. 爬取并返回数据
    4. 将数组转换为指定格式
    5. 显示结果
6.用到的工具

1.运用python爬虫技术并使用Json解析工具进行格式转换

2.导入pillow库,进行图像处理

3.通过百度人工智能平台获取智能语音资源

4.导入playaudio库,进行声音的录制

5.导入jieba库,进行智能分词的实现

6.导入tqdm库,实现语音录制过程中进度条的显示

7.导入baidu-aip库,进行声音的识别

8.导入playsound库,进行语音的合成

二、项目构思

1.创建基础窗口
from tkinter import *
import dirsetting # 文件结构管理
dirsetting.mk_dir() # 创建基础文件夹
# 创建窗口
window = Tk()
window.geometry('640x480+500+200')
window.title('智能语音助手')
window.resizable(0,0) # 设置窗口尺寸不可更改
# 创建一个画布
bg = Canvas(window,width=640,height=480,bg='#3399ff')
bg.place(x=0,y=0)
window.mainloop()
2.创建按钮
# 按钮点击的函数
def click():
print('点我干哈!')
Button(window,text='点击对话',width=20,bg='#c2c2c2',
command=click).place(x=230,y=80)
3.添加动态背景
# pillow中的 图片工具 Tk图片工具 分割动态图片工具
from PIL import Image,ImageTK,ImageSequence
import time
# 添加背景函数
def pick():
im = Image.open(r'image\bg.gif')
while True:
# 图像分割后 得到静态图片的集合
iter = ImageSequence.Iterator(im)
# 将每张图片设置为背景
for pic in iter:
pic = ImageTk.PhotoImage(pic)
bg.create_image((320,240),image=pic)
time.sleep(0.1)
window.update_idletasks()
window.update()
# 和窗口一起运行 (定时器)
window.after(0,pick)
4.退出方法添加
from MyAudio import * # 语音合成文件
import os
# 退出方法
def on_closing():
getAudio("期待下次再见!")
os._exit(0)
# 添加背景函数
def pick():
略
while True:
# 添加退出方法
window.protocol('WM_DELETE_WINDOW',on_closing)
略
5.按钮实现模块
  • 多线程功能——解决按钮使用,其他位置不能运行的问题
import threading # 线程库
# 自定义线程
def thread_it(func,*args):
# 创建线程
t = threading.Thread(target=func,args=args)
# 守护线程 另一段代码也执行
t.setDaemon(True)
# 启动线程
t.start()
# 修改按钮的command命令
Button(window,text='点击对话',width=20,bg='#c2c2c2',
command=lambda:thread_it(click)).place(x=200,y=80)
  • 实现按钮的主要功能
from Record import * # 录音
from xiaoKu import * # 机器人
from take_photo import * # 拍照
from findsongs import * # 找歌
import jieba # 智能分词
完整代码
# 按钮点击的函数
def click():
# 提示音
getAudio('你好,我是小艺,有什么能帮助你的吗?')
# 录音并转换为文字
say = record()
# 智能分词
keyword = jieba.lcut_for_search(say)
# print(keyword)
# 根据关键词 执行指令
# 访问机器人
if '天气' in keyword or '笑话' in keyword:
result = getReply(say)
elif '播放' in keyword or '音乐' in keyword:
getAudio('请告诉我歌曲名称,例如:刘德华的忘情水!')
say = record()
getsong(say)
return
elif '拍照' in keyword or '照相' in keyword:
take_photo()
return
else:
result = getReply()
getAudio(result)

三、整体代码

from tkinter import *
import dirsetting     #文件结构管理
#pillow中的图片工具库,TK图片工具,分割动态图片工具
from PIL import Image,ImageTk,ImageSequence
import time
from MyAudio import *      #语音合成文件
import os
import threading           #线程库

from Record import *       #录音
from xiaoKu import *       #机器人
from take_photo import *   #拍照
from findsongs import *    #找歌
import jieba               #智能分词

dirsetting.mk_dir()        #创建基础文件夹

#1.创建窗口
window = Tk()
window.geometry("640x480+500+200")
window.title('智能语音助手')
window.resizable(0,0)   #设置窗口尺寸不可更改
#创建一个画布
bg = Canvas(window,width=640,height=480,bg='#3399ff')
bg.place(x=0,y=0)

#自定义线程
def thread_it(func,*args):
    #创建线程
    t = threading.Thread(target=func,args=args)
    #守护线程  另一段代码也执行
    t.setDaemon(True)
    #启动线程
    t.start()
#点击按钮退出
def exit():
    # 提示音
    getAudio('这么快就要说再见了吗?')
    # 录音并转换为文字
    say = record()
    # 智能分词
    keyword = jieba.lcut_for_search(say)
    # print(keyword)
    getAudio("期待下次再见!")

#按钮点击的函数
def click():
    #提示音   
    getAudio("你好,我是小艺,有什么能帮助你的吗?")
    #录音并转换为文字
    while TRUE:
        say = record()
        #智能分词
        keyword = jieba.lcut_for_search(say)
        print(keyword)
        #根据关键词,执行指令
        #访问机器人
        
        if '再见' in  keyword or '拜拜' in keyword:
            getAudio('小艺会想你的')
            break  
        elif '头痛' in  keyword or '头疼' in keyword:
            result = getReply(say)
        elif '肚子疼' in  keyword or '肚子痛' or '腹部疼痛' in keyword:
            result = getReply(say)
        elif '不开心' in  keyword or '心情不好' or '难过' in keyword:
            result = getReply(say)
        elif '失眠' in  keyword or '睡不着' in keyword:
            result = getReply(say)
        elif '烫伤' in  keyword or '烫到' in keyword:
            result = getReply(say)
        elif '口腔溃疡'  in keyword:
            result = getReply(say)
        elif '感冒的症状' in  keyword:
            result = getReply(say)
        elif '感冒' in keyword:
            result = getReply(say)
        elif '发烧' in  keyword or '发热' in keyword:
            result = getReply(say)
       
        elif '天气' in  keyword or '笑话' in keyword:
            result = getReply(say)
        elif '播放' in keyword or '音乐' in keyword:
            getAudio('请告诉我歌曲名称,例如刘德华的《忘情水》')
            say = record()
            getsong(say)
        elif '拍照' in  keyword or '照相' in keyword:
            take_photo()
            return
        else:
            result = getReply()
        getAudio(result)


#退出方法
def on_closing():
    getAudio("小艺去睡觉咯!")
    os._exit(0)


#添加背景函数
def pick():
    im = Image.open('image/8.gif')
    while True:
        #添加退出方法
        window.protocol('WM_DELETE_WINDOW',on_closing)
        #图像分割后, 得到静态图片的集合
        iter = ImageSequence.Iterator(im)
        #将每张图片设置为背景
        for pic in iter:
            pic = ImageTk.PhotoImage(pic)
            bg.create_image((320,240),image=pic)
            time.sleep(0.1)
            window.update()
#和窗口一起运行,反复执行(定时器)
window.after(0,pick)
    
Button(window,text='点击对话',width=20,bg='#c2c2c2',
       command=lambda:thread_it(click)).place(x=210,y=80)
Button(window,text='结束对话',width=20,bg='#c2c2c2',
       command=lambda:thread_it(exit)).place(x=210,y=300)

window.mainloop()


四、项目运行效果

智能医疗语音助手

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

为**殷墟博物馆**设计一个**多模态智能导览助手系统**,可以极大提升游客的参观体验。该系统将融合语音、视觉、文本、定位和增强现实(AR)等多种感知与交互方式,结合殷墟的文化特色(如甲骨文、青铜器、商代历史),实现智能化、个性化、沉浸式的导览服务。 --- ## ✅ 系统目标 - 自动识别展品并讲解 - 支持语音问答(中文为主,支持多语言) - 通过摄像头识别甲骨文或文物特征 - 结合室内定位自动推送内容 - 提供 AR 复原场景(如宫殿复原、祭祀仪式) - 支持移动端 App 或小程序运行 --- ### 🧩 核心功能模块架构 | 模块 | 技术实现 | |------|---------| | 语音识别(STT) | `Whisper` / `Azure Speech SDK` | | 语音合成(TTS) | `gTTS` / `Edge TTS` / `VITS`(中文自然) | | 图像识别 | `YOLOv8` 或 `ResNet` 分类模型识别文物 | | 文本理解与问答 | `Qwen` / `ChatGLM3` 大模型本地部署 | | 室内定位 | 蓝牙信标(Beacon) + 手机 RSSI 定位 | | 增强现实(AR) | Unity + ARKit/ARCore 实现三维复原 | | 数据库 | 展品信息库 + 甲骨文知识图谱 | --- ## ✅ 示例代码:基于 Python 的简化版多模态导览助手原型(适用于展厅演示) ```python import speech_recognition as sr from gtts import gTTS import os import cv2 import numpy as np import threading import time from datetime import datetime # ------------------------------- # 1. 初始化语音识别器 # ------------------------------- r = sr.Recognizer() # ------------------------------- # 2. 殷墟展品知识库(可替换为数据库) # ------------------------------- exhibit_db = { "司母戊鼎": { "info": "司母戊鼎是迄今发现的最大最重的商代青铜器,重达832公斤,用于祭祀。", "year": "约公元前1300年", "material": "青铜", "significance": "象征王权与礼制" }, "甲骨文刻辞龟甲": { "info": "这是商代占卜用的龟甲,上面的文字是中国最早成熟的汉字体系——甲骨文。", "year": "约公元前1200年", "language": "古汉字(甲骨文)", "usage": "记录占卜结果" }, "妇好墓玉凤": { "info": "出土于妇好墓,代表商代高超的玉雕工艺,凤凰象征吉祥与神圣。", "owner": "商王武丁之妻 妇好", "artifact_type": "玉器" } } KNOWN_ITEMS = list(exhibit_db.keys()) # ------------------------------- # 3. 语音识别线程函数 # ------------------------------- def listen_for_question(): with sr.Microphone() as source: print("👂 正在聆听您的问题...") try: audio = r.listen(source, timeout=5, phrase_time_limit=4) text = r.recognize_google(audio, language='zh-CN') print(f"🎙️ 用户说:{text}") return text except sr.WaitTimeoutError: return "" except sr.UnknownValueError: print("⚠️ 无法理解语音") return "" except Exception as e: print(f"🎤 语音识别错误: {e}") return "" # ------------------------------- # 4. 图像识别模拟函数(实际可用 YOLOv8 替代) # ------------------------------- def detect_artifact_from_frame(frame): hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # 模拟不同颜色标签识别不同文物(真实场景使用深度学习) # 黄色 → 司母戊鼎 lower_yellow = np.array([20, 100, 100]) upper_yellow = np.array([30, 255, 255]) mask = cv2.inRange(hsv, lower_yellow, upper_yellow) yellow_pixels = cv2.countNonZero(mask) if yellow_pixels > 5000: return "司母戊鼎" # 白色 → 龟甲 lower_white = np.array([0, 0, 200]) upper_white = np.array([180, 30, 255]) mask = cv2.inRange(hsv, lower_white, upper_white) white_pixels = cv2.countNonZero(mask) if white_pixels > 5000: return "甲骨文刻辞龟甲" # 绿色 → 玉凤 lower_green = np.array([40, 40, 40]) upper_green = np.array([80, 255, 255]) mask = cv2.inRange(hsv, lower_green, upper_green) green_pixels = cv2.countNonZero(mask) if green_pixels > 5000: return "妇好墓玉凤" return None # ------------------------------- # 5. 语音合成播放函数 # ------------------------------- def speak(text): print(f"🔊 导览员说:{text}") tts = gTTS(text=text, lang='zh', slow=False) filename = f"guide_{int(time.time())}.mp3" tts.save(filename) os.system(f"mpg123 {filename}") # Linux/Mac;Windows 可改用 playsound 或 edge-tts # ------------------------------- # 6. 简易大模型风格问答逻辑(可替换为 Qwen API) # ------------------------------- def answer_question(question, exhibit_name): item = exhibit_db.get(exhibit_name) if not item: return "抱歉,我还不了解这件展品。" response = "" if '叫什么' in question or '名字' in question: response = f"这件文物叫做 {exhibit_name}。" elif '年代' in question or '什么时候' in question: response = f"它来自 {item['year']},属于商代晚期。" elif '用途' in question or '干什么' in question: response = item.get('usage') or item.get('significance') or "主要用于祭祀和礼仪活动。" elif '材料' in question or '做什么的' in question: mat = item.get('material') or item.get('artifact_type') or "未知材质" response = f"它是用 {mat} 制成的。" elif '故事' in question or '背景' in question: response = item['info'] else: response = item['info'][:100] + "……想了解更多可以问我具体问题哦!" return response # ------------------------------- # 7. 主循环:多模态融合导览 # ------------------------------- def yinxu_tour_guide(): cap = cv2.VideoCapture(0) last_detected = None last_speak_time = time.time() print("🚀 殷墟博物馆多模态导览助手已启动!") while True: ret, frame = cap.read() if not ret: continue current_time = time.time() # --- 视觉识别 --- artifact = detect_artifact_from_frame(frame) if artifact and artifact != last_detected: last_detected = artifact info = exhibit_db[artifact]["info"] speak(f"欢迎来到 {artifact} 展区。{info}") # --- 语音识别(每15秒检测一次)--- if current_time - last_speak_time > 15: user_input = listen_for_question() if user_input: # 尝试匹配展品 + 回答问题 found = False for name in KNOWN_ITEMS: if name in user_input: resp = answer_question(user_input, name) speak(resp) last_speak_time = current_time found = True break if not found: # 默认回应 if any(word in user_input for word in ["你好", "您好"]): speak("您好,我是殷墟博物馆的智能导览员,我可以为您介绍青铜器、甲骨文等珍贵文物。") else: speak("抱歉,我没有听清,或者这个问题我还不会回答,请靠近展品再问一次?") # 显示画面(调试用) cv2.imshow('YinXu Guide Cam', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() # ------------------------------- # 8. 启动系统 # ------------------------------- if __name__ == "__main__": yinxu_tour_guide() ``` --- ## 🔍 功能说明与扩展建议 | 功能 | 当前实现 | 升级建议 | |------|----------|--------| | 文物识别 | 颜色模拟 | 使用 YOLOv8 训练真实文物图像分类模型 | | 语音问答 | 关键词匹配 | 接入通义千问(Qwen)API 进行语义理解 | | AR 复原 | 未实现 | 使用 Unity 开发“商代宫殿”AR 场景,扫码触发 | | 定位推送 | 无 | 部署蓝牙信标,进入区域自动播报 | | 多语言支持 | 中文 | 加入英文、日文、韩文 TTS 输出选项 | | 甲骨文识别 | 未实现 | 使用 OCR 模型识别拓片中的甲骨文字符 | --- ## 🚀 特色亮点(适合殷墟) 1. **甲骨文互动识别**: - 游客拍照上传甲骨文图片 → 系统识别并翻译成现代汉字。 - 可结合 NLP 解释其含义(如“今日雨?”、“王狩猎吉否?”) 2. **AR 商王占卜仪式复原**: - 扫描展区地面 → 手机显示虚拟祭司烧灼龟甲、解读裂纹的过程。 3. **妇好将军角色扮演对话**: - 使用大模型驱动“妇好”数字人,讲述她的征战与生活。 4. **青铜器铸造 AR 演示**: - 展示“泥范法”如何一步步制作司母戊鼎。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值