@sundayss

Не работает удаление файла в python что делать?

Я нашел на хабре статью "Пишем голосового ассистента на python"
Попробовал код вот так он выглядит:
from vosk import Model, KaldiRecognizer  # оффлайн-распознавание от Vosk
import speech_recognition  # распознавание пользовательской речи (Speech-To-Text)
import wave  # создание и чтение аудиофайлов формата wav
import json  # работа с json-файлами и json-строками
import os  # работа с файловой системой


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("libs/speech-to-text/ru"):
            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("libs/speech-to-text/ru")
        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)

Но в консоли пишет:
Traceback (most recent call last):
  File "C:\Users\potch\OneDrive\Рабочий стол\ai_asisstant\app.py", line 89, in <module>
    os.remove("microphone-results.wav")
FileNotFoundError: [WinError 2] Не удается найти указанный файл: 'microphone-results.wav'

Подскажите что делать?
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 2
shurshur
@shurshur
Сисадмин, просто сисадмин...
Смотрим в код программы:

voice_input = record_and_recognize_audio()
os.remove("microphone-results.wav")


Если внутри функции record_and_recognize_audio случается исключение (speech_recognition.WaitTimeoutError) из-за ошибки, то файл не будет создан. Соответственно, удалять будет просто нечего.

Как решать? Ну для начала можно просто не удалять файл. Всё равно он при каждом вызове функции перезатирается. Не самое плохое решение, на самом деле.

А лучше проверять возвращаемое функцией значение, да и выявить и порешать исходную проблему тоже надо бы.

Но ещё более правильно почитать учебник или какие-то уроки по основам языка. Программировать копипастами чужого кода без какого-либо понимания - так себе путь.
Ответ написан
Комментировать
@Everything_is_bad
тебе явно указали в чем причина FileNotFoundError

Я нашел на хабре статью "Пишем голосового ассистента на python"
это тоже причина, ты делаешь то чего не понимаешь, все статьи про "голосового ассистента" это из ютубных хайпожеров, надо сразу такое в игнор
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы