5

我有兴趣编写一个能够识别多个说话者的语音识别应用程序。例如,如果 Bill、Joe 和 Jane 在说话,那么应用程序不仅可以将声音识别为文本,还可以按说话者(比如 0、1 和 2...人们)。

我正在寻找可以做到这一点的语音识别 API,而 Google Cloud Speech 是排名最高的 API。我查看了 API 文档以查看此类功能是否可用,但尚未找到。

我的问题是:这个功能是否存在?

注意:谷歌的支持页面说他们的工程师有时会在 SO 上回答这些问题,所以似乎有人可能会回答问题的“意志”部分。

4

5 回答 5

5

IMB 的语音转文本服务可以做到这一点。如果您使用他们的休息服务非常简单,只需添加您希望在 url 参数中识别不同的扬声器。此处的文档(https://console.bluemix.net/docs/services/speech-to-text/output.html#speaker_labels

它的工作原理是这样的:

 curl -X POST -u {username}:{password}
--header "Content-Type: audio/flac"
--data-binary @{path}audio-multi.flac
"https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?model=en-US_NarrowbandModel&speaker_labels=true"

然后它将返回一个带有结果和扬声器标签的 json,如下所示:

{
 "results": [
    {
      "alternatives": [
        {
          "timestamps": [
            [
              "hello",
              0.68,
              1.19
            ],
            [
              "yeah",
              1.47,
              1.93
            ],
            [
              "yeah",
              1.96,
              2.12
            ],
            [
              "how's",
              2.12,
              2.59
            ],
            [
              "Billy",
              2.59,
              3.17
            ],
            . . .
          ]
          "confidence": 0.821,
          "transcript": "hello yeah yeah how's Billy "
        }
      ],
      "final": true
    }
  ],
  "result_index": 0,
  "speaker_labels": [
    {
      "from": 0.68,
      "to": 1.19,
      "speaker": 2,
      "confidence": 0.418,
      "final": false
    },
    {
      "from": 1.47,
      "to": 1.93,
      "speaker": 1,
      "confidence": 0.521,
      "final": false
    },
    {
      "from": 1.96,
      "to": 2.12,
      "speaker": 2,
      "confidence": 0.407,
      "final": false
    },
    {
      "from": 2.12,
      "to": 2.59,
      "speaker": 2,
      "confidence": 0.407,
      "final": false
    },
    {
      "from": 2.59,
      "to": 3.17,
      "speaker": 2,
      "confidence": 0.407,
      "final": false
    },
    . . .
  ]
}

他们还具有用于不同平台的 Web 套接字选项和 SDK,可以访问它,而不仅仅是休息调用。

祝你好运

于 2017-10-04T21:40:43.107 回答
3

我知道目前没有提供者将其作为其语音识别 API 的内置部分。

我已经将Microsoft Cognitive Services - Speaker Recognition API用于类似的东西,但音频是单独提供给 API 以使用他们的Speech Recognition API

能够将两者结合起来会很有用。

于 2017-02-02T02:22:17.030 回答
2

说话人识别和说话人区分之间存在很大差异。大部分云 AI 平台主要做说话人的区分。但 Nuance 是唯一一家声称提供说话人识别的公司,但您需要购买他们的许可证。https://www.nuance.com/en-nz/omni-channel-customer-engagement/security/multi-modal-biometrics.html

于 2018-07-24T02:29:59.090 回答
1

Microsoft 现在将说话人识别作为会话转录的一部分,它结合了实时语音识别、说话人识别和分类。这是他们语音服务的一项高级功能。此处对此进行了描述:

https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/conversation-transcription-service

有3个步骤:

  1. 从用户那里收集语音样本。
  2. 使用用户语音样本生成用户配置文件
  3. 使用语音 SDK 识别用户(说话者)并转录语音

这显示在页面的下图中:

在此处输入图像描述

目前仅限于以下地区:en-US和。zh-CNcentraluseastasia

于 2019-10-08T15:14:52.437 回答
-5

Google 最近发布了在您的应用中访问用户位置、姓名和用户唯一 ID 的功能。

该文档可以在以下位置找到: https ://developers.google.com/actions/reference/nodejs/AssistantApp#getUser

使用 getUserName 获取用户名的示例:

const app = new DialogflowApp({request: req, response: res});
const REQUEST_PERMISSION_ACTION = 'request_permission';
const SAY_NAME_ACTION = 'get_name';

function requestPermission (app) {
const permission = app.SupportedPermissions.NAME;
 app.askForPermission('To know who you are', permission);
}

function sayName (app) {
  if (app.isPermissionGranted()) {
    app.tell('Your name is ' + app.getUserName().displayName));
  } else {
    // Response shows that user did not grant permission
    app.tell('Sorry, I could not get your name.');
  }
}
const actionMap = new Map();
actionMap.set(REQUEST_PERMISSION_ACTION, requestPermission);
actionMap.set(SAY_NAME_ACTION, sayName);
app.handleRequest(actionMap);
于 2017-10-31T18:56:48.590 回答