最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)語音啟動電腦應(yīng)用程序

 更新時間:2025年03月08日 09:48:15   作者:Atlas Shepherd  
這篇文章主要為大家詳細(xì)介紹了如何使用Python實現(xiàn)語音啟動電腦應(yīng)用程序功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一學(xué)習(xí)一下

實現(xiàn)思路

osk模型進(jìn)行輸入語音轉(zhuǎn)換

txt字典導(dǎo)航程序路徑

pyttsx3引擎進(jìn)行語音打印輸出

關(guān)鍵詞=程序路徑

完整代碼

import os
import json
import queue
import sounddevice as sd
from vosk import Model, KaldiRecognizer
import subprocess
import time
import pyttsx3
import threading
 
# 初始化 pyttsx3 引擎
engine = pyttsx3.init()
engine.setProperty('rate', 150)    # 設(shè)置語速
engine.setProperty('volume', 1.0)  # 設(shè)置音量
 
# 加載Vosk模型
model_path = r"D:\daku\yuyinshibie\vosk-model-small-cn-0.22"
if not os.path.exists(model_path):
    print(f"模型路徑不存在: {model_path}")
    engine.say(f"模型路徑不存在: {model_path}")
    engine.runAndWait()
    exit(1)
 
# 讀取字典文件,格式為 "命令=程序路徑"
def load_app_dict(file_path):
    app_dict = {}
    if not os.path.exists(file_path):
        print(f"字典文件不存在: {file_path}")
        engine.say(f"字典文件不存在: {file_path}")
        engine.runAndWait()
        return app_dict
 
    with open(file_path, 'r', encoding='utf-8') as file:
        for line in file:
            parts = line.strip().split('=')
            if len(parts) == 2:
                keys, value = parts
                # 處理可能存在的別名情況,例如 "微信,weixin"
                for key in keys.split(','):
                    app_dict[key.strip()] = value.strip()
    return app_dict
 
# 啟動應(yīng)用程序
def launch_application(app_name, app_dict):
    if app_name in app_dict:
        app_path = app_dict[app_name]
        response = f"正在啟動 {app_name}..."
        say(response)
        subprocess.Popen(app_path)
        time.sleep(2)  # 等待2秒再繼續(xù)監(jiān)聽
    else:
        response = f"找不到與 '{app_name}' 對應(yīng)的應(yīng)用程序。"
        say(response)
 
# 定義一個函數(shù)用于語音輸出,并在說的時候暫停監(jiān)聽
def say(text):
    global stream, callback_func
    if stream is not None:
        with stream_lock:
            stream.callback = None  # 移除回調(diào)函數(shù)以暫停監(jiān)聽
            stream.stop()           # 暫停音頻流
    engine.say(text)
    engine.runAndWait()
    if stream is not None:
        with stream_lock:
            stream.start()          # 恢復(fù)音頻流
            stream.callback = callback_func  # 重新設(shè)置回調(diào)函數(shù)
 
# 初始化模型和識別器
model = Model(model_path)
rec = KaldiRecognizer(model, 16000)
 
q = queue.Queue()
 
last_partial_result = ""
last_full_command = ""
 
stream_lock = threading.Lock()
stream = None
callback_func = None
 
def callback(indata, frames, time, status):
    if status:
        print(status, file=sys.stderr)
    q.put(bytes(indata))
 
# 主程序
if __name__ == "__main__":
    dict_file = r"D:\daku\yuyinshibie\zidian.txt"  # 字典文件路徑
    app_dict = load_app_dict(dict_file)
 
    try:
        # 提前初始化音頻流
        callback_func = callback
        stream = sd.RawInputStream(samplerate=16000, blocksize=8000, dtype='int16',
                                  channels=1, callback=callback)
        stream.start()
 
        say("請說:")
        while True:
            data = q.get()
            if rec.AcceptWaveform(data):
                result = json.loads(rec.Result())
                command = result['text'].strip()
                if command and command != last_full_command:
                    print(f"你說的是: {command}")
                    say(f"你說的是: {command}")
                    if "打開" in command:
                        app_to_open = command.replace("打開", "").strip()
                        launch_application(app_to_open, app_dict)
                    last_full_command = command
            elif rec.PartialResult():
                partial_result = json.loads(rec.PartialResult())['partial']
                if partial_result and "打開" in partial_result and partial_result != last_partial_result:
                    print(f"部分結(jié)果: {partial_result}")
                    say(f"部分結(jié)果: {partial_result}")
                    last_partial_result = partial_result
    except KeyboardInterrupt:
        say("\n退出程序。")
    finally:
        if stream is not None:
            stream.stop()
            stream.close()

關(guān)鍵詞部分,為了識別準(zhǔn)確以及出現(xiàn)諧音內(nèi)容可以增添多個關(guān)鍵詞使用,作為分割

字典路徑如果出現(xiàn)中文字符有可能會報錯!

代碼意義不大,如果考慮深入:可以嘗試增加快捷鍵,以及相關(guān)應(yīng)用接口可以更好控制

上班族打開電腦i第一件事情是啟動相關(guān)應(yīng)用,同樣可以嘗試多應(yīng)用編組啟動

到此這篇關(guān)于Python實現(xiàn)語音啟動電腦應(yīng)用程序的文章就介紹到這了,更多相關(guān)Python語音啟動電腦內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python Django的安裝配置教程圖文詳解

    Python Django的安裝配置教程圖文詳解

    Django是一個開放源代碼的Web應(yīng)用框架,由Python寫成,Django是重量級選手中最有代表性的一位。許多成功的網(wǎng)站和APP都基于Django。這篇文章主要介紹了Python Django的安裝配置,需要的朋友可以參考下
    2019-07-07
  • Python中實現(xiàn)對list做減法操作介紹

    Python中實現(xiàn)對list做減法操作介紹

    這篇文章主要介紹了Python中實現(xiàn)對list做減法操作介紹,需要的朋友可以參考下
    2015-01-01
  • python發(fā)送告警郵件腳本

    python發(fā)送告警郵件腳本

    這篇文章主要介紹了python發(fā)送告警郵件腳本的配置方法,zabbix通過python腳本發(fā)告警郵件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python使用pymongo模塊操作MongoDB的方法示例

    Python使用pymongo模塊操作MongoDB的方法示例

    這篇文章主要介紹了Python使用pymongo模塊操作MongoDB的方法,結(jié)合實例形式分析了Python基于pymongo模塊連接MongoDB數(shù)據(jù)庫以及增刪改查與日志記錄相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • Python中的"沒有那個文件"錯誤(FileNotFoundError)的解決方法詳解

    Python中的"沒有那個文件"錯誤(FileNotFoundError)的解決方法詳解

    在Python編程中,遇到“沒有那個文件”錯誤(FileNotFoundError)是常見的問題之一,本文將詳細(xì)分析這個錯誤的原因,并提供實用的解決方案和指南,有需要的可以參考下
    2024-11-11
  • python刪除指定目錄下的文件和文件夾的實現(xiàn)

    python刪除指定目錄下的文件和文件夾的實現(xiàn)

    在日常的辦公中,我們可以利用Python批量刪除文件和文件夾,本文就來介紹一下python刪除指定目錄下的文件和文件夾的實現(xiàn),感興趣的可以了解一下
    2024-01-01
  • 對DJango視圖(views)和模版(templates)的使用詳解

    對DJango視圖(views)和模版(templates)的使用詳解

    今天小編就為大家分享一篇對DJango視圖(views)和模版(templates)的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • openCV顯著性檢測的使用

    openCV顯著性檢測的使用

    顯著性檢測就是使用圖像處理技術(shù)和計算機(jī)視覺算法來定位圖片中最“顯著”的區(qū)域,本文主要介紹了openCV顯著性檢測的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 最新評論

    巨野县| 清丰县| 彝良县| 德安县| 离岛区| 固原市| 鄯善县| 方正县| 大悟县| 泰州市| 普洱| 望谟县| 鹤峰县| 正宁县| 仁寿县| 安新县| 曲松县| 千阳县| 方城县| 海兴县| 鸡东县| 黄冈市| 鸡泽县| 双流县| 衡阳县| 屏东市| 惠州市| 邵东县| 社旗县| 宾川县| 綦江县| 玛纳斯县| 若尔盖县| 尉氏县| 米林县| 霍州市| 五莲县| 塘沽区| 嘉兴市| 河南省| 永州市|