bofenghuang's picture
up
1cdb121
---
license: mit
language: fr
datasets:
- mozilla-foundation/common_voice_13_0
tags:
- automatic-speech-recognition
---
# Wav2vec2-CTC-based French Phonemizer
## Usage
*Infer audio*
```python
import soundfile as sf
import torch
from transformers import AutoModelForCTC, AutoProcessor, pipeline
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
# Load model
model_name_or_path = "bofenghuang/phonemizer-wav2vec2-ctc-french"
processor = AutoProcessor.from_pretrained(model_name_or_path)
model_sample_rate = processor.feature_extractor.sampling_rate
model = AutoModelForCTC.from_pretrained(model_name_or_path, torch_dtype=torch_dtype)
model.to(device)
# Init pipeline
pipe = pipeline(
"automatic-speech-recognition",
model=model,
feature_extractor=processor.feature_extractor,
tokenizer=processor.tokenizer,
torch_dtype=torch_dtype,
device=device,
)
# Example audio
audio_file_path = "/path/to/example/wav/file"
# Infer with pipeline
result = pipe(audio_file_path)
print(result["text"])
# Infer w/ lower-level api
waveform, sample_rate = sf.read(audio_file_path, start=0, frames=-1, dtype="float32", always_2d=False)
input_dict = processor(waveform, sampling_rate=model_sample_rate, return_tensors="pt")
with torch.inference_mode():
input_values = input_dict.input_values.to(device, dtype=torch_dtype)
logits = model(input_values).logits
predicted_ids = torch.argmax(logits, dim=-1)
predicted_text = processor.batch_decode(predicted_ids)[0]
print(predicted_text)
```
*Phonemes were generated using the following code snippet:*
```python
# !pip install phonemizer
from phonemizer.backend import EspeakBackend
from phonemizer.separator import Separator
# initialize the espeak backend for French
backend = EspeakBackend("fr-fr", language_switch="remove-flags")
# separate phones by a space and ignoring words boundaries
separator = Separator(phone=None, word=" ", syllable="")
def phonemize_text_phonemizer(s):
return backend.phonemize([s], separator=separator, strip=True, njobs=1)[0]
input_str = "ce modèle est utilisé pour identifier les phonèmes dans l'audio entrant"
print(phonemize_text_phonemizer(input_str))
# 'sə modɛl ɛt ytilize puʁ idɑ̃tifje le fonɛm dɑ̃ lodjo ɑ̃tʁɑ̃'
```
## Acknowledgement
Inspired by [Cnam-LMSSC/wav2vec2-french-phonemizer](https://huggingface.co/Cnam-LMSSC/wav2vec2-french-phonemizer)