Microsoft Speech SDK использует аудиофайл даже после транскрипции. Как узнать, когда он перестанет использовать файл? или как заставить его остановиться?

Я использую речевой SDK Microsoft для расшифровки аудиофайлов и получаю файлы в двоичном виде через API. Я пытался напрямую воспользоваться этим форматом, но не смог использовать его в качестве входных данных для функций SDK. По этой причине я создал функцию, которая сначала сохраняет этот звук в виде волнового файла, а затем указывает путь к функциям Microsoft. После завершения этого процесса файл мне не нужен, я использовал os.remove(), чтобы удалить его, но каждый раз выдает мне ошибку, что файл использует другой процесс. Я отладил и обнаружил, что одна из функций Microsoft использует файл.

Это мой код:

def function_that_gets_binary(file):
    with open(os.path.join("Data_to_remove", file.filename), "wb") as f:
        f.write(file.file.read())
        filename = file.filename
    f.close()
    transcript, time_seconds = MS_SDK(os.path.join("Data_to_remove",filename))


def MS_SDK(voice):
    audio_config = speechsdk.audio.AudioConfig(filename=voice)
    speech_config.speech_recognition_language = "ar-SA"
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)
    done = False

    def stop_cb(evt):
        """callback that stops continuous recognition upon receiving an event `evt`"""
        nonlocal done
        done = True
        speech_recognizer.stop_continuous_recognition()
        print("Stopped")
        os.remove(voice)

    full_text = []
    # Connect callbacks to the events fired by the speech recognizer
    speech_recognizer.recognized.connect(lambda evt: full_text.append(format(evt.result.text)))
    speech_recognizer.session_stopped.connect(stop_cb)

    # Start continuous speech recognition
    start = timeit.default_timer()
    speech_recognizer.start_continuous_recognition()
    while not done:
        time.sleep(0.5)
    transcript = " ".join(full_text)
    end = timeit.default_timer()
    duration = "{} seconds".format(round((end - start), 6))



    return transcript , duration

Я попытался добавить время сна, чтобы дать процессу время покинуть файл, но получил ту же ошибку. Я попытался сделать отдельную функцию удаления, которая работает в фоновом режиме с 20-секундным сном и той же ошибкой! Я не понимаю, что происходит, потому что я уже получил стенограмму, а процесс напечатан «остановлен».

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
105
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я преобразовал речь в текст и успешно удалил аудиофайл .wav после преобразования с помощью приведенного ниже кода.

Код:

import time
import timeit
import os
import azure.cognitiveservices.speech as speechsdk

def MS_SDK(voice):
    audio_config = speechsdk.audio.AudioConfig(filename=voice)
    speech_config = speechsdk.SpeechConfig(subscription = "<speech_key>", region = "<speech_region>")
    speech_config.speech_recognition_language = "ar-SA"
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)
    done = False

    def stop_cb(evt):
        """callback stops continuous recognition upon receiving an event `evt`"""
        nonlocal done
        done = True
        speech_recognizer.stop_continuous_recognition()
        print("Stopped")

    full_text = []
    speech_recognizer.recognized.connect(lambda evt: full_text.append(format(evt.result.text)))
    speech_recognizer.session_stopped.connect(stop_cb)

    start = timeit.default_timer()
    speech_recognizer.start_continuous_recognition()
    while not done:
        time.sleep(0.5)
    transcript = " ".join(full_text)
    end = timeit.default_timer()
    duration = "{} seconds".format(round((end - start), 6))
    speech_recognizer.__del__()
    return transcript, duration

def transcribe_audio_and_print(audio_file_path):
    transcript, duration = MS_SDK(audio_file_path)
    print("Transcript:", transcript)
    print("Duration:", duration)

    try:
        os.remove(audio_file_path)
        print("File deleted successfully.")
    except Exception as e:
        print("Error occurred while deleting file:", e)

audio_file_path = "path to wav file/Data_to_remove/<filename>.wav"
transcribe_audio_and_print(audio_file_path)

Выход :

Следующий код преобразовал речь в текст, и аудиофайл .wav был успешно удален, как показано ниже.

C:\Users\xxxxxxxx\Documents\xxxxxxxxx>python main.py
Stopped
Transcript: Hello this is a test of the speech synthesis service.
Duration: 3.507588 seconds
File deleted successfully.

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

Esraa Khaled 05.05.2024 20:53

Другие вопросы по теме