clap / app.py
imrafarafarafa's picture
Upload 3 files
dc1446d verified
import gradio as gr
from similarity import CLAPSimilarity
import matplotlib.pyplot as plt
# Initialize the CLAPSimilarity instance
similarity_calculator = CLAPSimilarity(training_embeddings_prefix='training')
def process_query(text, audio_file, max_tracks):
if text and not audio_file:
# Process text input
similarity_scores = similarity_calculator.compute_similarity(
input_data=text,
input_type='text',
max_tracks=int(max_tracks) # Use user-defined max_tracks
)
elif audio_file and not text:
# Process audio input
similarity_scores = similarity_calculator.compute_similarity(
input_data=audio_file,
input_type='audio',
max_tracks=int(max_tracks) # Use user-defined max_tracks
)
else:
return "Please provide either text or audio input."
# Calculate the total sum of scores
total_score = sum(similarity_scores.values())
# Normalize the scores to sum to 100%
normalized_scores = {
filename: (score / total_score) * 100
for filename, score in similarity_scores.items()
}
# Prepare the output data with normalized scores
data = [
[filename, round(score, 2)]
for filename, score in normalized_scores.items()
]
return data
with gr.Blocks() as demo:
with gr.Row():
text_input = gr.Textbox(label="Enter text query")
audio_input = gr.Audio(label="Upload audio", type="filepath")
max_tracks_input = gr.Number(
label="Max Tracks", value=10, precision=0
) # Add this input field
with gr.Row():
submit_btn = gr.Button("Submit")
output_table = gr.Dataframe(
headers=["Filename", "Score"],
label="Similarity Results",
datatype=["str", "number"],
interactive=False
)
submit_btn.click(
fn=process_query,
inputs=[text_input, audio_input, max_tracks_input], # Include max_tracks_input
outputs=[output_table]
)
demo.launch()