Я использую речевой 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-секундным сном и той же ошибкой! Я не понимаю, что происходит, потому что я уже получил стенограмму, а процесс напечатан «остановлен».
Я преобразовал речь в текст и успешно удалил аудиофайл .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.
Спасибо! это сработало, проблема теперь в том, что он ждет, пока файл будет удален, чтобы вернуть расшифровку, я пробовал разные места, даже делал это как фоновую задачу, но это вернуло меня к исходной проблеме, но все еще пытаюсь, я обновлю, когда получу прийти к решению. большое спасибо.