导语:想用Python亲手实现一个能语音对话、查天气、讲笑话的智能机器人吗?本文将手把手教你从零搭建一个“钢铁侠贾维斯”雏形!内含完整代码和避坑指南,小白也能轻松上车!文末附【完整项目源码】下载方式!
一、项目效果预览
-
语音唤醒:喊“小智”唤醒机器人
-
多轮对话:支持闲聊、查天气、讲笑话、算数学题
-
语音交互:麦克风输入 + TTS语音回复
-
技能扩展:可自由添加翻译、新闻播报等功能
二、环境准备
1. 安装Python库(需Python 3.6+)
pip install speechrecognition pyttsx3 requests nltk
2. 申请免费API密钥
-
天气API:前往心知天气注册获取API Key
三、核心代码分步实现
1. 语音识别模块
import speech_recognition as sr
def listen():
r = sr.Recognizer()
with sr.Microphone() as source:
print("请说话...")
audio = r.listen(source, timeout=5)
try:
text = r.recognize_google(audio, language='zh-CN')
print(f"识别结果:{text}")
return text
except Exception as e:
print("识别失败:", e)
return ""
2. 语音合成模块
import pyttsx3
engine = pyttsx3.init()
# 设置语速音量(可自定义AI音色)
engine.setProperty('rate', 150)
engine.setProperty('volume', 0.9)
def speak(text):
print(f"AI:{text}")
engine.say(text)
engine.runAndWait()
3. 智能对话核心逻辑
import random
import requests
from nltk.chat.util import Chat, reflections
# 自定义对话规则(可无限扩展)
pairs = [
[r'你好|嗨', ['你好呀!我是小智~', '嗨,有什么能帮您?']],
[r'(.*)天气(.*)', get_weather], # 天气查询函数
[r'讲个笑话', tell_joke],
[r'退出|再见', ['再见啦,记得常来找我玩!', '小智下线中...']]
]
chatbot = Chat(pairs, reflections)
def get_weather(city):
API_KEY = "YOUR_API_KEY"
url = f"https://api.seniverse.com/v3/weather/now.json?key={API_KEY}&location={city}"
res = requests.get(url).json()
weather = res['results'][0]['now']['text']
return f"{city}现在天气:{weather},温度{res['results'][0]['now']['temperature']}℃"
def tell_joke():
jokes = ["为什么程序员总分不清万圣节和圣诞节?因为Oct31 == Dec25!",
"SQL查询走进酒吧,看见两张表,问:我可以JOIN你们吗?"]
return random.choice(jokes)
4. 主程序循环
def main():
speak("小智已启动,唤醒词是'小智'哦~")
while True:
text = listen().lower()
if "小智" in text:
speak("在呢,请吩咐!")
while True:
query = listen()
if not query: continue
if "退出" in query:
speak("下次见!")
return
response = chatbot.respond(query)
speak(response or "小智还在学习中,换个问题试试?")
if __name__ == "__main__":
main()
四、项目优化技巧
-
增加唤醒词检测:使用
wakeword_detection
库实现离线唤醒 -
接入ChatGPT:替换
pairs
为OpenAI API调用 -
添加图形界面:用PyQt5/Tkinter制作可视化UI
-
异常处理增强:网络错误时自动重试
五、常见问题解决
-
Q:麦克风无法识别?
-
A:检查麦克风权限,尝试更换
sr.Microphone(device_index=1)
-
-
Q:中文识别不准?
-
A:改用百度语音API(需申请
BAIDU_APP_ID/KEY
)
-
-
Q:运行报nltk错误?
-
A:终端执行
python -m nltk.downloader punkt
-
结语:本文实现了智能机器人的核心功能,点赞收藏过500立即更新《用GPT-4升级机器人》教程!你在项目中遇到什么问题?欢迎评论区留言讨论!
已上传完整代码,欢迎查阅!