Dmtlant commited on
Commit
ebf0608
·
verified ·
1 Parent(s): 851a2cd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +89 -83
app.py CHANGED
@@ -1,84 +1,90 @@
 
 
 
 
 
 
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)
15
- return text
16
- except sr.UnknownValueError:
17
- return "❌ Не удалось распознать речь. Попробуйте снова."
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)
 
1
+ import asyncio
2
+ import websockets
3
+ import json
4
+ import matplotlib.pyplot as plt
5
+ import pandas as pd
6
+ from datetime import datetime
7
  import streamlit as st
8
+
9
+ # Список криптовалют для отслеживания
10
+ cryptos = ['BTCUSDT', 'ETHUSDT', 'LTCUSDT']
11
+
12
+ # Словарь для хранения данных
13
+ data = {crypto: {'prices': [], 'times': []} for crypto in cryptos}
14
+
15
+ # Инициализация Streamlit
16
+ st.title('Crypto Advisor')
17
+ charts = {crypto: st.empty() for crypto in cryptos}
18
+ advice_boxes = {crypto: st.empty() for crypto in cryptos}
19
+
20
+ # Функция для подключения к веб-сокету Binance и получения данных
21
+ async def get_crypto_data():
22
+ uri = 'wss://stream.binance.com:9443/stream'
23
+ stream = '/'.join([f'{crypto.lower()}@trade' for crypto in cryptos])
24
+ url = f'{uri}?streams={stream}'
25
+
26
+ async with websockets.connect(url) as websocket:
27
+ while True:
28
+ response = await websocket.recv()
29
+ data_dict = json.loads(response)['data']
30
+ symbol = data_dict['s']
31
+ price = float(data_dict['p'])
32
+ time = datetime.fromtimestamp(data_dict['T'] / 1000)
33
+
34
+ if symbol in data:
35
+ # Обновление данных
36
+ data[symbol]['prices'].append(price)
37
+ data[symbol]['times'].append(time)
38
+
39
+ # Ограничение длины списка до 100 последних значений
40
+ if len(data[symbol]['prices']) > 100:
41
+ data[symbol]['prices'].pop(0)
42
+ data[symbol]['times'].pop(0)
43
+
44
+ # Обновление графика и советов
45
+ update_chart(symbol)
46
+ give_advice(symbol, price)
47
+
48
+ # Функция для обновления графика
49
+ def update_chart(symbol):
50
+ fig, ax = plt.subplots()
51
+ ax.plot(data[symbol]['times'], data[symbol]['prices'], label=symbol)
52
+ ax.set_xlabel('Time')
53
+ ax.set_ylabel('Price (USDT)')
54
+ ax.set_title(f'{symbol} Price')
55
+ ax.legend()
56
+ charts[symbol].pyplot(fig)
57
+
58
+ # Функция для выдачи советов
59
+ def give_advice(symbol, price):
60
+ if len(data[symbol]['prices']) < 2:
61
+ advice_boxes[symbol].text(f'{symbol}: Not enough data yet.')
62
+ return
63
+
64
+ last_price = data[symbol]['prices'][-2]
65
+ current_price = price
66
+
67
+ if current_price > last_price:
68
+ advice = f'{symbol}: Price is increasing. Consider buying.'
69
+ elif current_price < last_price:
70
+ advice = f'{symbol}: Price is decreasing. Consider selling.'
71
+ else:
72
+ advice = f'{symbol}: Price is stable. Hold for now.'
73
+
74
+ advice_boxes[symbol].text(advice)
75
+
76
+ # Функция для запуска асинхронного цикла
77
+ def run_event_loop():
78
+ loop = asyncio.new_event_loop()
79
+ asyncio.set_event_loop(loop)
80
+ loop.run_until_complete(get_crypto_data())
81
+
82
+ # Запуск приложения
83
+ if __name__ == '__main__':
84
+ st.write('Connecting to Binance...')
85
+ st.write('Please wait for the data to start streaming.')
86
+
87
+ # Запуск асинхронного цикла в отдельном потоке
88
+ import threading
89
+ thread = threading.Thread(target=run_event_loop)
90
+ thread.start()