Spaces:
Running
Running
import requests | |
import gradio as gr | |
import os | |
import torch | |
import json | |
# Check if CUDA is available and set the device accordingly | |
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') | |
API_URL = "https://api-inference.huggingface.co/models/MIT/ast-finetuned-audioset-10-10-0.4593" | |
headers = {"Authorization": f"Bearer {os.environ.get('HF_TOKEN')}"} | |
def format_error(message): | |
"""Helper function to format error messages as JSON""" | |
return [{"error": message}] | |
def classify_audio(audio_file): | |
""" | |
Classify the uploaded audio file using Hugging Face AST model | |
""" | |
if audio_file is None: | |
return format_error("Please upload an audio file.") | |
try: | |
# Debug: Print token status (masked) | |
token = os.environ.get('HF_TOKEN') | |
if not token: | |
return format_error("Error: HF_TOKEN environment variable is not set. Please set your Hugging Face API token.") | |
print(f"Token present: {'Yes' if token else 'No'}, Token length: {len(token) if token else 0}") | |
# Debug: Print audio file info | |
print(f"Audio file path: {audio_file.name}") | |
print(f"Audio file size: {os.path.getsize(audio_file.name)} bytes") | |
with open(audio_file.name, "rb") as f: | |
data = f.read() | |
print("Sending request to Hugging Face API...") | |
response = requests.post(API_URL, headers=headers, data=data) | |
# Print response for debugging | |
print(f"Response status code: {response.status_code}") | |
print(f"Response headers: {dict(response.headers)}") | |
print(f"Response content: {response.content.decode('utf-8', errors='ignore')}") | |
if response.status_code == 200: | |
results = response.json() | |
# Format results for better readability | |
formatted_results = [] | |
for result in results: | |
formatted_results.append({ | |
'label': result['label'], | |
'score': f"{result['score']*100:.2f}%" | |
}) | |
return formatted_results | |
elif response.status_code == 401: | |
return format_error("Error: Invalid or missing API token. Please check your Hugging Face API token.") | |
elif response.status_code == 503: | |
return format_error("Error: Model is loading. Please try again in a few seconds.") | |
else: | |
error_msg = f"Error: API returned status code {response.status_code}\n" | |
error_msg += f"Response headers: {dict(response.headers)}\n" | |
error_msg += f"Response: {response.text}" | |
return format_error(error_msg) | |
except Exception as e: | |
import traceback | |
error_details = traceback.format_exc() | |
return format_error(f"Error processing audio: {str(e)}\nDetails:\n{error_details}") | |
# Create Gradio interface | |
iface = gr.Interface( | |
fn=classify_audio, | |
inputs=gr.Audio(type="filepath", label="Upload Audio File"), | |
outputs=gr.JSON(label="Classification Results"), | |
title="Audio Classification using AST Model", | |
description="Upload an audio file to get its classification results using the Audio Spectrogram Transformer model.", | |
examples=[], | |
) | |
# Launch the interface | |
if __name__ == "__main__": | |
iface.launch(server_name="0.0.0.0", server_port=7860) |