File size: 4,142 Bytes
af20c67 bb122a6 cb152c0 c890329 cb152c0 bb122a6 af20c67 cb152c0 bb122a6 23856b9 bb122a6 c890329 bb122a6 cb152c0 c890329 cb152c0 bb122a6 cb152c0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
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}"
# Интерфейс Streamlit
st.title("🎙️ Веб-диктофон и распознавание речи")
st.write("Запишите звук прямо в браузере, загрузите его и распознайте текст.")
# Выбор языка для распознавания
language = st.radio("Выберите язык для распознавания:", ("Русский", "Английский"))
language_code = "ru-RU" if language == "Русский" else "en-US"
# HTML и JavaScript для записи звука
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) |