Devved11's picture
Upload 6 files
f639be2 verified
from fastapi import FastAPI, Header, HTTPException
from pydantic import BaseModel
import base64
import numpy as np
import pydub
import tempfile
import os
from dotenv import load_dotenv
load_dotenv()
from models import detect_audio
app = FastAPI(title="AI-Generated Voice Detection API - GUVI Hackathon")
API_KEY = os.getenv("API_KEY")
class AudioInput(BaseModel):
language: str
audioFormat: str
audioBase64: str
@app.post("/api/voice-detection")
def detect_voice(
input_data: AudioInput,
x_api_key: str = Header(None, alias="x-api-key")
):
if x_api_key != API_KEY:
raise HTTPException(status_code=401, detail="Invalid API key")
if input_data.audioFormat.lower() != "mp3":
raise HTTPException(status_code=400, detail="Only mp3 supported")
try:
audio_bytes = base64.b64decode(input_data.audioBase64)
with tempfile.NamedTemporaryFile(suffix=".mp3", delete=False) as tmp:
tmp.write(audio_bytes)
tmp_path = tmp.name
try:
segment = pydub.AudioSegment.from_file(tmp_path, format="mp3")
finally:
os.remove(tmp_path)
segment = segment.set_channels(1).set_frame_rate(16000)
samples = segment.get_array_of_samples()
y = np.array(samples, dtype=np.float32) / 32768.0
classification, confidence, explanation = detect_audio(y)
return {
"status": "success",
"languageProvided": input_data.language,
"classification": classification,
"confidenceScore": confidence,
"explanation": explanation
}
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))
@app.get("/health")
def health():
return {"status": "healthy"}
@app.get("/")
def root():
return {"message": "AI Voice Detection API - Ready"}