Spaces:
Sleeping
Sleeping
File size: 5,835 Bytes
6d40dd0 b5fadc4 69067ae 6d40dd0 b5fadc4 9061ed1 989be25 6d40dd0 37d87bb 0197ed3 6d40dd0 69067ae 6d40dd0 7494646 0989798 6d40dd0 0989798 37d87bb 7494646 6d40dd0 37d87bb 7467739 2d7d678 6d40dd0 37d87bb 2d7d678 7467739 6d40dd0 7467739 685e8d2 837f789 8994492 b5fadc4 37d87bb b5fadc4 9061ed1 6d40dd0 b5fadc4 9061ed1 37d87bb a3e60d6 837f789 989be25 6d40dd0 989be25 6d40dd0 989be25 6d40dd0 f81f6f3 6d40dd0 837f789 784c9d5 837f789 ac4654b 837f789 6d40dd0 837f789 784c9d5 6d40dd0 837f789 784c9d5 6d40dd0 837f789 c36f3c7 837f789 37d87bb c36f3c7 6d40dd0 837f789 6d40dd0 7467739 69067ae 7467739 8ab530a 69067ae b5fadc4 8ab530a 7494646 8994492 b5fadc4 8994492 b5fadc4 8994492 37d87bb c36f3c7 7494646 9061ed1 0197ed3 6d40dd0 69067ae 6d40dd0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
import os
import logging
import time
import torch
from flask import Flask, render_template, request, jsonify
from transformers import pipeline, AutoConfig
from gtts import gTTS
from pydub import AudioSegment
from pydub.silence import detect_nonsilent
from simple_salesforce import Salesforce
from waitress import serve
import requests
# Initialize Flask app
app = Flask(__name__)
# Set the secret key to handle sessions securely
app.secret_key = os.getenv("SECRET_KEY", "sSSjyhInIsUohKpG8sHzty2q")
# Configure the session type
app.config["SESSION_TYPE"] = "filesystem"
app.config["SESSION_COOKIE_NAME"] = "my_session"
app.config["SESSION_COOKIE_SECURE"] = True
app.config["SESSION_COOKIE_SAMESITE"] = "None"
# Initialize the session (Make sure to import Session at the top of your file)
from flask_session import Session
Session(app)
# Set up logging
logging.basicConfig(level=logging.INFO)
# Set device for torch
device = "cuda" if torch.cuda.is_available() else "cpu"
# Create config object for Whisper model
config = AutoConfig.from_pretrained("openai/whisper-small")
config.update({"timeout": 60})
# Create voice prompts
prompts = {
"welcome": "Welcome to Biryani Hub.",
"ask_name": "Tell me your name.",
"ask_email": "Please provide your email address.",
"thank_you": "Thank you for registration."
}
# Function to generate and save audio prompts
def generate_audio_prompt(text, filename):
try:
tts = gTTS(text)
tts.save(os.path.join("static", filename))
except gtts.tts.gTTSError as e:
logging.error(f"Error generating audio: {e}")
logging.info("Retrying after 5 seconds...")
time.sleep(5)
generate_audio_prompt(text, filename)
# Generate all prompts
for key, text in prompts.items():
generate_audio_prompt(text, f"{key}.mp3")
# Symbol mapping for proper recognition
SYMBOL_MAPPING = {
"at the rate": "@",
"at": "@",
"dot": ".",
"underscore": "_",
"hash": "#",
"plus": "+",
"dash": "-",
"comma": ",",
"space": " "
}
# Function to convert audio to WAV format
def convert_to_wav(input_path, output_path):
try:
audio = AudioSegment.from_file(input_path)
audio = audio.set_frame_rate(16000).set_channels(1)
audio.export(output_path, format="wav")
except Exception as e:
raise Exception(f"Audio conversion failed: {str(e)}")
# Function to check if audio contains speech
def is_silent_audio(audio_path):
audio = AudioSegment.from_wav(audio_path)
nonsilent_parts = detect_nonsilent(audio, min_silence_len=500, silence_thresh=audio.dBFS-16)
return len(nonsilent_parts) == 0
# Salesforce connection details
try:
logging.info("Attempting to connect to Salesforce...")
sf = Salesforce(username='[email protected]', password='Sati@1020', security_token='sSSjyhInIsUohKpG8sHzty2q')
logging.info("Connected to Salesforce successfully!")
except Exception as e:
logging.error(f"Failed to connect to Salesforce: {str(e)}")
# Route to validate user login
@app.route("/validate_login", methods=["POST"])
def validate_login():
try:
data = request.json
email = data.get("email")
mobile = data.get("mobile")
query = f"SELECT Id, Name FROM Customer_Login__c WHERE Email__c = '{email}' AND Phone_Number__c = '{mobile}'"
result = sf.query(query)
if result['totalSize'] > 0:
return jsonify({'success': True, 'message': 'User authenticated successfully.'}), 200
else:
return jsonify({'success': False, 'error': 'Invalid email or mobile number.'}), 400
except Exception as e:
logging.error(f"Error during login validation: {str(e)}")
return jsonify({'error': 'Something went wrong. Please try again later.'}), 500
# Route to serve the home page for voice-based login
@app.route("/")
def index():
return render_template("index.html")
# Route to capture email and mobile from voice
@app.route("/capture_email_and_mobile", methods=["POST"])
def capture_email_and_mobile():
try:
data = request.json
email = data.get("email")
mobile = data.get("mobile")
if not email or not mobile:
return jsonify({"error": "Email or mobile number is missing."}), 400
logging.info(f"Captured Email: {email}, Mobile: {mobile}")
return jsonify({"success": True, "message": "Email and mobile captured successfully."}), 200
except Exception as e:
logging.error(f"Error in capturing email and mobile: {str(e)}")
return jsonify({"error": "Something went wrong while processing."}), 500
# Route to handle audio transcription
@app.route("/transcribe", methods=["POST"])
def transcribe():
if "audio" not in request.files:
return jsonify({"error": "No audio file provided"}), 400
audio_file = request.files["audio"]
input_audio_path = os.path.join("static", "temp_input.wav")
output_audio_path = os.path.join("static", "temp.wav")
audio_file.save(input_audio_path)
try:
# Convert to WAV
convert_to_wav(input_audio_path, output_audio_path)
# Check for silence
if is_silent_audio(output_audio_path):
return jsonify({"error": "No speech detected. Please try again."}), 400
# Use Whisper ASR model for transcription
result = pipeline("automatic-speech-recognition", model="openai/whisper-small", device=0 if torch.cuda.is_available() else -1, config=config)
transcribed_text = result(output_audio_path)["text"].strip().capitalize()
return jsonify({"text": transcribed_text})
except Exception as e:
return jsonify({"error": f"Speech recognition error: {str(e)}"}), 500
# Start the production server
if __name__ == "__main__":
serve(app, host="0.0.0.0", port=7860)
|