Python-懒人必备-语音小助手

又是复习学习熟悉语法的一天。

import speech_recognition as sr
from os import path
from aip import AipSpeech
import sys, os
from pynput.keyboard import Controller,Key,Listener
from tkinter import *
import multiprocessing as mp
AUDIO_FILE = path.join(path.dirname(path.realpath(__file__)), "test.wav")
audio_order=path.join(path.dirname(path.realpath(__file__)), "order.txt")

list=[]#将命令添加至列表
read_dict={}#本地txt命令转换为字典
""" 你的 APPID AK SK """
APP_ID = '*******'
API_KEY = '*******'
SECRET_KEY = '*******'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)


#电脑麦克风录音
def reco():
    r = sr.Recognizer()
    try:
        with sr.Microphone(sample_rate=16000) as source:
            print("请朗读语音命令")
            audio = r.listen(source,timeout=3)
        with open(AUDIO_FILE,'wb') as f:
            f.write(audio.get_wav_data())
    except:
        print('暂无录音内容')

#百度语音识别
def asr(filePath):
    try:
        with open(filePath, 'rb') as fp:
            music=fp.read()
            result=client.asr(music, 'wav', 16000, {'dev_pid': 1536,})
            list.append(result['result'][0])
            return result['result'][0]
    except:
        print('无法识别口令有误')
        list.append(1)

#获取指令
def get_order():
  fileRead=open(audio_order,'r',encoding='utf-8')
  lines=fileRead.readlines()
  for line in lines:
    line_list=line.split(',')#每行按逗号分隔成列表
    id=line_list[0]#取到id
    path=line_list[1]#取到name
    read_dict[id]=path#此处关键产生键值对,其中key是id

#检测按键
def on_press(key):
    try:
        if key.char=='c':
            reco()
            if asr(AUDIO_FILE) in read_dict:
                print('正在打开')
                os.system(read_dict.get(list[0]))
                del list[0]
                os.remove(AUDIO_FILE)
                print('打开完毕')
            else:
                print('错误指令重新聆听')
                del list[0]
    except AttributeError:
        print("正在按压:",format(key))

# 开始监听
def start_listen():
    with Listener(on_press=on_press) as listener:
        get_order()
        print('等待指令')
        listener.join()
#进程处理
def process():
	global p
	p = mp.Process(target=start_listen)
	p.start()

if __name__ == "__main__":
    app=Tk()
    app.title('语音小助手')
    app.geometry('250x150')
    label=Label(app,text='C键唤醒,自动聆听').pack()
    button_run=Button(app,text='开启聆听',command=process,width=10,height=10).pack()
    app.mainloop()
    print('退出')
    p.terminate()#进程终止

在这里插入图片描述
order.txt(example)

打开QQ,D:\TIMqq\Bin\QQScLauncher.exe
打开音乐,F:\QQ音乐\QQMusic\QQMusic.exe
打开腾讯视频,D:\QQLive\QQLive.exe
打开QQ音乐,F:\QQ音乐\QQMusic\QQMusic.exe

实现功能:c键唤起,聆听3秒,可以实现在任何界面下的唤醒,无弹窗,指令可以写在当前文件夹的order.txt里面,英文逗号隔开,当然也可以实现一些其他功能而非打开应用。

发布了71 篇原创文章 · 获赞 204 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_44198436/article/details/103267469
今日推荐