For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/ai-machine-learning/ai-ecosystem-voxist-models.md.

AI Partners Ecosystem - Voxist - Concept des modèles

Voir en Markdown

Découvrez comment utiliser les modèles Voxist

Objectif

OVHcloud propose différents services d'Intelligence Artificielle grâce à son AI Partners Ecosystem. Vous bénéficierez d'un catalogue d'applications prêtes à l'emploi fournies par nos partenaires, que vous pourrez facilement déployer selon vos besoins grâce à AI Deploy.

Voxist est un partenaire OVHcloud qui propose des services d'IA dédiés à la reconnaissance vocale et au traitement du langage naturel. Ce guide vous permettra de bien comprendre le fonctionnement des services Voxist.

Info

Pour en savoir plus sur la facturation, le lancement et les fonctionnalités de Voxist, reportez-vous à ce guide.

Introduction

Voxist est une start-up française spécialisée dans la reconnaissance vocale. La plateforme permet à toutes les organisations, des start-ups aux grands groupes, d'effectuer de la reconnaissance vocale automatique.

La reconnaissance vocale est prise en charge par deux API :

  • une API REST pour la reconnaissance vocale asynchrone, avec prise en charge de la diarisation
  • une API WebSocket pour la reconnaissance vocale synchrone

Langues prises en charge : français, anglais, allemand, espagnol, portugais, italien, polonais

Info

Bientôt disponibles : néerlandais et hébreu

API REST Voxist

API Speech to text

Transcription

Cet endpoint transcrit un enregistrement audio en objet JSON. Des paramètres de configuration peuvent être transmis pour spécifier une langue, activer la reconnaissance de la ponctuation et la diarisation.

  • URL : /transcribe

  • Méthode : POST

  • Payload :

Envoyez les paramètres de configuration et les fichiers audio en utilisant le Content-Type multipart/form-data.

Paramètres de configuration (paramètre form-data config)

{
  "punctuation": Boolean,
  "lang": String,
  "sample_rate": Integer,
  "diarization": Boolean,
  "wait": Boolean,
}
  • punctuation : [true, false] : active la ponctuation dans le résultat (par défaut : false)
  • lang : ["fr", "en", "es", "pt", "it", "de", "pl"] : définit la langue de l'audio en entrée (par défaut : "en")
  • sample_rate : [8000, 16000] : la valeur par défaut est 8 kHz.
  • wait : [true, false] : la valeur par défaut est true. La requête attendra la fin de la transcription avant de renvoyer un résultat. Si la valeur est false, la requête renverra immédiatement un identifiant de job ainsi qu'une estimation du temps d'exécution.

Exemple de configuration :

{
  "punctuation": false,
  "lang": "fr",
  "sample_rate": 16000,
  "diarization": true,
  "wait": false,
}

Réponse en cas de succès

  • Code : 200 OK

  • Contenu de la réponse :

[
  {
    "Lexical":String,
    "Confidence":Number,
    "Start_time":Number,
    "Speaker":Number,
    "Duration":Number
  },
// ...
]
  • Lexical : transcription du segment
  • Confidence : confiance de la transcription
  • Start_time : décalage du segment en secondes
  • Duration : durée du segment en secondes
  • Speaker : si la diarisation est active, identifie le locuteur avec un identifiant unique SPEAKER_00, SPEAKER_01.

Préparer les fichiers audio pour la transcription

Pour être transcrits correctement, les fichiers audio doivent être des fichiers WAV mono (canal unique). Vous pouvez utiliser FFmpeg pour convertir votre audio d'entrée au format approprié en suivant ces étapes :

  1. Installation : Assurez-vous d'abord que FFmpeg est installé sur votre machine. Si ce n'est pas le cas, téléchargez-le et installez-le depuis le site officiel ou utilisez votre gestionnaire de paquets si vous êtes sous Linux.

  2. Commande : Une fois FFmpeg installé, vous pouvez utiliser la commande suivante pour convertir un fichier audio :

    ffmpeg -i input_audio.ext -ac 1 -ar 16000 output_audio.wav

    Détaillons cette commande :

    • -i input_audio.ext : spécifie le fichier audio d'entrée nommé input_audio.ext, où ext est l'extension du fichier (par exemple mp3, aac, flac).
    • -ac 1 : définit le nombre de canaux audio en sortie à 1 (mono).
    • -ar 16000 : définit la fréquence d'échantillonnage de l'audio en sortie à 16 kHz.
    • output_audio.wav : le nom du fichier WAV en sortie.
  3. Exécution : Remplacez input_audio.ext par le nom et l'extension de votre fichier audio source, puis exécutez la commande. FFmpeg traitera ensuite le fichier et produira le fichier WAV converti sous le nom output_audio.wav.

Pensez à vous placer (via la ligne de commande) dans le répertoire contenant votre fichier audio, ou à indiquer le chemin complet dans la commande, pour que cela fonctionne correctement.

Appeler l'API avec curl

  • Prérequis :

Assurez-vous que curl est installé sur votre système. Utilisez éventuellement jq pour formater la sortie JSON.

Définissez les variables d'environnement appropriées dans votre shell.

FILE=audio-sample-en.wav
OVH_ENDPOINT=<set to endpoint>
  • Appel synchrone simple :
curl -X POST "$OVH_ENDPOINT/transcribe" \
 -H "Content-Type: multipart/form-data" \
 -H "accept: application/json" \
 -F "file_channel1=@$FILE;type=audio/x-wav" \
 -F config='{"lang": "en", "sample_rate": 16000, "punctuation": true, "wait": true}' | jq

Cela renverra un tableau JSON avec la structure suivante :

[
  {
    "Lexical": "Our political reporter Jack Fink hosted a Facebook Live discussion on Obamacare and he asked the panel if they agree with the president who says let Obamacare implode.",
    "Confidence": 1,
    "Start_time": 0.06,
    "Speaker": 1,
    "Duration": 9.719999999999999
  },
  {
    "Lexical": "When do we stop being held hostage by the insurance companies? That's the question. That's the real question. When do we stop being held hostage by them? When we move from a for-profit system to a not-for-profit system in our health care delivery. Being a veteran, the only example of single-payer United States of America is the VA hospital.",
    "Confidence": 1,
    "Start_time": 10.14,
    "Speaker": 1,
    "Duration": 20.13
  },
  {
    "Lexical": "Ain't way wrong answer.",
    "Confidence": 1,
    "Start_time": 30.27,
    "Speaker": 1,
    "Duration": 1.8000000000000007
  },
  {
    "Lexical": "It was a great discussion. If you missed it, you can still watch it. It's on our CBS DFW Facebook page.",
    "Confidence": 1,
    "Start_time": 32.07,
    "Speaker": 1,
    "Duration": 6.18
  }
]
  • Asynchrone avec diarisation :
curl -X POST "$OVH_ENDPOINT/transcribe" \
 -H "Content-Type: multipart/form-data" \
 -H "accept: application/json" \
 -F "file_channel1=@$FILE;type=audio/x-wav" \
 -F config='{"lang": "en", "sample_rate": 16000, "diarization": true, "wait": false}'

L'API renverra immédiatement :

{
  "jobid": "c1fabb36-12e0-42cd-8670-61bcbf9665dc",
  "estimated_time":47.86
}
  • jobid : un UUID représentant l'exécution du job
  • estimated_time : estimation prudente du temps de transcription en secondes. Il est fortement recommandé d'interroger le job après ce délai.

Récupérer la transcription :

curl "$OVH_ENDPOINT/transcription_result/c1fabb36-12e0-42cd-8670-61bcbf9665dc" \
 -H "accept: application/json"  | jq

Cela renverra un tableau JSON avec la structure suivante :

[
  {
    "Lexical": "Our political reporter Jack Fink hosted a Facebook Live discussion on Obamacare and he asked the panel if they agree with the president who says let Obamacare implode.",
    "Confidence": 1,
    "Start_time": 0.01,
    "Speaker": "SPEAKER_00",
    "Duration": 9.56
  },
  {
    "Lexical": "When do we stop being held hostage by the insurance companies? That's the question. That's the real question. When do we stop being held hostage by them?",
    "Confidence": 1,
    "Start_time": 10.11,
    "Speaker": "SPEAKER_01",
    "Duration": 7.8
  },
  {
    "Lexical": "when we move from a for-profit system to a not-for-profit system in our health care delivery.",
    "Confidence": 1,
    "Start_time": 17.81,
    "Speaker": "SPEAKER_02",
    "Duration": 7.08
  },
  {
    "Lexical": "Being a veteran, the only example of a single payer in the United States of America is the VA hospital. Ain't way wrong answer.",
    "Confidence": 1,
    "Start_time": 24.89,
    "Speaker": "SPEAKER_01",
    "Duration": 8.21
  },
  {
    "Lexical": "It was a great discussion. If you missed it, you can still watch it. It's on our CBS DFW Facebook page.",
    "Confidence": 1,
    "Start_time": 32.93,
    "Speaker": "SPEAKER_00",
    "Duration": 5.49
  }
]

API WebSocket Voxist

Avec l'API websocket

  • Payload :

Le premier message websocket envoyé est :

{
  "punctuation": Boolean,
  "lang": String,
  "sample_rate": Integer,
  "diarization": Boolean,
}
  • punctuation : [true, false] : active la ponctuation dans le résultat (par défaut : false)
  • lang : ["fr", "en", "es", "pt", "it", "de", "pl"] : définit la langue de l'audio en entrée (par défaut : "en")
  • sample_rate : [8000, 16000] : la valeur par défaut est 8 kHz

Appeler l'API en Python

  • Prérequis :

Installez les paquets requis :

pip install asyncio websockets wave
  • Code :
import asyncio
import json
import sys
import time
import wave
import websockets

async def run_test(uri):
    async with websockets.connect(uri) as websocket:
        wf = wave.open("`<path_to_audio_file>`", "rb")
        await websocket.send(
            '{ "config" : { "sample_rate" : %d, "lang" : "en"} }'
            % (wf.getframerate())
        )
        buffer_size = int(wf.getframerate() * 0.2)  # 0.2 seconds of audio
        while True:
            data = wf.readframes(buffer_size)

            if len(data) == 0 or isinstance(data, str):
                break
            await websocket.send(data)
            r = json.loads(await websocket.recv())
            if r["Text"] and r["Text"] != "":
                print(r)
        # time.sleep(10)
        await websocket.send('{"eof" : 1}')
        print(await websocket.recv())

asyncio.run(run_test("wss://`<ovh_app_endpoint>`"))
Info

Merci de bien vouloir remplacer :

  1. <path_to_audio_file> - ex : audios/audio-sample-en.wav
  2. <ovh_app_endpoint> - ex : 98b38dff-1db6-4250-96d9-02512251f247.app.gra.ai.cloud.ovh.net

Exécutez le code avec python3 asr-test.py

La transcription commence à s'afficher en continu sur la sortie standard.

{'Sentence_id': 1, 'Text': 'Our political reporter Jack Fink hosted a Facebook live discussion on Obamacare and he asked the panel if they agree with the president who says let Obamacare implode.', 'Confidence': 1}
{'Sentence_id': 2, 'Text': 'When do we stop being held hostage by the insurance companies?', 'Confidence': 1}
{'Sentence_id': 3, 'Text': "That's the question. That's the real question. When do we stop being held hostage by them? When we move from a for-profit system to a not-for-profit system in our healthcare.", 'Confidence': 1}
{'Sentence_id': 4, 'Text': 'delivery.', 'Confidence': 1}
{'Sentence_id': 5, 'Text': 'being a veteran.', 'Confidence': 1}
{'Sentence_id': 6, 'Text': 'The only example of a single payer in the United States of America is the VA hospital.', 'Confidence': 1}
{'Sentence_id': 7, 'Text': "Ain't way wrong answer.", 'Confidence': 1}
{"Sentence_id": 8, "Text": "It was a great discussion. If you missed it, you can still watch it. It's on our CBS DFW Facebook page.", "Confidence": 1, "Words": null}

Votre avis nous intéresse !

N’hésitez pas à nous faire part de vos questions, retours et suggestions pour améliorer le service :

Cette page vous a-t-elle aidé ?