Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 2, 2019 20:30:40

joyrax
Зарегистрирован: 2019-06-02
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

ассистент на python

Смотрел урок Хауди Хо, https://youtu.be/YeS755SPSI8, и попробывал запустит этот код, но оно выполняется не так как надо, не так как у Хауди, все время тупит, не выполняет команды, и почти все время не распознает речь, а через некоторее время закрывается с ошибко.

Вообще я хотел взять этот исходник и написать своего голосового ассистента

вот что выводится в консоли:

C:\Users\Dmitriy\Documents\PY\Project\assistent
λ python main.py
Добрый день, повелитель
Кеша слушает
Распознано: который
Распознано: который час
Голос не распознан!
Распознано: который час
Голос не распознан!
Голос не распознан!
Голос не распознан!
Распознано: яша расскажи анекдот который час
Голос не распознан!
Голос не распознан!
Голос не распознан!
Голос не распознан!
Голос не распознан!
Голос не распознан!
Голос не распознан!
Голос не распознан!
Неизвестная ошибка, проверьте интернет!
Exception in thread Thread-1:
Traceback (most recent call last):
File “C:\Users\Dmitriy\AppData\Local\Programs\Python\Python37-32\lib\threading.py”, line 917, in _bootstrap_inner
self.run()
File “C:\Users\Dmitriy\AppData\Local\Programs\Python\Python37-32\lib\threading.py”, line 865, in run
self._target(*self._args, **self._kwargs)
File “C:\Users\Dmitriy\AppData\Local\Programs\Python\Python37-32\lib\site-packages\speech_recognition\__init__.py”, line 697, in threaded_listen
if running: callback(self, audio)
File “main.py”, line 30, in callback
voice = recognizer.recognize_google(audio, language = “ru-RU”).lower()
File “C:\Users\Dmitriy\AppData\Local\Programs\Python\Python37-32\lib\site-packages\speech_recognition\__init__.py”, line 840, in recognize_google
response = urlopen(request, timeout=self.operation_timeout)
File “C:\Users\Dmitriy\AppData\Local\Programs\Python\Python37-32\lib\urllib\request.py”, line 222, in urlopen
return opener.open(url, data, timeout)
File “C:\Users\Dmitriy\AppData\Local\Programs\Python\Python37-32\lib\urllib\request.py”, line 525, in open
response = self._open(req, data)
File “C:\Users\Dmitriy\AppData\Local\Programs\Python\Python37-32\lib\urllib\request.py”, line 543, in _open
'_open', req)
File “C:\Users\Dmitriy\AppData\Local\Programs\Python\Python37-32\lib\urllib\request.py”, line 503, in _call_chain
result = func(*args)
File “C:\Users\Dmitriy\AppData\Local\Programs\Python\Python37-32\lib\urllib\request.py”, line 1345, in http_open
return self.do_open(http.client.HTTPConnection, req)
File “C:\Users\Dmitriy\AppData\Local\Programs\Python\Python37-32\lib\urllib\request.py”, line 1320, in do_open
r = h.getresponse()
File “C:\Users\Dmitriy\AppData\Local\Programs\Python\Python37-32\lib\http\client.py”, line 1321, in getresponse
response.begin()
File “C:\Users\Dmitriy\AppData\Local\Programs\Python\Python37-32\lib\http\client.py”, line 296, in begin
version, status, reason = self._read_status()
File “C:\Users\Dmitriy\AppData\Local\Programs\Python\Python37-32\lib\http\client.py”, line 257, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), “iso-8859-1”)
File “C:\Users\Dmitriy\AppData\Local\Programs\Python\Python37-32\lib\socket.py”, line 589, in readinto
return self._sock.recv_into(b)
TimeoutError: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера

и файл еще не закончил работу

Прикреплённый файлы:
attachment main.py (3,4 KБ)

Офлайн

#2 Июнь 3, 2019 03:03:41

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

ассистент на python

joyrax
Смотрел урок Хауди Хо
Он там в видео говорит, что писал этот код пять минут. Я думаю, он его писал весь день, а потом ещё видео монтировал полдня.
Так что не путай розовые очки с реальностью.

joyrax
но оно выполняется не так как надо, не так как у Хауди, все время тупит, не выполняет команды, и почти все время не распознает речь
Видео не доказывает, что она у него работала именно так. Это всё можно состряпать, наложить фразы на само видео, а не из программы их получить. Вот если бы он со стороны на телефон снял, как с компом общается через эту штуку, мы могли бы говорить о реальности происходящего.

Так что пока что у нас есть просто какой-то код. Что и как в нём работает, это нужно ещё выяснять.

Займись просто распознаванием голоса, установи этот сторонний модуль и удостоверься, что он просто распознаёт голос.



Отредактировано py.user.next (Июнь 3, 2019 03:08:51)

Офлайн

#3 Июнь 3, 2019 09:52:43

joyrax
Зарегистрирован: 2019-06-02
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

ассистент на python

py.user.next
я сделал по дугому, но тут он работает и распознает хорошо, по крайней мере в начале
 # Библиотеки распознавания и синтеза речи
import speech_recognition as sr
from gtts import gTTS
# Воспроизведение речи
import pygame
from pygame import mixer
mixer.init()
import os
import sys
import time
import datetime
import logging
import webbrowser
import subprocess
class Speech_AI:
    def __init__(self):
        self._recognizer = sr.Recognizer()
        self._microphone = sr.Microphone()
        
        now_time = datetime.datetime.now()
        self._mp3_name = now_time.strftime("recordingAss_%d_%m_%Y_%I_%M_%S")+".mp3"
        self._mp3_nameold='111'
    def work(self):
        print("[log] Обработка шума...")
        with self._microphone as source:
            self._recognizer.adjust_for_ambient_noise(source)
            print("[log] Обработка шума завершина!")
        try:
            while True:
                print("[log] Жду указаний")
                with self._microphone as source:
                    audio = self._recognizer.listen(source)
                print("[log] Выполняю сэр")
                try:
                    statement = self._recognizer.recognize_google(audio, language="ru_RU")
                    statement=statement.lower()
                    # Команды для открытия различных внешних приложений
                    if((statement.find("калькулятор")!=-1) or (statement.find("calculator")!=-1) or (statement.find("открой калькулятор")!=-1)):
                        self.osrun('calc')
                               
                    if((statement.find("блокнот")!=-1) or (statement.find("notepad")!=-1) or (statement.find("открой блокнот")!=-1)):
                        self.osrun('notepad')
                    if((statement.find("browser")!=-1) or (statement.find("браузер")!=-1) or (statement.find("открой браузер")!=-1)):
                        self.openurl('http://google.com', 'Открываю браузер')
 
                    # Команды для открытия URL в браузере
                    
                    if((statement.find("youtube")!=-1) or (statement.find("youtub")!=-1) or (statement.find("открыть ютуб")!=-1) or (statement.find("смотреть ютуб")!=-1)):                        
                        self.openurl('http://youtube.com', 'Открываю ютуб')
                    if((statement.find("gmail")!=-1) or (statement.find("открой почту")!=-1)):
                        self.openurl('https://mail.google.com/mail/u/0/#inbox', 'Открываю почту')
                        
                    if((statement.find("вконтакте")!=-1) or (statement.find("открой вк")!=-1)):
                        self.openurl('http://vk.com', 'Открываю Вконтакте')
                    # Команды для поиска в сети интернет
                  
                    if((statement.find("найти")!=-1) or (statement.find("поиск")!=-1) or (statement.find("найди")!=-1)):
                        self.openurl('https://www.google.com/search?q=' + statement, "Я нашла следующие результаты")
                        
                    if((statement.find("смотреть")!=-1) and ((statement.find("фильм")!=-1) or (statement.find("film")!=-1))):
                        self.openurl('https://www.google.com/search?q=Смотреть+онлайн+фильм+' + statement, "Выберите сайт где смотреть фильм")
                    if(((statement.find("youtube")!=-1) or (statement.find("ютуб")!=-1) or (statement.find("смотреть")!=-1)) and (statement.find("на")!=-1) and (statement.find("ютуб")!=-1)):
                        self.openurl('http://www.youtube.com/results?search_query=' + statement, 'Ищу в ютуб')
                    if((statement.find("включи музыку")!=-1)):
                        os.system("C:\\Users\\Dmitriy\\Documents\\PY\\Project\\Speech_AI-master\\res\\1.mp3")
                    # Поддержание диалога
                    
                    if((statement.find("до свидания")!=-1) or (statement.find("досвидания")!=-1)):
                        answer = "Пока!"
                        self.say(str(answer))
                        while pygame.mixer.music.get_busy():
                            time.sleep(0.1)
                        sys.exit()
                    
                    print("Вы сказали: {}".format(statement))
                    
                except sr.UnknownValueError:
                    print("Упс! Кажется, я тебя не поняла, повтори еще раз")
                except sr.RequestError as e:
                    print("Не могу получить данные от сервиса Google Speech Recognition; {0}".format(e))
        except KeyboardInterrupt:
            self._clean_up()
            print("Пока!")
        
    def osrun(self, cmd):
        PIPE = subprocess.PIPE
        p = subprocess.Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=subprocess.STDOUT)
    def openurl(self, url, ans):
        webbrowser.open(url)
        self.say(str(ans))
        while pygame.mixer.music.get_busy():
            time.sleep(0.1)
    def say(self, phrase):
        tts = gTTS(text=phrase, lang="ru")
        tts.save(self._mp3_name)
        # Play answer
        mixer.music.load(self._mp3_name)
        mixer.music.play()
        if(os.path.exists(self._mp3_nameold)):
            os.remove(self._mp3_nameold)
       
        now_time = datetime.datetime.now()
        self._mp3_nameold=self._mp3_name
        self._mp3_name = now_time.strftime("recordingAss_%d_%m_%Y_%I_%M_%S")+".mp3"
    
    def _clean_up(self):
        def clean_up():
            os.remove(self._mp3_name)
def main():
    ai = Speech_AI()
    ai.work()
main()
но через несколько минут начинает тупить, долго распознает речь и начинает так сказать сливать несколько команд или вообще не слышит
можете подсказать почему?

Офлайн

#4 Июнь 3, 2019 10:20:07

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

ассистент на python

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

Сначала нужно проверить распознавание речи и убедиться, что оно работает стабильно долгое время.
Затем нужно добавить генерацию звуковых ответов и убедиться, что она работает стабильно долгое время.
Потом надо добавить одну команду и убедиться, что она запускается стабильно долгое время.

А так ты намешал кучу всего и неизвестно, что приводит к тормозам, потому что тормоза могут возникать из-за любой части. В одной части могут возникать, а в другой части проявляться. Тормозить начнёт процесс в системе, а проявится это в тормозах распознавания или генерации звука.



Офлайн

#5 Июнь 3, 2019 11:19:09

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

ассистент на python

> Смотрел урок Хауди Хо

Я посмотрел пару видео с его канала и могу сказать что их делает лама для таких же лам. Если хочешь чему то научиться, то смотри что нибудь другое, а лучше книги читай.

> через несколько минут начинает тупить, долго распознает речь и начинает так сказать сливать несколько команд или вообще не слышит

Я не вникал в то как он работает, но скорее всего он использует какой то интернет сервис распознавания речи. Вот с этого и надо начинать. Проверь насколько стабильно работает у тебя интернет, сервис может быть платным или с ограничениями, посмотри документацию на speech_recognition возможно этот сервис можно сменить на другой или как то дополнительно настроить.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version