ошибка в exe файле, но код работает

888DeMoN888

Новичок
Пользователь
Янв 17, 2022
15
2
3
Сам код работает отлично, но скомпилированный exe не работает, в консоли пишет ошибку (сриншот)Clip2Net DropZone_220131235103.png
компилирую в консоли, пишу: 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()
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
971
219
43
20
Москва
Попробуй компилировать через py2exe
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
все вокруг говорят, что нет компиляции в питоне
тогда не до конца понимаю смысла питона для десктопа
 

888DeMoN888

Новичок
Пользователь
Янв 17, 2022
15
2
3
Попробуй компилировать через py2exe
Благодарю за совет, попробую
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
971
219
43
20
Москва
все вокруг говорят, что нет компиляции в питоне
тогда не до конца понимаю смысла питона для десктопа
Ну а зачем тебе компиляция? Ты же все равно можешь собрать в исполняемый файл, отличие в том, что при его выполнении будет распаковываться компилятор. А если пишешь большое приложение, то можно делать его устанавливаемым, и будет у тебя папка в Program Files, и не важно по большому счету, скомпилированный там файл или сам компилятор. Еще плюс такого подхода, что при компиляции ты можешь запустить файл только на 1-й системе, под которую собрал файл, а так можно выполнить его на любой системе, даже Android. Ну и что значит смысл для десктопа? Где его еще запускать? На сервере?
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
971
219
43
20
Москва
И вообще-то, python сделан чтобы можно было быстро реализовать задумку, можно писать сложные приложения, в небольшом количестве кода, но он жертвует быстродействием
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
Ну и что значит смысл для десктопа? Где его еще запускать? На сервере?
ну да тот же Джанго, ну и Киви для мобильных приложений, кстати они apk файл делают?
Ты же все равно можешь собрать в исполняемый файл
как?
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
971
219
43
20
Москва
ну да тот же Джанго, ну и Киви для мобильных приложений, кстати они apk файл делают?

как?
py2exe, pyinstaller, PyPy, другие тоже вроде есть
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
971
219
43
20
Москва
Скомпилировать и собрать в исполняемый файл, это разные вещи, при сборке просто нужные библиотеки и сам компилятор запаковываются в exe файл
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
ок, раз
Скомпилировать и собрать в исполняемый файл, это разные вещи
то перечисленное:
что делает?
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
971
219
43
20
Москва
Собирает все в исполняемый файл
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
я запутался
Скомпилировать и собрать в исполняемый файл, это разные вещи
файл exe в обоих случаях будет на выходе?
в моём понятии файл exe это то, что:
без танцев моя работа-не\трудно копируемая
то что должно точно работать у всех с той же ОС под которую он сделан, бывает, что для всех ОСей сделан, так как недостающее есть в коробке
правда обычно всё равно часто просят Майкрософтовскую либу поставить самому
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
971
219
43
20
Москва
Exe файл получится в обоих случаях и работать будет у всех под Windows. Разница в том, что при компилировании код превращается в набор команд для процессора, (точно не скажу как это работает, не интересовался) и в последующем просто выполняется. Exe файл полученный из python, по факту исполняемый архив, а не набор инструкций процессора, он распаковывается во временную папку, и там выполняется
 

Форум IT Специалистов