File size: 2,068 Bytes
dc1446d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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()