如何使用Python建立AI虛擬助手

pythonlaodi發表於2020-10-19

介紹

虛擬助手(也稱為AI助手或數字助手)是一款應用程式,可以理解自然語言的語音命令併為使用者完成任務。

我們應該都知道什麼是虛擬助手。開啟手機並說“ Ok Google”或“ Hey Siri”。Google助手,Siri,Alexa都是虛擬助手的示例。

演示和編碼YouTube視訊:

內容

  1. 我們要做什麼
  2. 程式碼說明
  3. 完整的程式碼
  4. GitHub儲存庫
  5. 你如何貢獻
  6. 參考文獻

1.我們要做什麼

我們的虛擬助手將能夠執行以下操作:

天氣預報,啟動遊戲,啟動Windows應用程式,開啟網站,告訴你幾乎你所要求的一切,告訴你日期和時間,問候,新聞等。

你可以與膝上型電腦的麥克風/控制檯進行互動。助手生成的響應將顯示在控制檯上,或者通過揚聲器直接說出來。

未來的可能:自拍,與人聊天更多,等等。

2. 程式碼說明

讓我們一起來建立自己的虛擬助手。

  • 所有程式碼都可以在我的GitHub上找到。
  • 我的頻道上還提供了演示YouTube視訊和程式碼YouTube視訊。
  • 所需的連結和軟體包如下所述。
  • 如果你願意分享,我將不勝感激。

2.1 所需的軟體包和庫

pip install JarvisAI

這是我建立的最新虛擬助手模組。它提供任何虛擬助手的基本功能。前提條件是Python版本 > 3.6。

用法和功能

安裝庫後,你可以匯入模組

import JarvisAI
obj = JarvisAI.JarvisAssistant()
response = obj.mic_input()
print(response)

功能通過方法名稱清除。例如,你可以檢查程式碼。

  1. mic_input
  2. text2speech
  3. shutdown
  4. website_opener
  5. send_mail
  6. tell_me_date
  7. tell_me_time
  8. launch_any_app
  9. weather
  10. news
  11. tell_me

在這裡閱讀更多關於它的資訊

你也可以在這裡為這個儲存庫做貢獻。

2.2 編碼

導包

import JarvisAI
import re
import pprint
import random

根據文件建立 JarvisAI的物件

obj = JarvisAI.JarvisAssistant()

我們已經建立了這個“t2s(text)”函式。這會將任何文字轉換為語音。我們將使用(呼叫)此函式的整個程式從文字產生語音。

def t2s(text):
    obj.text2speech(text)

我們希望不斷聽取使用者的輸入,因此此“ mic_input() ”將嘗試從計算機的麥克風中連續獲取音訊。它將處理音訊並在“ res”變數中返回文字。我們可以使用此“ res”變數根據使用者輸入執行某些操作。

while True:
    res = obj.mic_input()

天氣預報:我們使用正規表示式來匹配使用者輸入中的查詢。如果在使用者輸入“ res”中找到“天氣”或“溫度”,則我們要進行天氣預報。無需從頭開始編寫東西,只需呼叫“ obj.weather(city = city)”即可。

你只需要從使用者輸入中獲取城市並將其傳遞給天氣功能即可。它會告訴你你所在城市的天氣預報。

我們可以將此返回的“ weather_res”傳遞到“ t2s(weather_res)”,以從“ weather_res”字串中產生語音。

while True:
    res = obj.mic_input()

if re.search('weather|temperature', res):
        city = res.split(' ')[-1]
        weather_res = obj.weather(city=city)
        print(weather_res)
        t2s(weather_res)

新聞:與上述類似,匹配使用者輸入“ res”中的“新聞”一詞。如果匹配,則呼叫“ obj.news”。

它將返回15條新聞作為字串列表。因此,我們可以將新聞作為“ news_res [0]”來獲取,並將其傳遞給“ t2s(news_res [0])”。

while True:
    res = obj.mic_input()

if re.search('news', res):
        news_res = obj.news()
        pprint.pprint(news_res)
        t2s(f"I have found {len(news_res)} news. You can read it. Let me tell you first 2 of them")
        t2s(news_res[0])
        t2s(news_res[1])

講述幾乎所有內容:它將從維基百科中獲取前500個字元,並將它們作為字串返回。你可以使用'obj.tell_me(topic)'。

你需要將“主題”傳遞給“ tell_me(topic = topic)”。主題是你想知道的關鍵字。

while True:
    res = obj.mic_input()

if re.search('tell me about', res):
        topic = res.split(' ')[-1]
        wiki_res = obj.tell_me(topic)
        print(wiki_res)
        t2s(wiki_res)

日期和時間:它將告訴你係統的當前日期和時間。

while True:
    res = obj.mic_input()

if re.search('date', res):
        date = obj.tell_me_date()
        print(date)
        print(t2s(date))

if re.search('time', res):
        time = obj.tell_me_time()
        print(time)
        t2s(time)

開啟任何網站:此'obj.website_opener(domain)'將為你開啟任何網站。你只需要從使用者輸入中獲取domain,然後傳遞給'obj.website_opener(domain)'。它將在你的預設瀏覽器中開啟網站。

while True:
    res = obj.mic_input()

if re.search('open', res):
        domain = res.split(' ')[-1]
        open_result = obj.website_opener(domain)
        print(open_result)

啟動任何應用程式, 遊戲等 :

這有點棘手,在“ obj.launch_any_app(path_of_app = path)”中,你需要傳遞“ .exe”檔案路徑的函式。

因此,我們建立了“ dict_app”字典,其中以“應用名稱”作為鍵,以“路徑”作為值。我們可以使用此“ dict_app”進行查詢。如果字典中存在使用者輸入的應用程式,那麼我們將通過獲取路徑來開啟它。

以下示例僅適用於Chrome和Epic Games。

while True:
    res = obj.mic_input()

if re.search('launch', res):
        dict_app = {
            'chrome': 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe',
            'epic games': 'C:\Program Files (x86)\Epic Games\Launcher\Portal\Binaries\Win32\EpicGamesLauncher.exe'
        }

        app = res.split(' ', 1)[1]
        path = dict_app.get(app)
if path is None:
            t2s('Application path not found')
            print('Application path not found')
else:
            t2s('Launching: ' + app)
            obj.launch_any_app(path_of_app=path)

問候和聊天,你現在可以像這樣建立問候和聊天。

我正在 https://pypi.org/project/Jarv... 上使用Tensorflow新增聊天功能。你可以為使其更好而做出貢獻。

while True:
    res = obj.mic_input()

if re.search('hello', res):
        print('Hi')
        t2s('Hi')

if re.search('how are you', res):
        li = ['good', 'fine', 'great']
        response = random.choice(li)
        print(f"I am {response}")
        t2s(f"I am {response}")

if re.search('your name|who are you', res):
        print("My name is Jarvis, I am your personal assistant")
        t2s("My name is Jarvis, I am your personal assistant")

問“ 你能做什麼 ?”:在這裡,我們只是使用“ obj.t2s()”來發表講話。如果你瞭解python,則可以輕鬆理解以下程式碼

while True:
    res = obj.mic_input()

if re.search('what can you do', res):
        li_commands = {
            "open websites": "Example: 'open youtube.com",
            "time": "Example: 'what time it is?'",
            "date": "Example: 'what date it is?'",
            "launch applications": "Example: 'launch chrome'",
            "tell me": "Example: 'tell me about India'",
            "weather": "Example: 'what weather/temperature in Mumbai?'",
            "news": "Example: 'news for today' ",
        }
        ans = """I can do lots of things, for example you can ask me time, date, weather in your city,
        I can open websites for you, launch application and more. See the list of commands-"""
        print(ans)
        pprint.pprint(li_commands)
        t2s(ans)

3.完整的程式碼

import JarvisAI
import re
import pprint
import random

obj = JarvisAI.JarvisAssistant()


def t2s(text):
    obj.text2speech(text)


while True:
    res = obj.mic_input()

    if re.search('weather|temperature', res):
        city = res.split(' ')[-1]
        weather_res = obj.weather(city=city)
        print(weather_res)
        t2s(weather_res)

    if re.search('news', res):
        news_res = obj.news()
        pprint.pprint(news_res)
        t2s(f"I have found {len(news_res)} news. You can read it. Let me tell you first 2 of them")
        t2s(news_res[0])
        t2s(news_res[1])

    if re.search('tell me about', res):
        topic = res.split(' ')[-1]
        wiki_res = obj.tell_me(topic)
        print(wiki_res)
        t2s(wiki_res)

    if re.search('date', res):
        date = obj.tell_me_date()
        print(date)
        print(t2s(date))

    if re.search('time', res):
        time = obj.tell_me_time()
        print(time)
        t2s(time)

    if re.search('open', res):
        domain = res.split(' ')[-1]
        open_result = obj.website_opener(domain)
        print(open_result)

    if re.search('launch', res):
        dict_app = {
            'chrome': 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe',
            'epic games': 'C:\Program Files (x86)\Epic Games\Launcher\Portal\Binaries\Win32\EpicGamesLauncher.exe'
        }

        app = res.split(' ', 1)[1]
        path = dict_app.get(app)
        if path is None:
            t2s('Application path not found')
            print('Application path not found')
        else:
            t2s('Launching: ' + app)
            obj.launch_any_app(path_of_app=path)

    if re.search('hello', res):
        print('Hi')
        t2s('Hi')

    if re.search('how are you', res):
        li = ['good', 'fine', 'great']
        response = random.choice(li)
        print(f"I am {response}")
        t2s(f"I am {response}")

    if re.search('your name|who are you', res):
        print("My name is Jarvis, I am your personal assistant")
        t2s("My name is Jarvis, I am your personal assistant")

    if re.search('what can you do', res):
        li_commands = {
            "open websites": "Example: 'open youtube.com",
            "time": "Example: 'what time it is?'",
            "date": "Example: 'what date it is?'",
            "launch applications": "Example: 'launch chrome'",
            "tell me": "Example: 'tell me about India'",
            "weather": "Example: 'what weather/temperature in Mumbai?'",
            "news": "Example: 'news for today' ",
        }
        ans = """I can do lots of things, for example you can ask me time, date, weather in your city,
        I can open websites for you, launch application and more. See the list of commands-"""
        print(ans)
        pprint.pprint(li_commands)
        t2s(ans)

4. Github倉庫

你可以隨意使用我的程式碼。如果你喜歡我的作品,請為其點亮star;如果你喜歡,請在YouTube上訂閱。

只需克隆儲存庫

相關文章