Dmtlant commited on
Commit
cb152c0
·
verified ·
1 Parent(s): 23856b9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +65 -41
app.py CHANGED
@@ -1,21 +1,14 @@
1
- import os
2
  import streamlit as st
3
  import speech_recognition as sr
 
4
 
5
-
6
- # Функция для записи звука с микрофона с использованием `arecord` (Linux)
7
- def record_audio_linux(filename, duration=5):
8
- command = f"arecord -d {duration} -f cd {filename}"
9
- os.system(command) # Выполняем системную команду для записи
10
-
11
-
12
- # Функция для распознавания речи
13
- def recognize_speech_from_file(filename, language="en-US"):
14
  recognizer = sr.Recognizer()
15
 
16
- # Открываем записанный файл
17
- with sr.AudioFile(filename) as source:
18
- audio = recognizer.record(source) # Читаем аудио из файла
19
  try:
20
  # Распознаём речь
21
  text = recognizer.recognize_google(audio, language=language)
@@ -25,36 +18,67 @@ def recognize_speech_from_file(filename, language="en-US"):
25
  except sr.RequestError as e:
26
  return f"❌ Ошибка сервиса распознавания речи: {e}"
27
 
28
-
29
  # Интерфейс Streamlit
30
- st.title("🎙️ Диктофон и распознавание речи (без PyAudio)")
31
- st.write("Это приложение записывает вашу речь с помощью системных средств и распознаёт её (на русском или английском языке).")
32
 
33
- # Выбор языка
34
  language = st.radio("Выберите язык для распознавания:", ("Русский", "Английский"))
35
  language_code = "ru-RU" if language == "Русский" else "en-US"
36
 
37
- # Длительность записи
38
- duration = st.slider("Длительность записи (секунды):", 1, 10, 5)
39
-
40
- # Имя временного файла
41
- filename = "recorded_audio.wav"
42
-
43
- # Кнопка для начала записи
44
- if st.button("Начать запись"):
45
- # Проверяем, поддерживается ли команда `arecord`
46
- if os.system("which arecord") != 0:
47
- st.error("Для записи звука требуется утилита 'arecord'. Установите её с помощью команды: sudo apt install alsa-utils")
48
- else:
49
- st.write("🎙️ Идёт запись...")
50
- record_audio_linux(filename, duration)
51
- st.write("✅ Запись завершена!")
52
-
53
- # Распознаём речь
54
- st.write("🔍 Распознаём текст...")
55
- recognized_text = recognize_speech_from_file(filename, language=language_code)
56
- st.write("### Распознанный текст:")
57
- st.write(recognized_text)
58
-
59
- # Показываем аудиоплеер
60
- st.audio(filename, format="audio/wav")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
  import speech_recognition as sr
3
+ import os
4
 
5
+ # Функция для распознавания речи из загруженного файла
6
+ def recognize_speech_from_file(file, language="en-US"):
 
 
 
 
 
 
 
7
  recognizer = sr.Recognizer()
8
 
9
+ # Читаем аудио-файл
10
+ with sr.AudioFile(file) as source:
11
+ audio = recognizer.record(source) # Загружаем запись
12
  try:
13
  # Распознаём речь
14
  text = recognizer.recognize_google(audio, language=language)
 
18
  except sr.RequestError as e:
19
  return f"❌ Ошибка сервиса распознавания речи: {e}"
20
 
 
21
  # Интерфейс Streamlit
22
+ st.title("🎙️ Веб-диктофон и распознавание речи")
23
+ st.write("Запишите звук прямо в браузере, загрузите его и распознайте текст.")
24
 
25
+ # Выбор языка для распознавания
26
  language = st.radio("Выберите язык для распознавания:", ("Русский", "Английский"))
27
  language_code = "ru-RU" if language == "Русский" else "en-US"
28
 
29
+ # HTML и JavaScript для записи звука
30
+ st.markdown("""
31
+ <h3>🎤 Запись звука через браузер</h3>
32
+ <p>Нажмите "Start Recording", чтобы начать запись, и "Stop Recording", чтобы завершить.</p>
33
+ <button id="start" onclick="startRecording()">Start Recording</button>
34
+ <button id="stop" onclick="stopRecording()" disabled>Stop Recording</button>
35
+ <p><strong>Внимание:</strong> После завершения записи появится кнопка для сохранения аудио.</p>
36
+ <script>
37
+ let mediaRecorder;
38
+ let audioChunks = [];
39
+
40
+ // Начало записи
41
+ function startRecording() {
42
+ audioChunks = [];
43
+ navigator.mediaDevices.getUserMedia({ audio: true })
44
+ .then(stream => {
45
+ mediaRecorder = new MediaRecorder(stream);
46
+ mediaRecorder.start();
47
+
48
+ mediaRecorder.addEventListener("dataavailable", event => {
49
+ audioChunks.push(event.data);
50
+ });
51
+
52
+ mediaRecorder.addEventListener("stop", () => {
53
+ const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
54
+ const audioUrl = URL.createObjectURL(audioBlob);
55
+ const downloadLink = document.createElement("a");
56
+ downloadLink.href = audioUrl;
57
+ downloadLink.download = "recorded_audio.wav";
58
+ downloadLink.innerHTML = "💾 Сохранить аудио";
59
+ document.body.appendChild(downloadLink);
60
+ });
61
+
62
+ document.getElementById("start").disabled = true;
63
+ document.getElementById("stop").disabled = false;
64
+ });
65
+ }
66
+
67
+ // Остановка записи
68
+ function stopRecording() {
69
+ mediaRecorder.stop();
70
+ document.getElementById("start").disabled = false;
71
+ document.getElementById("stop").disabled = true;
72
+ }
73
+ </script>
74
+ """, unsafe_allow_html=True)
75
+
76
+ # Загрузка записанного файла
77
+ uploaded_file = st.file_uploader("Загрузите записанный аудиофайл для распознавания:", type=["wav"])
78
+
79
+ if uploaded_file is not None:
80
+ st.audio(uploaded_file, format="audio/wav") # Воспроизведение загруженного файла
81
+ st.write("🔍 Распознаём текст из аудиофайла...")
82
+ recognized_text = recognize_speech_from_file(uploaded_file, language=language_code)
83
+ st.write("### Распознанный текст:")
84
+ st.write(recognized_text)