Android中IBM Watson语音转文本API能否自定义说话人标签?
如何将IBM Watson Speech to Text的默认说话人标签替换为自定义人名?
当然可以实现!Watson Speech to Text API本身确实没有直接提供替换默认说话人编号的配置,但我们可以在客户端自己处理识别结果,把speaker 0、speaker 1这类编号映射成自定义的人名,最终输出你想要的对话格式。
具体可以按照这几个步骤来做:
第一步:确保已开启说话人分离功能
先确认你在配置RecognizeOptions的时候已经启用了说话人标签,比如:val options = RecognizeOptions.Builder() .speakerLabels(true) // 必须开启这个才能拿到说话人编号 .model("en-US_Multimedia") // 其他配置... .build()第二步:创建说话人编号与自定义人名的映射
根据你的需求,定义一个映射关系,比如把编号对应到具体人名:// 可以硬编码,也可以从用户配置、数据库等动态获取 val speakerMapping = mapOf( 0 to "John", 1 to "Marie" )如果说话人数量不确定,也可以先收集识别结果里的所有唯一speaker ID,再让用户手动分配名字,灵活性更高。
第三步:处理识别结果,替换标签并生成对话格式
在你实现的SpeakerLabelsDiarization回调或者转录结果回调里,把每个片段的说话人编号替换成对应的人名,然后拼接成对话样式:override fun onTranscriptionResults(results: SpeechRecognitionResults?) { results?.results?.filter { it.isFinal } // 只处理最终识别结果 ?.forEach { result -> result.alternatives?.firstOrNull()?.transcript?.let { transcript -> // 获取当前片段的说话人ID result.speakerLabels?.firstOrNull()?.speaker?.let { speakerId -> // 从映射里获取人名,默认显示"未知说话人" val speakerName = speakerMapping.getOrDefault(speakerId, "Unknown Speaker") // 输出对话格式 val dialogLine = "$speakerName: $transcript" Log.d("WatsonSTT", dialogLine) // 这里可以把dialogLine更新到你的UI上,比如RecyclerView或者TextView } } } }
这样处理之后,你就能得到John: 今天的会议几点开始?、Marie: 下午两点在三楼会议室这类符合预期的对话输出了。
另外要注意:如果同一段转录文本对应多个说话人片段(比如长句被拆分),你可能需要先按说话人分组,再合并同一说话人的连续文本,避免出现重复的人名标签。
内容的提问来源于stack exchange,提问作者Girley Gonzales
相关产品推荐
相关产品推荐

