Рубрики
Без рубрики

Построить виртуальный помощник с Python | Автоматизировать задачи

ЗАМЕТКА: Эта статья, опубликованная год назад, и некоторые зависимости могут вызвать ошибки. ДМ мне в Instagram Если … помечен с питоном, начинающими, карьерой, производительностью.

ЗАМЕТКА: Эта статья, опубликованная год назад, и некоторые зависимости могут вызвать ошибки. ДМ мне в Instagram Если вы столкнулись с ошибками, и я отправлю вам начальную конфигурацию этого файла.

https://www.instagram.com/coderasha/

Что случилось Dev Сеть?

YouTube канал с видеоуправлениями – Обратный Python YouTube

В этой лаборатории мы собираемся построить Demo Tals из межзвездного фильма с Python. TALS может помочь вам автоматизировать ваши задачи, такие как поисковые видео в YouTube и играть в них, отправлять электронные письма, открытые сайты, поисковые материалы в Википедии и прочитать их, информируйте прогноз погоды в вашей стране, приветствия и многое другое. Создание TALS Вы увелитите свои знания Python и узнаете много полезных библиотек/инструментов. Я удачу исходный код в мой репозиторий GIT, поэтому не стесняйтесь вносить свой вклад и улучшить функциональность TALS

Давайте начнем с создания виртуальной среды и создания базовой аудиосистемы TALS.

mkdir TARS
cd TARS
virtualenv venv

Чтобы активировать команду VINV RUN ниже

. venv/bin/activate

Что такое виртуальная среда?

После того, как вы активируете VINV, нам нужно установить основные библиотеки со следующими командами:

pip3 install gTTS
pip3 install SpeechRecognition
pip3 install PyAudio
pip3 install pygame

GTTS (Google Text-To-Relect) – это библиотека Python и CLI для интерфейса с помощью API Google Translate’s To To-api. Этот модуль помогает преобразовать текст строки в устный текст и может быть сохранен как .mp3

Распознавание речи является важной особенностью в нескольких приложениях, используемых, таких как домашняя автоматизация, искусственный интеллект и т. Д. Признавая речи нуждается в аудиовходе, и Preciprecognition делает его действительно простым для получения этого ввода. Вместо того, чтобы строить сценарии с нуля для доступа к микрофонам и процессам аудиофайлов, PrecialeRecognition приведет вас за несколько минут.

Чтобы получить доступ к вашему микрофону с помощью Computrecognizer, вам придется установить Pyudio упаковка

Pygame Это кроссплатформенный набор модулей Python, предназначенный для написания видеоигр. Он включает в себя компьютерную графику и звуковые библиотеки, предназначенные для использования с языком программирования Python.

Теперь давайте построим голосовую систему TALS:

from gtts import gTTS
import speech_recognition as sr
from pygame import mixer

def talk(audio):
    print(audio)
    for line in audio.splitlines():
        text_to_speech = gTTS(text=audio, lang='en-uk')
        text_to_speech.save('audio.mp3')
        mixer.init()
        mixer.music.load("audio.mp3")
        mixer.music.play()

Как вы видите, мы проезжаем аудио в качестве аргумента, чтобы позволить Тарсам говорить. Например, разговаривать («Эй, я множество! Могу я чем-нибудь помочь?’) Программа будет включать в себя эти линии с помощью метода сплитлина (). Этот метод используется для разделиния линий на границах линии. Проверьте Сплитлины () для большего. Затем GTTS будет обрабатывать, чтобы преобразовать все эти тексты в речь. Параметр Text определяет текст, который нужно прочитать, и Lang определяет язык (IETF Language Tag), чтобы прочитать текст. После завершения петли Save () метод записывает результат к файлу.

pygame.mixer это модуль для загрузки и воспроизведения звуков и должен быть инициализирован перед его использованием.

Хорошо! Теперь давайте создадим функцию, которая будет слушать команды.

def myCommand():
    #Initialize the recognizer 
    r = sr.Recognizer()

    with sr.Microphone() as source:
        print('TARS is Ready...')
        r.pause_threshold = 1
        #wait for a second to let the recognizer adjust the  
        #energy threshold based on the surrounding noise level 
        r.adjust_for_ambient_noise(source, duration=1)
        #listens for the user's input
        audio = r.listen(source)

    try:
        command = r.recognize_google(audio).lower()
        print('You said: ' + command + '\n')

    #loop back to continue to listen for commands if unrecognizable speech is received
    except sr.UnknownValueError:
        print('Your last command couldn\'t be heard')
        command = myCommand();

    return command

В этой функции мы используем библиотеку повторений. Он действует как обертка для нескольких популярных речевых API и, таким образом, чрезвычайно гибким. Один из них – API Google Web Region-API-поддерживает клавишу API по умолчанию, которая жестко закодирована в библиотеку PreaTyReCognition. Это означает, что вы можете снять ноги без необходимости подписаться на сервис.

Чтобы иметь возможность работать со своим собственным голосом с распознаванием речи, вам нужен пакет Pyaudio. Как и распознаватель для аудиофайлов, нам понадобится микрофон для речевых данных в реальном времени.

Вы можете захватить вход от микрофона с использованием метода прослушивания () класса распознавания внутри блока с блоком. Этот метод принимает аудиоизок в качестве первого аргумента и записывающих записей из источника до обнаружения тишины.

Попробуйте сказать ваши команды в месте тишины (с меньшим фоновым шумом) иначе смолы могут спутать.

Посмотрите Окончательное руководство по признанию речи с Python

import random

def tars(command):
    errors=[
        "I don\'t know what you mean!",
        "Excuse me?",
        "Can you repeat it please?",
    ]

    if 'Hello' in command:
        talk('Hello! I am TARS. How can I help you?')

    else:
        error = random.choice(errors)
        talk(error)


talk('TARS is ready!')


while True:
    assistant(myCommand())

После того, как вы запустите программу, многие, начнут говорить с вами, говоря: «Тарс готов!» И продолжать слушать ваши команды, пока не остановите программу. Начните с того, что «привет»:)

Когда TALS не получила команду, мы обратимся с ошибкой случайными предложениями.

Вот полный код основной структуры:

from gtts import gTTS
import speech_recognition as sr
from pygame import mixer
import random
def talk(audio):
    print(audio)
    for line in audio.splitlines():
        text_to_speech = gTTS(text=audio, lang='en-uk')
        text_to_speech.save('audio.mp3')
        mixer.init()
        mixer.music.load("audio.mp3")
        mixer.music.play()

def myCommand():
    #Initialize the recognizer
    #The primary purpose of a Recognizer instance is, of course, to recognize speech. 
    r = sr.Recognizer()

    with sr.Microphone() as source:
        print('TARS is Ready...')
        r.pause_threshold = 2
        #wait for a second to let the recognizer adjust the  
        #energy threshold based on the surrounding noise level 
        r.adjust_for_ambient_noise(source, duration=1)
        #listens for the user's input
        audio = r.listen(source)

    try:
        command = r.recognize_google(audio).lower()
        print('You said: ' + command + '\n')

    #loop back to continue to listen for commands if unrecognizable speech is received
    except sr.UnknownValueError:
        print('Your last command couldn\'t be heard')
        command = myCommand();
    return command

def tars(command):
    errors=[
        "I don't know what you mean",
        "Did you mean astronaut?",
        "Can you repeat it please?",
    ]
    if 'hello' in command:
        talk('Hello! I am TARS. How can I help you?')
    else:
        error = random.choice(errors)
        talk(error)


talk('TARS is ready!')

#loop to continue executing multiple commands
while True:
    tars(myCommand())

Ну .. это AI что-нибудь больше, чем куча, если заявления?

Если вы говорите о «Real» AI, то да, это намного больше, чем только если утверждения. Развитие ИИ исторически разделилось на два поля; Символические AI и машинное обучение.

Символический AI – это поле, в котором искусственно интеллектуальные системы были разработаны с помощью логики типа If-else. Программисты будут пытаться определить все возможные сценарий для системы для решения. До конца семидесятых годов это была доминирующая форма развития системы АИ. Эксперты в этой области очень сильно утверждали, что обучение машины никогда не поймают, и что AI может быть написан только таким образом.

Теперь мы знаем, что учета каждого возможного сценария в интеллектуальной системе чрезвычайно нецелесообразно, и мы используем вместо этого машины. Машинное обучение использует статистику, чтобы искать и определить шаблоны данных, так что машина может узнать и улучшить задачи, которые она предназначена для выполнения. Это значительно более гибкое.

Мы используем просто букет, если утверждения понимать основы Ai. Но мы реализуем несколько прохладных алгоритмов ML позже.

Я надеюсь, что вы узнали новые вещи до сих пор, сейчас пришло время преподавать TALS, как автоматизировать вещи.

Откройте Google и найдите что-то

Мы собираемся импортировать WebBrowser Модуль в Python, который предоставляет интерфейс для отображения веб-документов.

Хотя мы говорим команды, TALS должен обнаружить доступность этих команд, соответствуя их. Python имеет встроенный пакет под названием Re , который можно использовать для работы с регулярными выражениями.

import re
import webbrowser

if 'open google' in command:
        #matching command to check it is available
        reg_ex = re.search('open google (.*)', command)
        url = 'https://www.google.com/'
        if reg_ex:
            subgoogle = reg_ex.group(1)
            url = url + 'r/' + subreddit
        webbrowser.open(url)
        print('Done!')

Метод Re.Search () принимает регулярную структуру экспрессии и строку и поиск этого шаблона в строке. Если поиск успешен, поиск () возвращает объект совпадения или нет другого. Следовательно, поиск обычно сразу сопровождается EF-оператором для проверки, если поиск преуспел

Код. Iearch («Открыть Google (. *)’ Команда) хранит результат поиска в переменной имени «REG_EX». Тогда IF-оператор тестирует матч – если true поиск успешно и группа () – это соответствующий текст. В противном случае, если совпадение неверно (не будет более конкретным), то поиск не добился успеха, и нет совпадающего текста. 1 в reg_ex.group (1) представляет первую скоженную подгруппу.

Даже вы можете установить Селен Чтобы найти поиск в Google по TALS. Чтобы установить SELENIUM Запустите следующую команду:

pip3 install selenium

WebDriver Selenium – это коллекция API с открытым исходным кодом, которые используются для автоматизации тестирования веб-приложения. Этот инструмент используется для автоматизации тестирования веб-приложений, чтобы убедиться, что он работает как ожидалось. Он поддерживает многие браузеры, такие как Safari, Firefox, IE и Chrome.

Вы можете искать, как использовать Селен с Python В Интернете много источников, и это действительно легко учиться. Добавим эту функцию tars

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

    if 'open google and search' in command:
        reg_ex = re.search('open google and search (.*)', command)
        search_for = command.split("search",1)[1]
        url = 'https://www.google.com/'
        if reg_ex:
            subgoogle = reg_ex.group(1)
            url = url + 'r/' + subgoogle
        talk('Okay!')
        driver = webdriver.Firefox(executable_path='/path/to/geckodriver') #depends which web browser you are using
        driver.get('http://www.google.com')
        search = driver.find_element_by_name('q') # finds search
        search.send_keys(str(search_for)) #sends search keys 
        search.send_keys(Keys.RETURN) #hits enter

TALS рассмотрит строки после «открытия команда Google и поиска» и принимает все слова в качестве ключа поиска. Я использую Firefox, поэтому я установил Geckodriver Но если вы используете Chrome, проверьте следующий вопрос Stackoverflow.

Я начинаю автоматизацию скучной книги, и я пытаюсь открыть веб-браузер Chrome через Python. Я уже установил селен и

Я пытался запустить этот файл:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

browser = webdriver.Chrome()
browser.get('https://automatetheboringstuff.com')

Но потому что…

Отправить письмо

Мы собираемся импортировать smtplib отправлять электронные письма с Python. SMTP означает простой протокол передачи почты, и это полезно для общения с почтовыми серверами для отправки почты.

  import smtplib

  elif 'email' or 'gmail' in command:
        talk('What is the subject?')
        time.sleep(3)
        subject = myCommand()
        talk('What should I say?')
        time.sleep(3)
        message = myCommand()
        content = 'Subject: {}\n\n{}'.format(subject, message)

        #init gmail SMTP
        mail = smtplib.SMTP('smtp.gmail.com', 587)

        #identify to server
        mail.ehlo()

        #encrypt session
        mail.starttls()

        #login
        mail.login('your_gmail', 'your_gmail_password')

        #send message
        mail.sendmail('FROM', 'TO', content)

        #end mail connection
        mail.close()

        talk('Email sent.')

Обратите внимание, что в двух словах Google не позволяет вам войти через SMTPLIB, потому что он пометил такой вход в систему как «менее безопасным», так что вы должны сделать, это перейти к этой ссылке, когда вы вошли в свой Учетная запись Google и доступа к доступу.

Давать возможность

До сих пор не работает? Проверьте этот вопрос Stackoverflow

Я пытаюсь отправить электронное письмо в Python, через Gmail. Вот мой код:

import smtplib


fromaddr = '......................'  
toaddrs  = '......................'  
msg = 'Spam email Test'  

username = '.......'  
password = '.......'

server = smtplib.SMTP('smtp.gmail.com', 587)  
server.ehlo()
server.starttls()
server.login(username, password)  
server.sendmail(fromaddr, toaddrs, msg)  
server.quit()

Я получаю ошибку:

Data Data.

У нас все хорошо! TALS может отправлять почту и поискать все, что вы хотите в Google. Теперь давайте реализуем более сложную функцию, чтобы TARS затрагивать некоторые данные Wikipedia и прочитайте его для нас.

Красивый суп Является ли библиотека Python для вытягивания данных из файлов HTML и XML. Он работает с вашим любимым парсером, чтобы обеспечить идиоматические способы навигации, поиска и модификации дерева разбора. Это обычно экономит программисты часы или дни работы. Запустите следующую команду в вашем терминале, чтобы установить BasoneSoup:

pip install beautifulsoup4

Нам также понадобится Запросы библиотеки Для создания HTTP-запросов в Python. Это абстрагирует сложности запрашивания запросов на прекрасную, простое API, чтобы вы могли сосредоточиться на взаимодействии с услугами и потребляющими данными в вашем приложении. Хорошо! Давайте посмотрим код:

import bs4
import requests

elif 'wikipedia' in command:
        reg_ex = re.search('search in wikipedia (.+)', command)
        if reg_ex: 
            query = command.split()
            response = requests.get("https://en.wikipedia.org/wiki/" + query[3])

            if response is not None:
                html = bs4.BeautifulSoup(response.text, 'html.parser')
                title = html.select("#firstHeading")[0].text
                paragraphs = html.select("p")
                for para in paragraphs:
                    print (para.text)


                intro = '\n'.join([ para.text for para in paragraphs[0:5]])
                print (intro)
                mp3name = 'speech.mp3'
                language = 'en'
                myobj = gTTS(text=intro, lang=language, slow=False)   
                myobj.save(mp3name)
                mixer.init()
                mixer.music.load("speech.mp3")
                mixer.music.play()
    elif 'stop' in command:
        mixer.music.stop()

«Поиск в Wikipedia Mars» и TALS займет «Марс» в качестве ключевого слова для поиска в Википедии. Если вы ищете что-то на Википедии, вы увидите URL-адрес, похоже на https://en.wikipedia.org/wiki/keyword Таким образом, мы отправляем запрос с ключевым словом (что для поиска) для доступа к данным. После того, как просьба добиться успеха, BeautifulSoup будет разбираться в проанализе внутри Википедии. Метод join () – это строковый метод и возвращает строку, в которой элементы последовательности были соединены сепаратором STR, и мы используем его для разделения абзацев. Вы уже знакомы с GTTS и Mixer Поэтому я передаю эту часть.

TALS отобразит сказанные данные на консоли и начнут читать его для вас.

Ищите видео на YouTube и играйте

Эта функция похожа на поиск с Google, но на этот раз лучше использовать урлыб . Основная цель – изучать новые вещи с Python, поэтому я не хочу включать Selenium в этой функции. Вот код:

import urllib.request #used to make requests
import urllib.parse #used to parse values into the url

 elif 'youtube' in command:
        talk('Ok!')
        reg_ex = re.search('youtube (.+)', command)
        if reg_ex:
            domain = command.split("youtube",1)[1] 
            query_string = urllib.parse.urlencode({"search_query" : domain})
            html_content = urllib.request.urlopen("http://www.youtube.com/results?" + query_string) 
            search_results = re.findall(r'href=\"\/watch\?v=(.{11})', html_content.read().decode()) # finds all links in search result
            webbrowser.open("http://www.youtube.com/watch?v={}".format(search_results[0]))
            pass

Урлыб Модуль в Python 3 позволяет получать доступ к веб-сайтам через вашу программу. Это открывает столько дверей для ваших программ, так как Интернет открывается для вас. Урлиб в Python 3 немного отличается от Urllib2 в Python 2, но они в основном одинаковы. Через URLLLIB вы можете получить доступ к веб-сайтам, загружать данные, анализировать данные, изменить заголовки и выполнять любые запросы Get и Post, которые вам могут понадобиться.

Проверьте этот урок больше о Urllib

Ключ поиска должен быть закодирован перед анализом в URL. Если вы ищете что-то на YouTube, вы можете увидеть после http://www.youtube.com/results? «Есть кодированные ключи поиска. После того, как эти ключей поиска закодированы программа, могут успешно получить доступ к результатам поиска. Выражение Re.findall () Возвращает все не перекрывающиеся списки шаблонов в строке в виде списка строк. Каждое видео на YouTube имеет свои собственные 11 символов ID (https://www.youtube.com/watch?v= Gepma3usjdi ) и re.findall () найдут все совпадения в декодированном HTML_Content (в странице результатов поиска) Отказ декодировать () Используется для преобразования из одной схемы кодирования, в которой строка аргумента кодируется на желаемой схеме кодирования. Это работает напротив кодирования. Он принимает кодировку строки кодирования, чтобы декодировать ее и возвращает исходную строку. Наконец, он играет первое видео в результатах поиска, потому что обычно первое видео – ближайший к ключам поиска.

Полный код:

from gtts import gTTS
import speech_recognition as sr
import re
import time
import webbrowser
import random
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import smtplib
import requests
from pygame import mixer
import urllib.request
import urllib.parse
import bs4


def talk(audio):
    "speaks audio passed as argument"

    print(audio)
    for line in audio.splitlines():
        text_to_speech = gTTS(text=audio, lang='en-uk')
        text_to_speech.save('audio.mp3')
        mixer.init()
        mixer.music.load("audio.mp3")
        mixer.music.play()


def myCommand():
    "listens for commands"
    #Initialize the recognizer
    #The primary purpose of a Recognizer instance is, of course, to recognize speech. 
    r = sr.Recognizer()

    with sr.Microphone() as source:
        print('TARS is Ready...')
        r.pause_threshold = 1
        #wait for a second to let the recognizer adjust the  
        #energy threshold based on the surrounding noise level 
        r.adjust_for_ambient_noise(source, duration=1)
        #listens for the user's input
        audio = r.listen(source)
        print('analyzing...')

    try:
        command = r.recognize_google(audio).lower()
        print('You said: ' + command + '\n')
        time.sleep(2)

    #loop back to continue to listen for commands if unrecognizable speech is received
    except sr.UnknownValueError:
        print('Your last command couldn\'t be heard')
        command = myCommand();

    return command


def tars(command):
    errors=[
        "I don't know what you mean",
        "Excuse me?",
        "Can you repeat it please?",
    ]
    "if statements for executing commands"

    # Search on Google
    if 'open google and search' in command:
        reg_ex = re.search('open google and search (.*)', command)
        search_for = command.split("search",1)[1] 
        print(search_for)
        url = 'https://www.google.com/'
        if reg_ex:
            subgoogle = reg_ex.group(1)
            url = url + 'r/' + subgoogle
        talk('Okay!')
        driver = webdriver.Firefox(executable_path='/home/coderasha/Desktop/geckodriver')
        driver.get('http://www.google.com')
        search = driver.find_element_by_name('q')
        search.send_keys(str(search_for))
        search.send_keys(Keys.RETURN) # hit return after you enter search text

    #Send Email
    elif 'email' in command:
        talk('What is the subject?')
        time.sleep(3)
        subject = myCommand()
        talk('What should I say?')
        message = myCommand()
        content = 'Subject: {}\n\n{}'.format(subject, message)

        #init gmail SMTP
        mail = smtplib.SMTP('smtp.gmail.com', 587)

        #identify to server
        mail.ehlo()

        #encrypt session
        mail.starttls()

        #login
        mail.login('your_mail', 'your_mail_password')

        #send message
        mail.sendmail('FROM', 'TO', content)

        #end mail connection
        mail.close()

        talk('Email sent.')

    # search in wikipedia (e.g. Can you search in wikipedia apples)
    elif 'wikipedia' in command:
        reg_ex = re.search('wikipedia (.+)', command)
        if reg_ex: 
            query = command.split("wikipedia",1)[1] 
            response = requests.get("https://en.wikipedia.org/wiki/" + query)
            if response is not None:
                html = bs4.BeautifulSoup(response.text, 'html.parser')
                title = html.select("#firstHeading")[0].text
                paragraphs = html.select("p")
                for para in paragraphs:
                    print (para.text)
                intro = '\n'.join([ para.text for para in paragraphs[0:3]])
                print (intro)
                mp3name = 'speech.mp3'
                language = 'en'
                myobj = gTTS(text=intro, lang=language, slow=False)   
                myobj.save(mp3name)
                mixer.init()
                mixer.music.load("speech.mp3")
               while mixer.music.play()
    elif 'stop' in command:
        mixer.music.stop()

    # Search videos on Youtube and play (e.g. Search in youtube believer)
    elif 'youtube' in command:
        talk('Ok!')
        reg_ex = re.search('youtube (.+)', command)
        if reg_ex:
            domain = command.split("youtube",1)[1] 
            query_string = urllib.parse.urlencode({"search_query" : domain})
            html_content = urllib.request.urlopen("http://www.youtube.com/results?" + query_string)
            search_results = re.findall(r'href=\"\/watch\?v=(.{11})', html_content.read().decode())
            webbrowser.open("http://www.youtube.com/watch?v={}".format(search_results[0]))
            pass



    elif 'hello' in command:
        talk('Hello! I am TARS. How can I help you?')
        time.sleep(3)
    elif 'who are you' in command:
        talk('I am one of four former U.S. Marine Corps tactical robots')
        time.sleep(3)
    else:
        error = random.choice(errors)
        talk(error)
        time.sleep(3)


talk('TARS activated!')

#loop to continue executing multiple commands
while True:
    time.sleep(4)
    tars(myCommand())

Прохладный! Мы только что создали демонстрацию И я надеюсь, что вы узнали много вещей из этой лаборатории. Пожалуйста, не стесняйтесь внести этот проект на Github TALS будет ждать улучшений.

Увидимся следующий пост Скоро DEV! Оставайся на связи! 🚀

Instagram Twitter Поддержи меня Покупая мне чашку кофе

Оригинал: “https://dev.to/coderasha/build-virtual-assistant-with-python-automate-tasks-46a6”