
Teilen Sie:
Michael ist ein polyglotter Software-Ingenieur, der sich dafür einsetzt, die Komplexität von Systemen zu reduzieren und sie berechenbarer zu machen. Er arbeitet mit einer Vielzahl von Sprachen und Tools und gibt sein technisches Fachwissen auf Benutzergruppen und Konferenzen in der ganzen Welt weiter. Im Alltag ist Michael ein ehemaliger Developer Advocate bei Vonage, wo er seine Zeit damit verbrachte, über alle Arten von Technologie zu lernen, zu lehren und zu schreiben.
Zweikanalige Transkription mit geteilter Aufzeichnung
Lesedauer: 4 Minuten
Als Teil unserer Voice API bietet Nexmo die Möglichkeit, Teile (oder das gesamte) eines Gesprächs aufzuzeichnen und die Audiodaten nach Beendigung des Gesprächs abzurufen. Heute freuen wir uns, eine neue Erweiterung dieser Funktionalität ankündigen zu können: die geteilte Aufzeichnung. Die geteilte Aufzeichnung macht gängige Aufgaben wie die Transkription von Anrufen noch einfacher.
Wenn die geteilte Aufnahme aktiviert ist, enthält die heruntergeladene Aufnahme Teilnehmer A (nennen wir sie Alice) im linken Kanal und Teilnehmer B (nennen wir ihn Bob) im rechten Kanal. So können Sie problemlos mit dem Ton eines einzelnen Teilnehmers arbeiten.
In diesem Beitrag werden wir einen einfachen Anwendungsfall durchspielen. Alice ruft bei der Bank an, um Informationen über ihr Konto zu erhalten, und Bob ist der Kundenbetreuer, der den Anruf entgegennimmt.
Aufzeichnung des Gesprächs in Stereo
Wenn Alice die von der Bank angegebene Nummer anruft, nimmt Nexmo den Anruf entgegen, spielt eine einleitende Nachricht ab und verbindet sie mit der echten Telefonnummer der Bank - und zeichnet den gesamten Ton des Anrufs auf. Um dies zu bewerkstelligen, würde man folgendes verwenden Nexmo Call Control Object (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"
}
]
}
]Der wichtige Teil dieses NCCO ist die record Aktion, die den Ton aufzeichnet und die URL an https://example.com/recording sendet, sobald der Anruf beendet ist:
{
"action": "record",
"eventUrl": ["https://example.com/recording"]
}Um die Zweikanal-Aufnahme zu aktivieren, müssen wir diese Aktion aktualisieren, damit sie Folgendes enthält "split" : "conversation" wie folgt:
{
"action": "record",
"split" : "conversation",
"eventUrl": ["https://example.com/recording"]
}Das ist alles, was es zu tun gibt! Wenn Sie die Gesprächsaufzeichnung von Nexmo abrufen, haben Sie den Ton von Alice im linken Kanal und den von Bob im rechten.
Anrufumschreibung mit IBM Watson
Sobald Sie die Audiodatei haben, ist es an der Zeit, den Text zu transkribieren. Es gibt nicht viele Anbieter, die Zweikanal-Audio akzeptieren und getrennt transkribieren. ffmpeg um die Spur in zwei Monospuren aufzuteilen und sie separat zu transkribieren mit IBMs Sprache-zu-Text-API.
Um Ihre Audiodatei in zwei Dateien aufzuteilen, führen Sie den folgenden Befehl in einem Terminal aus (möglicherweise müssen Sie installieren ffmpeg zuerst installieren):
Jetzt, da wir zwei Audiodateien haben, können wir sie an Watson senden und den Text als JSON als Antwort zurückbekommen. Sie können die Sprache Ihrer Wahl verwenden, um dies zu tun, aber der schnellste Weg, die Dinge zum Laufen zu bringen, ist die Verwendung von curl:
Dadurch erhalten wir zwei JSON-Dateien, die ähnlich wie die folgenden aussehen:
{
"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
},
...
]
} Die Konversation aufbauen
Da wir Zeitstempel angefordert haben, können wir eine Zeitleiste der Konversation erstellen, während sie stattfand. Auch hierfür können Sie Ihre bevorzugte Sprache verwenden (ich werde PHP verwenden). Die Schritte, die wir befolgen müssen, sind:
Schleife durch JSON und Zusammenführung aller Einträge in einer einzigen Liste
Ordnen Sie die Einträge anhand des Startzeitstempels.
Gibt die Konversation der Reihe nach aus, wobei Zeitstempel, Name und Text angezeigt werden.
Der PHP-Code dazu sieht wie folgt aus:
<?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;
}
Wenn wir diesen Code ausführen, sehen wir unser Gespräch so, wie es abgelaufen ist:
[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 Transkription leicht gemacht mit Split Recording
Mit der neuen Nexmo-Funktion für geteilte Aufnahmen können Sie zwei Teilnehmer in ihrem eigenen Audiokanal aufnehmen, was die Transkription zum Kinderspiel macht. Um diese Funktion zu aktivieren, müssen Sie nur "split" : "conversation" zu Ihrer record Aktion.
Wenn Sie mehr über Split Recording erfahren möchten, lesen Sie bitte unseren Produkt-Blogbeitrag über die Veröffentlichung oder in der Dokumentation nachlesen.
Teilen Sie:
Michael ist ein polyglotter Software-Ingenieur, der sich dafür einsetzt, die Komplexität von Systemen zu reduzieren und sie berechenbarer zu machen. Er arbeitet mit einer Vielzahl von Sprachen und Tools und gibt sein technisches Fachwissen auf Benutzergruppen und Konferenzen in der ganzen Welt weiter. Im Alltag ist Michael ein ehemaliger Developer Advocate bei Vonage, wo er seine Zeit damit verbrachte, über alle Arten von Technologie zu lernen, zu lehren und zu schreiben.