|
import streamlit as st |
|
import speech_recognition as sr |
|
import os |
|
|
|
|
|
def recognize_speech_from_file(file, language="en-US"): |
|
recognizer = sr.Recognizer() |
|
|
|
|
|
with sr.AudioFile(file) as source: |
|
audio = recognizer.record(source) |
|
try: |
|
|
|
text = recognizer.recognize_google(audio, language=language) |
|
return text |
|
except sr.UnknownValueError: |
|
return "❌ Не удалось распознать речь. Попробуйте снова." |
|
except sr.RequestError as e: |
|
return f"❌ Ошибка сервиса распознавания речи: {e}" |
|
|
|
|
|
st.title("🎙️ Веб-диктофон и распознавание речи") |
|
st.write("Запишите звук прямо в браузере, загрузите его и распознайте текст.") |
|
|
|
|
|
language = st.radio("Выберите язык для распознавания:", ("Русский", "Английский")) |
|
language_code = "ru-RU" if language == "Русский" else "en-US" |
|
|
|
|
|
st.markdown(""" |
|
<h3>🎤 Запись звука через браузер</h3> |
|
<p>Нажмите "Start Recording", чтобы начать запись, и "Stop Recording", чтобы завершить.</p> |
|
<button id="start" onclick="startRecording()">Start Recording</button> |
|
<button id="stop" onclick="stopRecording()" disabled>Stop Recording</button> |
|
<p><strong>Внимание:</strong> После завершения записи появится кнопка для сохранения аудио.</p> |
|
<script> |
|
let mediaRecorder; |
|
let audioChunks = []; |
|
|
|
// Начало записи |
|
function startRecording() { |
|
audioChunks = []; |
|
navigator.mediaDevices.getUserMedia({ audio: true }) |
|
.then(stream => { |
|
mediaRecorder = new MediaRecorder(stream); |
|
mediaRecorder.start(); |
|
|
|
mediaRecorder.addEventListener("dataavailable", event => { |
|
audioChunks.push(event.data); |
|
}); |
|
|
|
mediaRecorder.addEventListener("stop", () => { |
|
const audioBlob = new Blob(audioChunks, { type: 'audio/wav' }); |
|
const audioUrl = URL.createObjectURL(audioBlob); |
|
const downloadLink = document.createElement("a"); |
|
downloadLink.href = audioUrl; |
|
downloadLink.download = "recorded_audio.wav"; |
|
downloadLink.innerHTML = "💾 Сохранить аудио"; |
|
document.body.appendChild(downloadLink); |
|
}); |
|
|
|
document.getElementById("start").disabled = true; |
|
document.getElementById("stop").disabled = false; |
|
}); |
|
} |
|
|
|
// Остановка записи |
|
function stopRecording() { |
|
mediaRecorder.stop(); |
|
document.getElementById("start").disabled = false; |
|
document.getElementById("stop").disabled = true; |
|
} |
|
</script> |
|
""", unsafe_allow_html=True) |
|
|
|
|
|
uploaded_file = st.file_uploader("Загрузите записанный аудиофайл для распознавания:", type=["wav"]) |
|
|
|
if uploaded_file is not None: |
|
st.audio(uploaded_file, format="audio/wav") |
|
st.write("🔍 Распознаём текст из аудиофайла...") |
|
recognized_text = recognize_speech_from_file(uploaded_file, language=language_code) |
|
st.write("### Распознанный текст:") |
|
st.write(recognized_text) |