
Partager:
Michael est un ingénieur logiciel polyglotte qui s'attache à réduire la complexité des systèmes et à les rendre plus prévisibles. Travaillant avec une variété de langages et d'outils, il partage son expertise technique avec des publics du monde entier lors de groupes d'utilisateurs et de conférences. Au quotidien, Michael est un ancien défenseur des développeurs chez Vonage, où il a passé son temps à apprendre, enseigner et écrire sur toutes sortes de technologies.
Transcription sur deux canaux avec enregistrement fractionné
Temps de lecture : 4 minutes
Dans le cadre de notre Voice API Nexmo vous permet d'enregistrer des parties (ou la totalité) d'un appel et de récupérer l'audio une fois l'appel terminé. Aujourd'hui, nous sommes heureux d'annoncer une nouvelle amélioration de cette fonctionnalité : l'enregistrement fractionné. L'enregistrement fractionné facilite les tâches courantes telles que la transcription des appels.
Lorsque l'enregistrement fractionné est activé, l'enregistrement téléchargé contiendra le participant A (appelons-le Alice) dans le canal gauche et le participant B (appelons-le Bob) dans le canal droit. Cela vous permet de travailler facilement avec l'audio d'un seul participant.
Dans ce billet, nous allons étudier un cas d'utilisation simple. Alice appelle la banque pour obtenir des informations sur son compte, et Bob est l'agent du service clientèle qui répond à l'appel.
Enregistrer l'appel en stéréo
Lorsqu'Alice appelle le numéro fourni par la banque, Numbers répond à l'appel, diffuse un message d'introduction et le connecte au véritable numéro de téléphone de la banque, en enregistrant tous les sons de l'appel. Pour ce faire, vous devez utiliser les éléments suivants Objet de contrôle d'appel Nexmo (NCCO):
[
{
"action": "talk",
"text": "This call may be recorded for security and quality purposes"
},
{
"action": "record",
"eventUrl": ["https://example.com/recording"]
},
{
"action": "connect",
"eventUrl": ["https://example.com/events"],
"from": "447700900000",
"endpoint": [
{
"type": "phone",
"number": "447700900001"
}
]
}
]La partie importante de ce NCCO est l'action record qui enregistrera l'audio et enverra l'URL à https://example.com/recording une fois l'appel terminé :
{
"action": "record",
"eventUrl": ["https://example.com/recording"]
}Pour permettre l'enregistrement sur deux canaux, nous devons mettre à jour cette action pour qu'elle contienne "split" : "conversation" comme suit :
{
"action": "record",
"split" : "conversation",
"eventUrl": ["https://example.com/recording"]
}C'est tout ce qu'il y a à faire ! Lorsque vous récupérez l'enregistrement de l'appel de Nexmo, vous aurez l'audio d'Alice dans le canal de gauche et celui de Bob dans le canal de droite.
Transcription des appels avec IBM Watson
Une fois que vous avez le fichier audio, il est temps de transcrire le texte. Il n'y a pas beaucoup de fournisseurs qui acceptent l'audio à deux canaux et les transcrivent séparément, donc pour ce billet nous utiliserons ffmpeg pour diviser la piste en deux pistes mono et les transcrire séparément à l'aide de l'API de synthèse vocale d'IBM. l'API de conversion de la parole en texte d'IBM.
Pour diviser votre fichier audio en deux fichiers, exécutez la commande suivante dans un terminal (il se peut que vous ayez besoin d'installer installer ffmpeg d'abord) :
Maintenant que nous avons deux fichiers audio, nous pouvons les envoyer à Watson et obtenir le texte en réponse sous forme de JSON. Vous pouvez utiliser le langage de votre choix pour ce faire, mais le moyen le plus rapide de faire fonctionner les choses est d'utiliser la commande curl:
Nous obtiendrons ainsi deux fichiers JSON qui ressembleront à ce qui suit :
{
"results": [
{
"alternatives": [
{
"timestamps": [
[
"my",
3.83,
3.94
],
[
"name",
3.94,
4.18
],
[
"is",
4.18,
4.31
],
[
"Alice",
4.31,
4.96
]
],
"confidence": 0.923,
"transcript": "my name is Alice "
}
],
"final": true
},
...
]
} Construire la conversation
Comme nous avons demandé des horodatages, nous pouvons reconstruire une chronologie de la conversation telle qu'elle s'est déroulée. Une fois de plus, vous pouvez utiliser votre langage préféré pour cela (j'utiliserai PHP). Les étapes à suivre sont les suivantes :
Boucle dans JSON et fusionne toutes les entrées dans une seule liste
Ordonner les entrées en fonction de l'heure de début.
Affiche la conversation dans l'ordre, avec l'horodatage, le nom et le texte affichés.
Le code PHP pour ce faire ressemble à ce qui suit :
<?php
$left = json_decode(file_get_contents('left.json'))->results;
$right = json_decode(file_get_contents('right.json'))->results;
function mapEntry($input, $name, $conversation = []) {
foreach ($input as $entry){
$text = $entry->alternatives[0];
$conversation[] = [
'from' => $name,
'ts' => $text->timestamps[0][2],
'text' => $text->transcript
];
}
return $conversation;
}
$conversation = mapEntry($left, 'Alice');
$conversation = mapEntry($right, 'Bob', $conversation);
usort($conversation, function($a, $b) {
return $a['ts'] > $b['ts'];
});
foreach ($conversation as $c) {
echo '['.$c['ts'].'s] '.$c['from'].': '.$c['text'].PHP_EOL;
}
Lorsque nous exécutons ce code, nous voyons notre conversation telle qu'elle s'est déroulée :
[0.63s] Bob: welcome to the call what's your name
[3.94s] Alice: my name is Alice
[7.05s] Bob: how are you feeling today
[10.17s] Alice: great thank you
[11.81s] Bob: how can I help
[13.74s] Alice: I'd like information about my account
[20.1s] Bob: thank you for the information I'm connecting you to my colleague ashley now La transcription facilitée par l'enregistrement fractionné
La nouvelle fonction d'enregistrement partagé de Nexmo vous permet d'enregistrer deux participants dans leur propre canal audio, ce qui facilite la transcription. Pour activer cette fonction, il vous suffit d'ajouter "split" : "conversation" à votre action record action.
Pour en savoir plus sur l'enregistrement fractionné, vous pouvez lire notre article de blog sur le produit sur la version ou consulter la documentation.
Partager:
Michael est un ingénieur logiciel polyglotte qui s'attache à réduire la complexité des systèmes et à les rendre plus prévisibles. Travaillant avec une variété de langages et d'outils, il partage son expertise technique avec des publics du monde entier lors de groupes d'utilisateurs et de conférences. Au quotidien, Michael est un ancien défenseur des développeurs chez Vonage, où il a passé son temps à apprendre, enseigner et écrire sur toutes sortes de technologies.