【问题标题】:Google Speech To Text returns only 1 speaker although the conversation has 2 humans speaking to each otherGoogle Speech To Text 仅返回 1 位说话者,尽管对话中有 2 个人互相交谈
【发布时间】:2021-08-03 06:02:12
【问题描述】:

我的应用程序中的一个功能是记录两个人之间的对话(最多可以是 3 个),然后使用 Google Speech To Text 版本 v1p1beta1 获取该录音中包含的语音的日记版本.

细节:录音是在客户端使用此代码完成的:

navigator.mediaDevices.getUserMedia({ audio: true, video: false})
    .then(function(stream) {
        userMediaStreamAOnly    =   stream;
    })

...和...

vcAudioOnlyRecorder =   new MediaRecorder(userMediaStreamAOnly, { mimeType: 'audio/webm' });

上面的代码生成了一个 Base64 编码的字符串,其媒体类型为“audio/webm”。到目前为止,一切都很好。 以下是分配给RecognitionConfigRecognitionAudio 的值:

joConfig    =   new JSONObject();
joConfig.put("encoding", AudioEncoding.ENCODING_UNSPECIFIED_VALUE);
joConfig.put("sampleRateHertz", 48000);
joConfig.put("languageCode", languageCode);
joConfig.put("enableWordTimeOffsets", true);
joConfig.put("enableAutomaticPunctuation", true);
                    
jsonObjectDiarizationConfig     =   new JSONObject();
jsonObjectDiarizationConfig.put("enableSpeakerDiarization", Boolean.TRUE);
jsonObjectDiarizationConfig.put("minSpeakerCount", 2);
jsonObjectDiarizationConfig.put("maxSpeakerCount", 3);
joConfig.put("diarizationConfig", jsonObjectDiarizationConfig);
                    
jsonObjectRecognitionMetadata   =   new JSONObject();
jsonObjectRecognitionMetadata.put("interactionType", InteractionType.DISCUSSION);
jsonObjectRecognitionMetadata.put("industryNaicsCodeOfAudio", 512290);
jsonObjectRecognitionMetadata.put("microphoneDistance", MicrophoneDistance.NEARFIELD_VALUE);
jsonObjectRecognitionMetadata.put("originalMediaType", OriginalMediaType.AUDIO);
jsonObjectRecognitionMetadata.put("recordingDeviceType", RecordingDeviceType.PC);
jsonObjectRecognitionMetadata.put("audioTopic", "Test");
joConfig.put("metadata", jsonObjectRecognitionMetadata);
                        
joConfig.put("model", "default");
joConfig.put("useEnhanced", Boolean.TRUE);
                    
joAudio     =   new JSONObject();
joAudio.put("content", Base64AudioContents);
                        
joPayLoad   =   new JSONObject();
joPayLoad.put("config", joConfig);
joPayLoad.put("audio", joAudio);

然后我调用这个 URL:

https://speech.googleapis.com/v1/speech:longrunningrecognize?key=

触发语音到文本的过程。

我有 Base64 字符串。只是不知道如何在 stackoverflow 上分享它。

作为回报,我得到一个操作实例(在数据结构的深处)包含单词的实例。

现在问题来了:有时,words 的实例包含两个speaker 标签,即 1 和 2,并且准确地包含了各自用户所说的话。 有时,文本(对应两个说话者所说的话)只归属于一个说话者,即words的实例只包含一个speaker标签,即1。

问题 1:这是我的麦克风质量问题吗?请注意,我使用的是笔记本电脑内置的麦克风。

问题 2:我应该将无损音频传递到 URL 吗?在这种情况下,我不确定 MediaDevices 是否支持无损格式。

问题 3:这项技术目前的成熟度是否足以让这些异常现象在意料之中?

评论:我对输出中始终不一致的扬声器标签感到不安。任何帮助将不胜感激。

【问题讨论】:

    标签: google-speech-to-text-api


    【解决方案1】:

    1:这是我的麦克风质量的问题吗?请注意,我使用的是笔记本电脑内置的麦克风。

    从那个麦克风录制音频,通过体面的耳机播放(低于 20 美元都不符合条件,除非这是一个很好的二手交易),然后自己听 :) 这很可能不是麦克风的问题,而是房间反射、背景噪音等。

    2:我应该将无损音频传递到 URL 吗?在这种情况下,我不确定 MediaDevices 是否支持无损格式。

    您必须对来自麦克风的音频的压缩/比特率有所控制。上次我在 Chrome 中播放视频时,默认设置很糟糕,所以我不确定它们是什么用于音频。 YMMV。不过,您必须确切知道参数是什么。

    3:这项技术目前的成熟度是否足以让这些异常现象在意料之中?

    你也得到你付出的代价。如果你想要一些技术支持,并且你可以打电话给支持产品的人,你最好与一家只专注于这项技术的公司交谈,而不是把你变成一个产品:)

    恕我直言,该技术的成熟度足以满足大多数任务,但您从谁那里获得技术非常重要。

    【讨论】:

    • “Kuba 没有忘记 Monica”.....非常感谢您的全面回复。对问题 1 的回答:我使用一副价格超过 70 美元的耳机听到了录音。我不得不承认有一些背景噪音。所以吸取的教训:确保录音发生在一个没有噪音、更安静的地方。对问题 2 的回答:有 audioBitsPerSecond,它是构造 MediaRecorder 对象时使用的选项的一部分。我会玩这个。对问题 3 的回答:我不知道任何其他更可靠的来源。请列举几个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多