FrenchDroneKeyword / gradio_utils.py
blanchon's picture
Update gradio_utils.py
8bf27de
raw
history blame contribute delete
No virus
1.29 kB
from typing import Callable, Optional
import numpy as np
import librosa
import gradio as gr
from datetime import datetime
def predict_gradio(data,
uniform_lambda,
sklearn_model,
label_transform,
target_sr: int = 22_050):
if data is None:
return
classes = sklearn_model.classes_
if label_transform is not None:
classes = label_transform.inverse_transform(classes)
y, sr = data[1], data[0]
y_original_signal = load_as_librosa(y, sr, target_sr=target_sr)
y_uniform = uniform_lambda(y_original_signal, target_sr).astype(np.float32)
prediction = sklearn_model.predict_proba(y_uniform.reshape(1, -1))
result = {str(label): float(confidence) for (
label, confidence) in zip(classes, prediction.flatten())}
print(f"{datetime.now()}")
return result
def load_as_librosa(y: np.ndarray, sr: int, target_sr: int = 22050) -> np.ndarray:
data_dtype = y.dtype
dtype_min = np.iinfo(data_dtype).min
dtype_max = np.iinfo(data_dtype).max
dtype_range = np.abs(dtype_max-dtype_min)
y_normalize = (y.astype(np.float32)-dtype_min)/dtype_range
y_normalize_resample = librosa.resample(y=y_normalize,
orig_sr=sr,
target_sr=target_sr)
return y_normalize_resample