Сам код работает отлично, но скомпилированный exe не работает, в консоли пишет ошибку (сриншот)
компилирую в консоли, пишу: pyinstaller -F имя_файла.py
компилирую в консоли, пишу: pyinstaller -F имя_файла.py
Python:
from logging import shutdown
from vosk import Model, KaldiRecognizer # оффлайн-распознавание от Vosk
import speech_recognition # распознавание пользовательской речи (Speech-To-Text)
import wave # создание и чтение аудиофайлов формата wav
import json # работа с json-файлами и json-строками
import os # работа с файловой системой
import keyboard
import webbrowser
def record_and_recognize_audio(*args: tuple):
"""
Запись и распознавание аудио
"""
with microphone:
recognized_data = ""
# регулирование уровня окружающего шума
recognizer.adjust_for_ambient_noise(microphone, duration=2)
try:
print("Listening...")
audio = recognizer.listen(microphone, 5, 5)
with open("microphone-results.wav", "wb") as file:
file.write(audio.get_wav_data())
except speech_recognition.WaitTimeoutError:
print("Can you check if your microphone is on, please?")
return
# использование online-распознавания через Google
try:
print("Started recognition...")
recognized_data = recognizer.recognize_google(audio, language="ru").lower()
except speech_recognition.UnknownValueError:
pass
# в случае проблем с доступом в Интернет происходит попытка
# использовать offline-распознавание через Vosk
except speech_recognition.RequestError:
print("Trying to use offline recognition...")
recognized_data = use_offline_recognition()
return recognized_data
def use_offline_recognition():
"""
Переключение на оффлайн-распознавание речи
:return: распознанная фраза
"""
recognized_data = ""
try:
# проверка наличия модели на нужном языке в каталоге приложения
if not os.path.exists("models/vosk-model-small-ru-0.4"):
print("Please download the model from:\n"
"https://alphacephei.com/vosk/models and unpack as 'model' in the current folder.")
exit(1)
# анализ записанного в микрофон аудио (чтобы избежать повторов фразы)
wave_audio_file = wave.open("microphone-results.wav", "rb")
model = Model("models/vosk-model-small-ru-0.4")
offline_recognizer = KaldiRecognizer(model, wave_audio_file.getframerate())
data = wave_audio_file.readframes(wave_audio_file.getnframes())
if len(data) > 0:
if offline_recognizer.AcceptWaveform(data):
recognized_data = offline_recognizer.Result()
# получение данных распознанного текста из JSON-строки
# (чтобы можно было выдать по ней ответ)
recognized_data = json.loads(recognized_data)
recognized_data = recognized_data["text"]
except:
print("Sorry, speech service is unavailable. Try again later")
return recognized_data
if __name__ == "__main__":
# инициализация инструментов распознавания и ввода речи
recognizer = speech_recognition.Recognizer()
microphone = speech_recognition.Microphone()
while True:
# старт записи речи с последующим выводом распознанной речи
# и удалением записанного в микрофон аудио
voice_input = record_and_recognize_audio()
os.remove("microphone-results.wav")
print(voice_input)
if voice_input == "запусти блендер" or voice_input == "запусти blender" or voice_input == "открой блендер" or voice_input == "открой blender":
import os
os.startfile('C:/Program Files/Blender Foundation/Blender 3.0/blender-launcher.exe')
elif voice_input == "запусти браузер" or voice_input == "запусти browser" or voice_input == "открой браузер" or voice_input == "открой browser":
import os
os.startfile('C:/Users/denis/AppData/Local/Yandex/YandexBrowser/Application/browser.exe')
elif voice_input == "запусти пайчарм" or voice_input== "запусти pycharm" or voice_input == "открой пайчарм" or voice_input == "открой pycharm":
import os
os.startfile('C:/Program Files/JetBrains/PyCharm Community Edition 2021.3.1/bin\pycharm64.exe')
elif voice_input == "запусти minecraft" or voice_input == "запусти майнкрафт" or voice_input == "открой майнкрафт" or voice_input == "открой minecraft":
import os
os.startfile('C:/Users/denis/Downloads/minecraft-1.13.2/RuLauncher - Запуск майнкрафт.exe')
elif voice_input == "открой этот компьютер" or voice_input == "открой мой компьютер":
import os
os.startfile('C:/Users/denis/OneDrive/Desktop/Этот компьютер - Ярлык')
elif voice_input == "сверни все окна" or voice_input == "разверни все окна" or voice_input == "сверни все вкладки" or voice_input == "разверни все вкладки":
keyboard.press('win')
keyboard.press('d')
keyboard.release('win')
keyboard.release('d')
elif voice_input == "выключи компьютер" or voice_input == "завершить работу" or voice_input == "завершение работы":
import os
shutdown = input("Вы уверенны, что хотите выключит компьютер? Введите да для завершения работы: ")
if shutdown == 'да' or shutdown == "Да" or shutdown == "ДА":
os.system("shutdown /s /t 1")
else:
print("Вы не подтвердили действие")
elif voice_input == "открой vk" or voice_input == "открой вк" or voice_input == "запусти vk" or voice_input == "запусти вк":
webbrowser.open ('https://vk.com')
elif voice_input == "открой сообщения vk" or voice_input == "открой мессенжер vk" or voice_input == "открой сообщения вк" or voice_input == "открой мессенжер вк" or voice_input == "открой messenger vk" or voice_input == "открой сообщение вк" or voice_input == "открой сообщение vk":
webbrowser.open ('https://vk.com/im?v=')
elif voice_input == "открой ютуб" or voice_input == "открой youtube" or voice_input == "запусти ютуб" or voice_input == "запусти youtube":
webbrowser.open ('https://www.youtube.com')
elif voice_input == "открой электронный журнал" or voice_input == "запусти электронный журнал":
webbrowser.open ('https://sgo.rso23.ru')
elif voice_input == "закрой браузер" or voice_input == "закрой browser" or voice_input == "закрыть браузер" or voice_input == "закрыть browser":
os.system("taskkill /f /im browser.exe")
elif voice_input == "открыть диалог вк с сестрой" or voice_input == "открыть диалог вк с сестрой":
webbrowser.open('https://vk.com/im?sel=253095186')
elif voice_input == "открой яндекс" or voice_input == "открой yandex" or voice_input == "запусти яндекс" or voice_input == "запусти yandex":
webbrowser.open('https://yandex.ru')
elif voice_input == "открой гугл" or voice_input == "открой google" or voice_input == "запусти гугл" or voice_input == "запусти google":
webbrowser.open('https://www.google.ru')
elif voice_input == "завершить работу голосового ассистента" or voice_input == "остановить работу голосового ассистента" or voice_input == "завершить работу ассистента" or voice_input == "остановить работу ассистента" or voice_input == "заверши работу ассистента" or voice_input == "останови работу ассистента" or voice_input == "заверши работу голосового ассистента":
print("Работа голосового ассистента завершена.")
exit()