media_check / app.py
Rehman1603's picture
Update app.py
36582bd verified
import os
import gradio as gr
import torch
import whisper
from TTS.api import TTS
from torch.serialization import add_safe_globals
from TTS.tts.configs.xtts_config import XttsConfig
from TTS.tts.models.xtts import XttsAudioConfig, XttsArgs
from TTS.config.shared_configs import BaseDatasetConfig
from fetch_data import get_botpress_response
import requests, os, json
import warnings
import gradio as gr
import librosa
import torch
import numpy as np
from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
import assemblyai as aai
warnings.filterwarnings("ignore")
# Load model and processor
processor = Wav2Vec2Processor.from_pretrained("facebook/wav2vec2-base-960h")
model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h")
def process_media(media_id, access_token, phone_no_id, phone_no,business_id):
"""Process media ID to send audio message."""
# Fetch media URL
media_url = get_media_url(media_id, access_token, phone_no_id)
if not media_url:
return "Failed to fetch media URL."
# Download the voice note
audio_path = download_voice_note(media_url, access_token)
if not audio_path:
return "Failed to download voice note."
# Transcribe audio
transcription = audio_transcribe(audio_path)
if not transcription:
return "Hi"
return transcription
def audio_transcribe(audio_path):
try:
# Load and preprocess audio
aai.settings.api_key = "c3db74329eea4ff68b95888dca1e2d72"
transcriber = aai.Transcriber()
transcript = transcriber.transcribe(audio_path)
return transcript.text
except Exception as e:
return f"Error: {str(e)}"
def get_media_url(media_id, access_token, phone_no_id):
"""Fetch media URL from Facebook Graph API."""
url = f"https://graph.facebook.com/v21.0/{media_id}?phone_number_id={phone_no_id}"
headers = {'Authorization': f'Bearer {access_token}'}
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.json().get('url', None)
return None
def download_voice_note(url, access_token):
"""Download a voice note and store it in the current directory."""
headers = {"Authorization": f"Bearer {access_token}"}
response = requests.get(url, headers=headers, stream=True)
if response.status_code == 200:
file_name = "voice_note.mp3"
file_path = os.path.join(os.getcwd(), file_name) # Save to current directory
with open(file_path, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
print(f"✅ Download complete: {file_path}")
return file_path
else:
print(f"❌ Failed to download file. Status code: {response.status_code}")
return None
def upload_audio(audio_path, access_token, phone_no_id):
"""Upload an audio file to WhatsApp Business API."""
url = f"https://graph.facebook.com/v21.0/{phone_no_id}/media"
payload = {'messaging_product': 'whatsapp'}
with open(audio_path, 'rb') as audio_file:
files = [('file', ('output.ogg', audio_file, 'audio/ogg'))]
headers = {'Authorization': f'Bearer {access_token}'}
response = requests.post(url, headers=headers, data=payload, files=files)
print(f"response is {response.text}")
return response.json().get('id', None)
def send_audio(phone_no, audio_id, access_token, phone_no_id):
"""Send an audio message via WhatsApp API."""
url = f"https://graph.facebook.com/v21.0/{phone_no_id}/messages"
payload = json.dumps({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": phone_no,
"type": "audio",
"audio": {"id": audio_id}
})
headers = {'Content-Type': 'application/json', 'Authorization': f'Bearer {access_token}'}
try:
response = requests.post(url, headers=headers, data=payload)
response.raise_for_status()
print(response.text)
return response.json()
except requests.exceptions.RequestException as e:
return str(e)
# Gradio Interface
iface = gr.Interface(
fn=process_media,
inputs=[
gr.Textbox(label="Media ID"),
gr.Textbox(label="Access Token"),
gr.Textbox(label="Phone Number ID"),
gr.Textbox(label="Recipient Phone Number"),
gr.Textbox(label="Business ID")
],
outputs="text",
title="WhatsApp Audio Processor",
description="Enter Media ID, Access Token, Phone Number ID, and Recipient Phone Number to process and send audio."
)
iface.launch(debug=True)