小白如何做一个Python人工智能语音助手

article/2025/9/12 14:51:22

小白如何做一个Python智能语音助手

  • 真的是小白?
  • 废话不说直接上图
    • 1、录音
    • 2、语音识别
    • 3、接入图灵机器人
    • 4、语音合成
    • 5、播放语音
  • 前期准备
  • 源代码
    • 1、录音
    • 2、语音识别 (将录音内容进行语音识别转成文字)
    • 3、接入图灵机器人(将文字发送给机器人获得回复)
    • 4、语音合成 (将回复的文字进行语音合成)
    • 5、播放语音
  • 最终代码来了

真的是小白?

大家好,我是一名信息工程的大三学生,由于大一大二没怎么学习技术,所以大三准备挖粪图强。先介绍一下我的学习储备吧,断断续续学过Python,一直只是看B站,学习一些语法基础,数值类型,循环,函数…甚至连面向对象和面向过程都分不清
不过,这样的学习基础过程太枯燥了,我太没有耐心,三天打鱼两天晒网地,所以我决定,从项目直接开始入手,遇到问题再去恶补基础知识。虽然这样的效率可能有点低,甚至你可能都不知道遇到问题该学习什么知识。
但是自顶向下的项目驱动对我来说更加有动力去学习,如果这个项目我不去做完它,我可能都会睡不着觉,所以我觉得这是最适合我的学习方法,而且现在网络这么发达,真的想要解决一个问题还能办不到吗?

这是我花了大概2天实现的第一个项目
(基本上除了吃饭睡觉都在做,还肝到了3点多)

废话不说直接上图

语音助手视频看这里

在这里插入图片描述
人工智能语音助手主要功能分成下面5个部分:

1、录音

2、语音识别

(将录音内容进行语音识别转成文字)

3、接入图灵机器人

(将文字发送给机器人获得回复)

4、语音合成

(将回复的文字进行语音合成)

5、播放语音

应该很好理解吧,它的核心功能其实是需要一个聊天机器人,才能实现智能回复,这里我们用的是现有的图灵机器人,调用他的接口,不是自己做一个机器人(臣妾做不到)。
同样地,语音识别和语音合成技术也是调用现有的百度语音的接口,至于怎么实现那就太复杂了。

前期准备

· 首先肯定是python的安装和编译器
这个我就不讲了,网上教程特别多
我用的是Pycharm 2021.2.2(最新版本的,也是最近重新开始学习,卸了重装的)

· 其次你要学会第三方模块的安装,这个特别重要
Python很多项目都可以直接通过第三方模块,实现大部分功能
安装方法:
快捷键 Windows+R →输入‘cmd’确定→然后输入:pip install 你要安装的第三模块的名字→Enter(回车)
比如安装: pygame ,就敲入pip install pygame
我已经安装过了,要是还没安装会有下载进度(需要联网下载安装)
安装方法就是其实很多,大家可以自己搜索学习,这里举一个简单的例子
Alt
在这里插入图片描述


源代码

代码将会分成5个小模块和一个整合的代码,
都可以独立运行哦

1、录音

这里需要安装
pip install pyaudio
pip install SpeechRecognition

SpeechRecogintion 是 Python 的一个语音识别框架,
它可以检测语音中的停顿自动终止录音并保存,比 PyAudio 更人性化,很适合语音助手。

import speech_recognition as sr   #pyaudio SpeechRecognition模块def rec(rate=16000):     #从系统麦克风拾取音频数据,采样率为 16000r = sr.Recognizer()with sr.Microphone(sample_rate=rate) as source:print("please say something")  #这里会打印please say something,提示你说话进行录音audio = r.listen(source)   with open("recording.wav", "wb") as f:   #把采集到的音频数据以 wav 格式保存在当前目录下的recording.wav 文件f.write(audio.get_wav_data())return 1rec()  #运行rec函数,录制音频

2、语音识别 (将录音内容进行语音识别转成文字)

首先要去百度AI开放平台,创建API接口应用

在这里插入图片描述
记得不用购买,可以先去领取免费资源在这里插入图片描述在这里插入图片描述
这里的App_ID、Api_Key、Secret_Key代码都会用到

这里需要安装
pip install baidu-aip

from aip import AipSpeechAPP_ID = '25016634'
API_KEY = 'Qsj6XGf0m1ilsV0QwLTmHeiy'
SECRET_KEY = 'Mctl1jHY85Hr3wmTpizLI********'  #这三个输入你自己的接口账号密钥哈,我就不放了,有需要可以找我要client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)def listen():with open('recording.wav', 'rb') as f:    #将录制好的音频文件recording.wav上传至百度语音的服务,返回识别后的文本结果并输出。audio_data = f.read()results = client.asr(audio_data, 'wav', 16000, {'dev_pid': 1537,                     #这里的results是一个字典,文本内容在Key名字为result对应的值,这里我恶补了一点字典的知识})if 'result' in results:print("you said: " + results['result'][0])    #results['result']这个是输出Key名字为result对应的值,也就是我们要的文本,至于后面[0]有什么用我还没搞明白,return results['result'][0]else:                                    print("出现错误,错误代码:" , results['err_no'])   #不存在result就返回错误代码err_nolisten()  #运行listen函数,将录音转成文字

语音识别放回的字典存放在results里面,是一个字典,包含了下面的内容,
result里面就是我们需要的文本了
在这里插入图片描述
我刚开始弄的时候一直报错 KeyErrory,我查了下是字典的Key不存在,也就是没有返回result
所以我加了一个判断,就是如果result不存在,就返回错误代码,我就可以去这个网站看出了什么错误了,当然你也可以直接返回err_msg错误信息(如果你英语很好),然后我发现返回的错误代码是:3305,就找到了对应的问题,重新申请一个或者等第二天再弄就可以了
在这里插入图片描述


3、接入图灵机器人(将文字发送给机器人获得回复)

首先要去图灵机器人创建一个机器人,这个认证比较麻烦,还要拍身份证啥的,人工认证需要1-2天
注册认证进入图灵机器人的控制台创建一个新的聊天机器人,记下分配到的 Apikey,后面代码要用到
在这里插入图片描述
这里需要安装
pip install requests

import requests
import jsonTURING_KEY = "d4c739c4b5b7422ab15dc********"  #这里输入你的机器人Apikey
URL = "http://openapi.tuling123.com/openapi/api/v2"
HEADERS = {'Content-Type': 'application/json;charset=UTF-8'}def robot(text=""):data = {"reqType": 0,"perception": {"inputText": {"text": ""},"selfInfo": {"location": {          #这里输入你的城市"city": "广州","street": "大学城"}}},"userInfo": {"apiKey": 'd4c739c4b5b7422ab15dc********', #这里输入你的机器人Apikey"userId": "123"}}data["perception"]["inputText"]["text"] = textresponse = requests.request("post", URL, json=data, headers=HEADERS)response_dict = json.loads(response.text)result = response_dict["results"][0]["values"]["text"]    #把机器人回复的文字储存在result里print("the AI said: " + result)return resultrobot("你好吗?")    #运行robot函数,与机器人聊天

4、语音合成 (将回复的文字进行语音合成)

这里用到的还是百度AI开放平台的 App_ID、Api_Key、Secret_Key

from aip import AipSpeechAPP_ID = '25016634'
API_KEY = 'Qsj6XGf0m1ilsV0QwLTmHeiy'
SECRET_KEY = 'Mctl1jHY85Hr3wmTpizLI********'client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)def speak(text=""):result = client.synthesis(text, 'zh', 1, {    #这里的参数可以调   zh表示中文'spd': 4,   #语速'vol': 5,   #音量'per': 4,   #类型})if not isinstance(result, dict):with open('audio.mp3', 'wb') as f:   #保存为当前目录下mp3格式的音频:audio.mp3,不建议用wav格式,wav格式后面我用的是pagame播放无法识别f.write(result)f.close()speak('你好啊!')   #运行speak函数,把机器人回复的文字转换成语音

机器人的语速、语调、音量、发声人都可以选择,更改对应参数数值就可以了
在这里插入图片描述


5、播放语音

用到的是pygame第三方库(一听就是做游戏的)
这里需要安装
pip install pagame

import pygamedef play():pygame.mixer.init() # 初始化混音器模块(pygame库的通用做法,每一个模块在使用时都要初始化pygame.init()为初始化所有的pygame模块,可以使用它也可以单初始化这一个模块)pygame.mixer.music.load("D:/C Language/Python/pythonProject/audio_assistant/audio.mp3")  # 加载音乐 ######大坑,注意这里需要使用绝对路径(就是不是默认当前路径,我恶补一下绝对路径和相对路径)pygame.mixer.music.set_volume(0.5)# 设置音量大小0~1的浮点数pygame.mixer.music.play() # 播放音频while pygame.mixer.music.get_busy():  # 在音频播放未完成之前不退出程序passpygame.mixer.music.unload()  #停止加载音频play()

这个看似是最简单的一个,不过却有一个大坑,我弄了好久才搞定。
如果你直接使用 audio.mp3 相对路径,
它在播放完audio.mp3之后,这个audio.mp3就在python里面打开里,我试了好多办法都没办法关闭,
所以它就只能播放一次,后面再播放就会报错,说文件被占用,所以大家记得用绝对路径
不然后面你跟语音助手对话就只能说一次了。



最终代码来了

import speech_recognition as sr
from aip import AipSpeech
import requests
import jsonimport pygame#录音
def rec(rate=16000):r = sr.Recognizer()with sr.Microphone(sample_rate=rate) as source:print("please say something")audio = r.listen(source)with open("recording.wav", "wb") as f:f.write(audio.get_wav_data())return 1#语音识别
APP_ID = '25016634'
API_KEY = 'Qsj6XGf0m1ilsV0QwLTmHeiy'
SECRET_KEY = 'Mctl1jHY85Hr3wmT***********'client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
def listen():with open('recording.wav', 'rb') as f:audio_data = f.read()results = client.asr(audio_data, 'wav', 16000, {'dev_pid': 1537,})if 'result' in results:print("you said: " + results['result'][0])return results['result'][0]else:print("出现错误,错误代码:" , results['err_no'])#调用图灵机器人
TURING_KEY = "1dde879fa943438e9*********"
URL = "http://openapi.tuling123.com/openapi/api/v2"
HEADERS = {'Content-Type': 'application/json;charset=UTF-8'}
def robot(text=""):data = {"reqType": 0,"perception": {"inputText": {"text": ""},"selfInfo": {"location": {"city": "广州","street": "大学城"}}},"userInfo": {"apiKey": '1dde879fa943438e9**********',"userId": "123"}}data["perception"]["inputText"]["text"] = textresponse = requests.request("post", URL, json=data, headers=HEADERS)response_dict = json.loads(response.text)result = response_dict["results"][0]["values"]["text"]print("the AI said: " + result)return result#语音合成
def speak(text=""):result = client.synthesis(text, 'zh', 1, {'spd': 4,'vol': 5,'per': 4,})if not isinstance(result, dict):with open('audio.mp3', 'wb') as f:f.write(result)#播放音频
def play():pygame.mixer.init() pygame.mixer.music.load("D:/C Language/Python/pythonProject/audio_assistant/audio.mp3")  pygame.mixer.music.set_volume(0.5)pygame.mixer.music.play() while pygame.mixer.music.get_busy():passpygame.mixer.music.unload()if __name__ == "__main__":while True:rec()  # 保存录音文件:recording.wavtext = listen()  # 自动打开录音文件recording.wav进行识别,返回 识别的文字存到textif '结束程序' in text:  #这里我设置了一个结束语,说“结束程序”的时候就结束,你也可以改掉breaktext_1 = robot(text)  # 将text中的文字发送给机器人,返回机器人的回复存到text_1speak(text_1)  # 将text_1中机器人的回复用语音输出,保存为audio.mp3文件play() #播放audio.mp3文件

主要就是后面主函数那段代码啦,设置了一个循环可以无限对话下去,还设置了一个“结束程序”

那么我的第一个项目Python智能语音助手就告一段落了!
后面我想学一学树莓派,把这个弄到树莓派里面,再加上一个智能唤醒的功能,做一个独立的 树莓派智能语音助手
你们有什么好的简单项目也可以推荐给我呀!大家一起做,互相请教总比一个人做效率高。


http://chatgpt.dhexx.cn/article/2nbE8SCb.shtml

相关文章

人工智能之语音识别

语言识别的概念 机器翻译用印刷文本作为输入,能清楚地区分单个单词和单词串 。 语音识别用语音作为输入,口语对话与语音信号中语言提取的不同: (1)上下文猜测 (2)肢体语言传达信息 fare | fair…

人工智能:语音识别技术介绍

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&…

AI电话机器人有没有效果?具体的功能都有哪些?

当前人工智能成为科技研发的焦点,AI电话机器人的出现就是为了更好服务企业,提高效率。那么AI电话机器人有没有效果呢?具体的功能都有哪些内容?不妨一起来看看。 ​AI电话机器人是一款适用于电话营销场景的智能语音交互系统。我们…

【第3篇】人工智能(AI)语音测试原理和实践

第1章第2节 人工智能简介 本章首先介绍语音的基本概念及语音的产生原理,然后介绍什么是人工智能语音、人工智能语音交互和人工智能语音测试,最后阐述人工智能语音测试的目的和意义,引领大家走入人工智能语音测试的世界。 目录 第1章第2节 人工…

人工智能之语音识别概述(一)

1. 语音是被研究对象和基本内容 语音识别以语音为研究对象,它是语音信号处理的一个重要研究方向,是模式识别的一个分支,涉及到生理学、心理学、语言学、计算机科学以及信号处理等诸多领域,甚至还涉及到人的体态语言,最…

【第4篇】人工智能(AI)语音测试原理和实践

第1章第3节 AI语音简介 本章首先介绍语音的基本概念及语音的产生原理,然后介绍什么是人工智能语音、人工智能语音交互和人工智能语音测试,最后阐述人工智能语音测试的目的和意义,引领大家走入人工智能语音测试的世界。 目录 第1章第3节 人工智…

语音人工智能的简单介绍

语音人工智能的简单介绍 人工智能 (AI) 已将合成语音从单调的自动电话和几十年前的 GPS 导航系统转变为智能手机和智能扬声器中虚拟助手的优美音调。 对于组织来说,为其特定行业和领域使用定制的最先进的语音 AI 技术从未如此简单。 语音 AI 被用于为虚拟助手提供…

(python)生产者消费者模型

生产者消费者模型当中有两大类重要的角色,一个是生产者(负责造数据的任务),另一个是消费者(接收造出来的数据进行进一步的操作)。 为什么要使用生产者消费者模型? 在并发编程中,如果…

【生产者消费者模型】

Linux生产者消费者模型 生产者消费者模型生产者消费者模型的概念生产者消费者模型的特点生产者消费者模型优点 基于BlockingQueue的生产者消费者模型基于阻塞队列的生产者消费者模型模拟实现基于阻塞队列的生产消费模型 生产者消费者模型 生产者消费者模型的概念 生产者消费者…

【Linux】生产者消费者模型 - 详解

目录 一.生产者消费者模型概念 1.为何要使用生产者消费者模型 2.生产者消费者之间的关系 3.生产者消费者模型的优点 二.基于阻塞队列的生产消费模型 1.在阻塞队列中的三种关系 2.BlockingQueue.hpp - 阻塞队列类 3.LockGurad.hpp - RAII互斥锁类 4.Task.hpp - 在阻塞队…

操作系统 —— 生产者消费者模型

文章目录 1. 生产者消费者模型的理解1.1 串行的概念1.2 并行的概念1.3 简单总结: 2. 基于阻塞队列(block queue)实现此模型2.1 阻塞队列的实现2.2 使用阻塞队列,单线程2.3 使用阻塞队列,多线程2.4 总结:阻塞队列实现的消费者生产者…

生产者消费者案例

目录 前言一、案例描述二、创建快递柜三、创建生产者类四、创建消费者类五、测试类总结 前言 生产者消费者模式属于一种经典的多线程协作的模式,弄清生产者消费者问题能够让我们对于多线程编程有更深刻的理解,下面,为大家分享一个生产者消费…

JAVA多线程之生产者消费者模型

生产者消费者模型 所谓的生产者消费者模型,是通过一个容器来解决生产者和消费者的强耦合问题。通俗的讲,就是生产者在不断的生产,消费者也在不断的消费,可是消费者消费的产品是生产者生产的,这就必然存在一个中间容器&…

Linux生产者消费者模型

文章目录 生产者消费者模型生产者消费者模型的概念生产者消费者模型的特点生产者消费者模型优点 基于BlockingQueue的生产者消费者模型基于阻塞队列的生产者消费者模型模拟实现基于阻塞队列的生产消费模型 生产者消费者模型 生产者消费者模型的概念 生产者消费者模式就是通过一…

生产者消费者模型你知道多少

背景 进入正题之前先说点故事。从最开始学java的那里开始:我是从08年下半年开始学Java,在《我的六年程序之路》中提到了一些。当时比较简单,每天看尚学堂的视频(对于初学者而言看视频好一些。),然后写代码。…

生产者消费者模型详解

生产者消费者模型 文章目录 生产者消费者模型什么是生产者消费者模型基于BlockingQueue的生产者消费者模型单生产者单消费者模型多生产者多消费者模型 什么是生产者消费者模型 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接…

Python -- 生产者消费者

代码 # -*- coding: utf-8 -*- # Author : markadc # Time : 2021/4/14 11:43from queue import Queue import time import threading# maxsize: 指定队列最大长度 q Queue(maxsize10)# 生产者 def product(name):count 0while True:# 只要队列没有满,就一直…

生产者与消费者

生产者和消费者 目录 生产者和消费者1.什么是生产者和消费者2.生产者和消费者(不加唤醒机制)3.生产者和消费者(加唤醒机制)4.解决虚假唤醒5.使用lock锁6.面试题 1.什么是生产者和消费者 ​ 在日常生活中,我们去商店买东西,我们就是消费者,商…

三种方式实现生产者-消费者模型

前言 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的…

生产者消费者模型

目录 一、生产者消费者模型的概念 二、生产者消费者模型的特点 三、生产者消费者模型优点 四、基于BlockingQueue的生产者消费者模型 4.1 基本认识 4.2 模拟实现 五、POSIX信号量 5.1 信号量概念 5.2 信号量函数 5.2.1 初始化信号量 5.2.2 销毁信号量 5.2.3 等待信…