import gradio as gr
from gradio_client import Client, handle_file
import os
client = Client(f"ahmedJaafari/{os.getenv('PRIVATE_REPO_ID')}", hf_token=os.getenv('HF_TOKEN'))
# Function to make the API call and return the result
def verify_speakers(audio1, audio2):
result = client.predict(
audio1=handle_file(audio1),
audio2=handle_file(audio2),
api_name="/predict"
)
# Assuming result is a confidence score between 0 and 100
if result > 75:
return "
Speakers are similar
"
else:
return "Speakers are not similar
"
# Define the interface for file upload tab
with gr.Blocks() as file_upload_interface:
with gr.Tab("File Upload"):
with gr.Row(): # Align inputs in a single column
audio1_upload = gr.Audio(type="filepath", label="Upload First Audio File")
audio2_upload = gr.Audio(type="filepath", label="Upload Second Audio File")
result_file_upload = gr.HTML(label="Result", elem_id="result_html")
submit_button_file = gr.Button("Submit")
submit_button_file.click(fn=verify_speakers, inputs=[audio1_upload, audio2_upload], outputs=result_file_upload)
# Define the interface for microphone tab
with gr.Blocks() as microphone_interface:
with gr.Tab("Microphone Input"):
with gr.Row(): # Align inputs in a single column
audio1_mic = gr.Microphone(type="filepath", label="Record First Audio")
audio2_mic = gr.Microphone(type="filepath", label="Record Second Audio")
result_mic = gr.HTML(label="Result", elem_id="result_html_mic")
submit_button_mic = gr.Button("Submit")
submit_button_mic.click(fn=verify_speakers, inputs=[audio1_mic, audio2_mic], outputs=result_mic)
# Combine both interfaces into tabs
with gr.Blocks(css=".gradio-container { text-align: center; } .image-container {display: flex; justify-content: center; align-items: center;} ") as app: # Center the container
gr.Markdown("""
# Cord by Annarabic - Speaker Verification Tool
This tool, distributed by **IRON HORSE**, allows you to verify if two speakers are the same by either uploading audio files or recording audio directly using your microphone.
After submission, the system will analyze the recordings and determine if the speakers are similar.
If you have any questions or would like to learn more, feel free to reach out at [contact@annarabic.com](mailto:contact@annarabic.com) or visit our website at [www.annarabic.com](https://www.annarabic.com).
""")
with gr.Tabs():
with gr.TabItem("Upload Audio Files"):
file_upload_interface.render()
with gr.TabItem("Record Using Microphone"):
microphone_interface.render()
# Launch the Gradio app
app.launch()