Spaces:
Running
on
Zero
Running
on
Zero
import audeer | |
import audonnx | |
import numpy as np | |
def age_gender_apply(waveform): | |
age_labels = ['child', 'teenager', 'young adult', 'middle-aged adult', 'elderly'] | |
gender_labels = ['female', 'male'] | |
url = 'https://zenodo.org/record/7761387/files/w2v2-L-robust-6-age-gender.25c844af-1.1.1.zip' | |
cache_root = audeer.mkdir('cache') | |
model_root = audeer.mkdir('model') | |
sampling_rate = 16000 | |
archive_path = audeer.download_url(url, cache_root, verbose=True) | |
audeer.extract_archive(archive_path, model_root) | |
model = audonnx.load(model_root) | |
result = model(waveform, sampling_rate) | |
# Process age | |
age_label = result['logits_age'].squeeze() * 100.0 | |
if age_label <= 12: | |
age_label = 'child' | |
elif age_label <= 19: | |
age_label = 'teenager' | |
elif age_label <= 39: | |
age_label = 'young adult' | |
elif age_label <= 64: | |
age_label = 'middle-aged adult' | |
else: | |
age_label = 'elderly' | |
# Process gender | |
gender_label = result['logits_gender'].squeeze() | |
gender_label = gender_label[:2] # Remove child | |
gender_label = np.argmax(gender_label) | |
return age_label, gender_labels[gender_label] | |