mirror of
https://github.com/openai/whisper.git
synced 2025-11-24 06:26:03 +00:00
65 lines
2.5 KiB
Python
65 lines
2.5 KiB
Python
import streamlit as st
|
||
import os
|
||
from datetime import datetime
|
||
from whisper import load_model, transcribe
|
||
|
||
# Set up the app title and description
|
||
st.title("Whisper Audio Transcription")
|
||
st.write("Upload an audio file and choose a model to transcribe it using OpenAI's Whisper.")
|
||
|
||
# File uploader widget
|
||
uploaded_file = st.file_uploader("Choose an audio file...", type=["mp3", "wav", "m4a", "mp4"])
|
||
|
||
# Model selection widget
|
||
model_size = st.selectbox("Choose model size:", ["tiny", "base", "small", "medium", "large"])
|
||
|
||
# Define folders for temporary uploads and results
|
||
temp_upload_folder = "TempUploads"
|
||
results_folder = "Results"
|
||
os.makedirs(temp_upload_folder, exist_ok=True) # Create TempUploads if it doesn't exist
|
||
os.makedirs(results_folder, exist_ok=True) # Create Results if it doesn't exist
|
||
|
||
# Function to create a unique output folder for each transcription run
|
||
def create_output_folder(audio_file):
|
||
# Use the audio file name (without extension) and a timestamp to create a unique folder name
|
||
folder_name = os.path.splitext(os.path.basename(audio_file))[0]
|
||
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
||
output_folder = os.path.join(results_folder, f"{folder_name}_{timestamp}")
|
||
|
||
# Create the output folder if it doesn’t exist
|
||
os.makedirs(output_folder, exist_ok=True)
|
||
return output_folder
|
||
|
||
# Button to start transcription
|
||
if st.button("Transcribe"):
|
||
if uploaded_file is not None:
|
||
# Save the uploaded file temporarily with its original name in TempUploads
|
||
temp_file_path = os.path.join(temp_upload_folder, uploaded_file.name)
|
||
|
||
with open(temp_file_path, "wb") as f:
|
||
f.write(uploaded_file.getbuffer())
|
||
|
||
# Load the chosen Whisper model
|
||
model = load_model(model_size)
|
||
|
||
# Create a unique folder for the transcription output in Results
|
||
output_folder = create_output_folder(uploaded_file.name)
|
||
|
||
# Run transcription
|
||
try:
|
||
result = transcribe(model, temp_file_path)
|
||
|
||
# Save transcription to a text file in the output folder
|
||
output_file = os.path.join(output_folder, "transcription.txt")
|
||
with open(output_file, "w") as f:
|
||
f.write(result["text"])
|
||
|
||
# Display the transcription result in the app
|
||
st.write("### Transcription Result")
|
||
st.write(result["text"])
|
||
st.write(f"Transcription saved to {output_file}")
|
||
|
||
except Exception as e:
|
||
st.write("An error occurred:", e)
|
||
else:
|
||
st.write("Please upload an audio file.") |