Spaces:
Runtime error
Runtime error
from flask import Flask, request, jsonify, Response | |
import asyncio | |
from hypercorn.asyncio import serve | |
from hypercorn.config import Config | |
import os | |
os.environ['CURL_CA_BUNDLE'] = '' | |
app = Flask(__name__) | |
transcriptions = {} | |
def handle_transcription(username): | |
if request.method == 'POST': | |
data = request.get_json() | |
new_word = data.get('transcription', '') | |
# Append new word to the user's transcription list | |
transcriptions.setdefault(username, []).append(new_word) | |
# Remove the 20th last word if more than 20 words are present | |
if len(transcriptions[username]) > 1: | |
transcriptions[username].pop(0) | |
# Join the words to form the updated transcription | |
updated_transcription = ' '.join(transcriptions[username]) | |
return jsonify({"status": "success", "message": "Word added", "transcription": updated_transcription}) | |
elif request.method == 'GET': | |
transcription = ' '.join(transcriptions.get(username, [])) | |
return transcription if transcription else 'N/A' | |
def home(): | |
html_content = """ | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<title>Speech to Text</title> | |
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> | |
</head> | |
<body> | |
<h1>Speech Recognition</h1> | |
<button id="start">Start Listening</button> | |
<button id="stop">Stop Listening</button> | |
<div> | |
<label for="language">Language:</label> | |
<select id="language"> | |
<option value="en-US">English (US)</option> | |
<option value="es-ES">Spanish (Spain)</option> | |
<option value="fr-FR">French</option> | |
<option value="de-DE">German (Germany)</option> | |
<option value="it-IT">Italian (Italy)</option> | |
<option value="ja-JP">Japanese (Japan)</option> | |
<option value="ko-KR">Korean (South Korea)</option> | |
<option value="pt-PT">Portuguese (Portugal)</option> | |
<option value="pt-BR">Portuguese (Brazil)</option> | |
<option value="ru-RU">Russian (Russia)</option> | |
<option value="sv-SE">Swedish (Sweden)</option> | |
<option value="tr-TR">Turkish (Turkey)</option> | |
<option value="hi-IN">Hindi (India)</option> | |
<option value="nl-NL">Dutch (Netherlands)</option> | |
<option value="el-GR">Greek (Greece)</option> | |
<option value="he-IL">Hebrew (Israel)</option> | |
<option value="hu-HU">Hungarian (Hungary)</option> | |
<option value="id-ID">Indonesian (Indonesia)</option> | |
<option value="no-NO">Norwegian (Norway)</option> | |
<option value="pl-PL">Polish (Poland)</option> | |
<option value="ro-RO">Romanian (Romania)</option> | |
<option value="th-TH">Thai (Thailand)</option> | |
<option value="vi-VN">Vietnamese (Vietnam)</option> | |
<option value="uk-UA">Ukrainian (Ukraine)</option> | |
<option value="ur-PK">Urdu (Pakistan)</option> | |
<!-- Add more languages as needed --> | |
</select> | |
</div> | |
<div> | |
<label for="username">Username:</label> | |
<input type="text" id="username" placeholder="Enter your username"> | |
</div> | |
<div id="transcription" style="border: 1px solid #ccc; padding: 10px; margin-top: 5px; min-height: 50px;"></div> | |
<script> | |
window.SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; | |
if (!window.SpeechRecognition) { | |
alert("Your browser does not support Speech Recognition. Try Google Chrome."); | |
} | |
// ... existing code ... | |
let recognition = new window.SpeechRecognition(); | |
recognition.continuous = true; | |
recognition.interimResults = true; | |
let liveOutput = document.getElementById('transcription'); | |
let lastTranscription = ''; | |
// Function to update language | |
function updateLanguage() { | |
let selectedLanguage = document.getElementById('language').value; | |
recognition.lang = selectedLanguage; | |
} | |
// Set initial language | |
updateLanguage(); | |
// Update language when user changes selection | |
document.getElementById('language').addEventListener('change', updateLanguage); | |
// ... rest of your existing code ... | |
recognition.onresult = (event) => { | |
let currentTranscription = ''; | |
for (const result of event.results) { | |
currentTranscription = result[0].transcript; | |
} | |
liveOutput.textContent = currentTranscription; | |
if (lastTranscription !== currentTranscription) { | |
lastTranscription = currentTranscription; | |
sendTranscriptionToServer(currentTranscription); | |
} | |
}; | |
recognition.onerror = (event) => { | |
console.error('Speech recognition error', event.error); | |
recognition.start(); | |
}; | |
recognition.onend = () => { | |
// Automatically restart the recognition when it ends | |
recognition.start(); | |
}; | |
function sendTranscriptionToServer(transcription) { | |
let username = document.getElementById('username').value; | |
$.ajax({ | |
url: 'https://johnpaulbin-api-test-stt.hf.space/' + username, | |
type: 'POST', | |
contentType: 'application/json', | |
data: JSON.stringify({ transcription: transcription }), | |
success: function(response) { | |
console.log('Transcription sent', response); | |
}, | |
error: function(error) { | |
console.error('Error sending transcription', error); | |
} | |
}); | |
} | |
document.getElementById('start').addEventListener('click', () => { | |
recognition.start(); | |
}); | |
document.getElementById('stop').addEventListener('click', () => { | |
recognition.stop(); | |
}); | |
</script> | |
</body> | |
</html> | |
""" | |
return Response(html_content, mimetype='text/html') | |
if __name__ == "__main__": | |
config = Config() | |
config.bind = ["0.0.0.0:7860"] # You can specify the host and port here | |
asyncio.run(serve(app, config)) |