Форум сайта python.su
0
Смотрел урок Хауди Хо, 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: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера
и файл еще не закончил работу
Прикреплённый файлы:
main.py (3,4 KБ)
Офлайн
857
joyraxОн там в видео говорит, что писал этот код пять минут. Я думаю, он его писал весь день, а потом ещё видео монтировал полдня.
Смотрел урок Хауди Хо
joyraxВидео не доказывает, что она у него работала именно так. Это всё можно состряпать, наложить фразы на само видео, а не из программы их получить. Вот если бы он со стороны на телефон снял, как с компом общается через эту штуку, мы могли бы говорить о реальности происходящего.
но оно выполняется не так как надо, не так как у Хауди, все время тупит, не выполняет команды, и почти все время не распознает речь
Отредактировано py.user.next (Июнь 3, 2019 03:08:51)
Офлайн
0
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()
Офлайн
857
joyraxТолько распознавание голоса надо сделать и удостовериться, что оно само по себе работает без тупняков на протяжении любого времени.
я сделал по дугому, но тут он работает и распознает хорошо, по крайней мере в начале
Офлайн
186
> Смотрел урок Хауди Хо
Я посмотрел пару видео с его канала и могу сказать что их делает лама для таких же лам. Если хочешь чему то научиться, то смотри что нибудь другое, а лучше книги читай.
> через несколько минут начинает тупить, долго распознает речь и начинает так сказать сливать несколько команд или вообще не слышит
Я не вникал в то как он работает, но скорее всего он использует какой то интернет сервис распознавания речи. Вот с этого и надо начинать. Проверь насколько стабильно работает у тебя интернет, сервис может быть платным или с ограничениями, посмотри документацию на speech_recognition возможно этот сервис можно сменить на другой или как то дополнительно настроить.
Офлайн