annotate-audio / app.py
marianna13's picture
Update app.py
dd657ca
raw
history blame
2.71 kB
import gradio as gr
import json
import spacy
import re
import string
import pandas as pd
import os
import requests
from textwrap import wrap
import gspread
os.system('python -m spacy download en_core_web_sm')
nlp = spacy.load("en_core_web_sm")
nlp.add_pipe('sentencizer')
def download_and_save_file(URL, audio_dir):
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'referer': 'https://www.google.com/',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'en-US,en;q=0.9,',
'cookie': 'prov=6bb44cc9-dfe4-1b95-a65d-5250b3b4c9fb; _ga=GA1.2.1363624981.1550767314; __qca=P0-1074700243-1550767314392; notice-ctt=4%3B1550784035760; _gid=GA1.2.1415061800.1552935051; acct=t=4CnQ70qSwPMzOe6jigQlAR28TSW%2fMxzx&s=32zlYt1%2b3TBwWVaCHxH%2bl5aDhLjmq4Xr',
}
doc = requests.get(URL, headers=headers)
file_name = URL.split('/')[-1].split('?')[0]
audio_path = f'{audio_dir}/{file_name}'
with open(audio_path, 'wb') as f:
f.write(doc.content)
return audio_path
credentials = os.environ['CREDENTIALS']
data = json.loads(credentials, strict=False)
with open('credentials.json', 'w') as f:
json.dump(data, f)
gc = gspread.service_account(filename='credentials.json')
sh = gc.open('Annotated CC Audio')
worksheet = sh.sheet1
df = pd.DataFrame(worksheet.get_all_records())
sample_df = df[df['caption']==''].sample(1)
title = '🎵 Annotate audio'
description = '''Choose a sentence that describes audio the best if there's no such sentence please choose `No audio description`'''
audio_dir = 'AUDIO'
os.makedirs(audio_dir, exist_ok=True)
audio_id, audio_url, full_text, _ = sample_df.values[0]
audio_path = download_and_save_file(audio_url, audio_dir)
full_text = full_text.translate(str.maketrans('', '', string.punctuation))
sents = ['\n'.join(wrap(re.sub(r'###audio###\d###', '', s.text), width=70) )for s in nlp(full_text).sents]
sents.append('No audio description')
def audio_demo(cap, audio, audio_id):
df.at[int(audio_id)-1, 'caption'] = cap
worksheet.update([df.columns.values.tolist()] + df.values.tolist())
return 'success!'
iface = gr.Interface(
audio_demo,
inputs=[gr.Dropdown(sents, label='audio description'), gr.Audio(audio_path, type="filepath"), gr.Textbox(value=audio_id, visible=False)],
outputs=[gr.Textbox(label="output")],
allow_flagging="never",
title=title,
description=description,
)
if __name__ == "__main__":
iface.launch(show_error=True, debug=True)