|
import streamlit as st |
|
import sqlite3 |
|
from datetime import datetime |
|
import speech_recognition as sr |
|
from docx import Document |
|
from io import BytesIO |
|
|
|
|
|
def create_db(): |
|
conn = sqlite3.connect("records.db") |
|
c = conn.cursor() |
|
c.execute(""" |
|
CREATE TABLE IF NOT EXISTS records ( |
|
id INTEGER PRIMARY KEY AUTOINCREMENT, |
|
text TEXT, |
|
timestamp TEXT |
|
) |
|
""") |
|
conn.commit() |
|
conn.close() |
|
|
|
def insert_record(text, timestamp): |
|
conn = sqlite3.connect("records.db") |
|
c = conn.cursor() |
|
c.execute("INSERT INTO records (text, timestamp) VALUES (?, ?)", (text, timestamp)) |
|
conn.commit() |
|
conn.close() |
|
|
|
def fetch_records(): |
|
conn = sqlite3.connect("records.db") |
|
c = conn.cursor() |
|
c.execute("SELECT * FROM records") |
|
records = c.fetchall() |
|
conn.close() |
|
return records |
|
|
|
|
|
def speech_to_text(): |
|
recognizer = sr.Recognizer() |
|
with sr.Microphone() as source: |
|
st.info("Listening...") |
|
try: |
|
audio = recognizer.listen(source, timeout=10) |
|
text = recognizer.recognize_google(audio) |
|
return text |
|
except sr.UnknownValueError: |
|
return "Could not understand audio" |
|
except sr.RequestError as e: |
|
return f"Error: {e}" |
|
|
|
|
|
def create_document(content): |
|
doc = Document() |
|
doc.add_heading("Recorded Text", level=1) |
|
doc.add_paragraph(content) |
|
buffer = BytesIO() |
|
doc.save(buffer) |
|
buffer.seek(0) |
|
return buffer |
|
|
|
|
|
def main(): |
|
create_db() |
|
st.title("Voice to Text App") |
|
|
|
|
|
st.header("1. Record Your Voice") |
|
if st.button("Record Voice"): |
|
text = speech_to_text() |
|
if text: |
|
st.success("Text Recorded!") |
|
st.write(text) |
|
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") |
|
insert_record(text, timestamp) |
|
|
|
|
|
st.header("2. View Saved Records") |
|
records = fetch_records() |
|
for record in records: |
|
st.write(f"{record[1]} (Recorded on {record[2]})") |
|
|
|
|
|
st.header("3. Download or Share Document") |
|
if records: |
|
if st.button("Generate Document"): |
|
content = "\n\n".join([f"{rec[1]} (Recorded on {rec[2]})" for rec in records]) |
|
doc_file = create_document(content) |
|
st.download_button("Download Document", doc_file, "recorded_text.docx") |
|
|
|
if __name__ == "__main__": |
|
main() |
|
|