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)