Python Streamlit в реальном времени речи к тексту с Azure SDKPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Python Streamlit в реальном времени речи к тексту с Azure SDK

Сообщение Anonymous »

Я пытаюсь создать речь в реальном времени для текста, используя Streatlit и Azure Speech SDK.
Я могу легко транскрибировать аудио/видеофайлы без проблем, но я хочу интегрировать транскрипцию в реальном времени (из браузера). Повторно используйте функцию, которую я создал, используя файлы, передайте Audiostream и поверните ее асинхронно, но тоже не работал. https://microsoft.github.io/techexcel-i ... 02.htmlbr/> Работал только на локальном компьютере, потому что он использовал микрофон хоста
отредактированный код: < /p>
def addsentence(evt: ConversationTranscriptionEventArgs):
if evt.result.speaker_id == "Unknown":
logger.debug("Unknown speaker: " + str(evt))
return
logger.info(f"Detected **{evt.result.speaker_id}**: {evt.result.text}")
st.session_state.r.append(f"**{evt.result.speaker_id}**: {evt.result.text}")
< /code>
webrtc_ctx = webrtc_streamer(key="speech-to-text", mode=WebRtcMode.SENDONLY,
media_stream_constraints={"video": False, "audio": True},
audio_receiver_size=256)

while webrtc_ctx.state.playing:
if not st.session_state["recording"]:
st.session_state.r = []

st.session_state.stream = PushAudioInputStream()
###
audio_input = speechsdk.AudioConfig(stream=st.session_state.stream)
speech_config = speechsdk.SpeechConfig(env["SPEECH_KEY"], env["SPEECH_REGION"])
if "proxy_host" in env and "proxy_port" in env:
speech_config.set_proxy(env["proxy_host"], int(env["proxy_port"]))
conversation_transcriber = ConversationTranscriber(speech_config, audio_input, language="it-IT")

conversation_transcriber.transcribed.connect(addsentence)
###

st.session_state.fullwav = pydub.AudioSegment.empty()
with (st.chat_message("assistant")):
with st.spinner("Trascrizione in corso..."):
stream_placeholder = st.expander("Trascrizione", icon="📝").empty()

conversation_transcriber.start_transcribing_async()
logger.info("Transcribing started!")
st.session_state["recording"] = True

try:
audio_frames = webrtc_ctx.audio_receiver.get_frames(timeout=1)
except queue.Empty:
time.sleep(0.1)
logger.debug("No frame arrived.")
continue

stream_placeholder.markdown("## Trascrizione:\n\n" + "\\\n".join(st.session_state.r))

for audio_frame in audio_frames:
st.session_state.stream.write(audio_frame.to_ndarray().tobytes())
sound = pydub.AudioSegment(
data=audio_frame.to_ndarray().tobytes(),
sample_width=audio_frame.format.bytes,
frame_rate=audio_frame.sample_rate,
channels=len(audio_frame.layout.channels),
)
st.session_state.fullwav += sound

if st.session_state["recording"]:
logger.info("stopped listening")
wav_file_path= tempfile.NamedTemporaryFile(suffix='.wav', delete=False).name
st.session_state.fullwav.export(wav_file_path, format="wav")
< /code>
EDIT 28/3 I rolled back to PushAudioInputStream, I was able to process rtmp using ffmpeg
def transcribe_rmtp(self, rtmp_url: str) -> str:
push_stream = PushAudioInputStream()
audio_config = AudioConfig(stream=push_stream)
transcriber = self.setup_transcriber(audio_config)
transcriber.start_transcribing_async()

ffmpeg_args = [
"ffmpeg", "-i", rtmp_url, "-vn", "-ac", "1", "-ar", "16000",
"-f", "s16le", "-fflags", "+genpts", "-bufsize", "512k",
"-maxrate", "128k", "pipe:1"]
ffmpeg_process = subprocess.Popen(ffmpeg_args, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)

try:
while not self.done:
if self.on_transcribed:
self.on_transcribed("\\\n".join(self.results))
chunk = ffmpeg_process.stdout.read(4096)
if not chunk:
break
push_stream.write(chunk)
time.sleep(0.1)
except Exception as e:
logger.error("Errore durante lo streaming RTMP: %s", e)
finally:
push_stream.close()
ffmpeg_process.kill()
transcriber.stop_transcribing_async()

return "\\\n".join(self.results)


Подробнее здесь: https://stackoverflow.com/questions/795 ... -azure-sdk
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»