先上图
本程序使用的软件:
PyCharm,Designer(PyQt5界面编辑软件)
步骤
1.使用designer绘制出程序界面的图,新建文件选择main windows
使用的控件:
按键
文本框
Line Edit
过程条
Priogress Bar
这里是装饰的一个作用
布局好了以后可以自己调节各个控件字体的样式,点击你需要调整的控件,在designer的右边的属性编辑器选择。
字体:
这里我将第一个文本显示改成了只读形式:
布局完成后保存到文件夹里,是一个ui文件,之后需要打开cmd,通过cd指令进入到ui文件所在的文件夹里,使用ui转py文件的指令,其中name是文件的名字
cmd的cd指令,进入指定文件夹,复制所在目录即可。
pyuic5 -o name.py name.ui
之后用pycharm打开生成的py文件,在文件夹内新建一个main程序,实现ui与程序的分离
代码如下,其中ty包是我生成的py文件,也就是你自定义的name。
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
import tyif __name__ == '__main__':app = QApplication(sys.argv)MainWindow = QMainWindow()ui = ty.Ui_mainWindow()ui.setupUi(MainWindow)MainWindow.show()sys.exit(app.exec_())
这时运行程序可以看到界面显示出来。
1.在main程序下定义一个录音的函数
程序如下,dir_name是你的项目所在路径
def rec():dir_name = 'D:\\xun\\'CHUNK = 1024FORMAT = pyaudio.paInt16CHANNELS = 1RATE = 14400RECORD_SECONDS = 3.5file_name = "123.wav"p = pyaudio.PyAudio()stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)frames = []for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):data = stream.read(CHUNK)frames.append(data)stream.stop_stream()stream.close()p.terminate()wf = wave.open(dir_name + file_name, 'wb')wf.setnchannels(CHANNELS)wf.setsampwidth(p.get_sample_size(FORMAT))wf.setframerate(RATE)wf.writeframes(b''.join(frames))wf.close()ui.lineEdit_2.setText("我已经听到了,请点击处理按键")
录音函数定义好以后将第一个按键与该函数绑定起来,注意这里绑定的函数不需要括号。
MainWindow.show()后加上
ui.pushButton.clicked.connect(partial(rec))
2.语音识别技术由百度AI提供网址在这
登录以后找到控制台,找到语音技术的模块,创建一个新应用,之后可以看到这个新应用的AppID,API Key,Secret Key
在此图的右下角有领取免费资源,点进去领取短语音识别,领完后大概半小时就能够使用。
创建应用完成后,在python程序里安装baidu-aip的包,
在main程序下定义一个函数,第7行里的是你的录音文件的路径和一个读取文件的函数
def make():APP_ID = '你的id'API_KEY = '你的key'SECRET_KEY = '你的secret key'aipSpeech = AipSpeech(APP_ID, API_KEY, SECRET_KEY)q=aipSpeech.asr(get_file_content('D:\\xun\\123.wav'), 'wav', 16000, {'dev_pid': 1537,})if q.get('result'):ui.lineEdit_2.setText(q.get('result')[0])fun(q)
定义读取文件函数
def get_file_content(filePath):with open(filePath, 'rb') as fp:return fp.read()
make()函数与第二个按键绑定
ui.pushButton_2.clicked.connect(partial(make))
3.接下来需要一个根据处理出来的内容来判断执行什么样的操作的函数,此部分为def fun(q)。
其中ui.lineEdit_3.setText是文本控件的显示函数。
if q.get('result')[0]=='你好。':ui.lineEdit_3.setText("你好,很高兴为您服务。")elif q.get('result')[0]=='打开QQ。':ui.lineEdit_3.setText("正在为您打开QQ。")auto.open_app_qq()elif q.get('result')[0] == '播放音乐。':ui.lineEdit_3.setText('爱了吗?')auto.music()elif q.get('result')[0] == '':ui.lineEdit_3.setText("可能是声音太小。")else:ui.lineEdit_3.setText("我还不明白你说的。")
4.这里我重新写了个库auto,用来存放一些功能的函数,如果要打开qq,需要找到qq的exe文件的路径,使用os库的命令来打开,其他同理
import osdef open_app_qq():dir1 = r'D:\Program Files\Tencent\QQ\Bin\QQScLauncher.exe'os.startfile(dir1)def music():dir2=r'"D:\xun\music.mp3"'os.startfile(dir4)
整体代码如下:各个函数里面我就没添加进来,上面都有。
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from functools import partial
import ty
from aip import AipSpeech
import pyaudio
import wave
import autodef fun(q):def rec():def make():def get_file_content(filePath):if __name__ == '__main__':app = QApplication(sys.argv)MainWindow = QMainWindow()ui = ty.Ui_mainWindow()ui.setupUi(MainWindow)MainWindow.show()ui.pushButton.clicked.connect(partial(rec))ui.pushButton_2.clicked.connect(partial(make))sys.exit(app.exec_())
运行以后点击启动按键,对麦克风说话,给出提示后点击处理就能执行你所说的功能了。