一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

语音识别方法、装置、设备和存储介质与流程

2022-03-26 06:53:38 来源:中国专利 TAG:


1.本公开涉及计算机技术领域,具体涉及语音识别、深度学习等人工智能领域,尤其涉及一种语音识别方法、装置、设备和存储介质。


背景技术:

2.实时通信中的连续语音识别技术是对实时通信中多人的连续音频进行语音识别,同时能区分说话人的一种技术,它能为实时通信提供很多智能功能。
3.相关技术中,可以解决实时通信中的部分问题,然而缺乏整体的连续语音识别的解决方案。


技术实现要素:

4.本公开提供了一种语音识别方法、装置、设备和存储介质。
5.根据本公开的一方面,提供了一种语音识别方法,包括:确定说话人的语音信号;采用专用语音识别通道,获得所述说话人的语音信号的语音识别结果,其中,不同的说话人具有不同的专用语音识别通道;处理所述语音识别结果。
6.根据本公开的另一方面,提供了一种语音识别装置,包括:确定模块,用于确定说话人的语音信号;获取模块,用于采用专用语音识别通道,获得所述说话人的语音信号的语音识别结果,其中,不同的说话人具有不同的专用语音识别通道;处理模块,用于处理所述语音识别结果。
7.根据本公开的另一方面,提供了一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上述任一方面的任一项所述的方法。
8.根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据上述任一方面的任一项所述的方法。
9.根据本公开的另一方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据上述任一方面的任一项所述的方法。
10.根据本公开的技术方案,可以实现连续语音识别。
11.应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
12.附图用于更好地理解本方案,不构成对本公开的限定。其中:
13.图1是根据本公开第一实施例的示意图;
14.图2是根据本公开第二实施例的示意图;
15.图3a-图3b是根据本公开第三实施例中响应于不同的语音信号的路数,将语音信号存入语音队列的示意图;
16.图4是根据本公开第四实施例的示意图;
17.图5是根据本公开第五实施例的示意图;
18.图6是根据本公开第六实施例的示意图;
19.图7是根据本公开第七实施例的示意图;
20.图8是用来实现本公开实施例的语音识别方法中任一方法的电子设备的示意图。
具体实施方式
21.以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
22.实时通信中的连续语音识别技术是对实时通信中多人的连续音频进行语音识别,同时能区分说话人的一种技术,它能为实时通信提供很多智能功能。实时通信比如为实时音视频会议,智能功能比如实时音视频会议的实时字幕上屏。实时字幕上屏是指,是实时音视频会议中,根据说话人的声音不断地刷新字幕,声音和文字始终保持同步,同时能区分不同的说话人。
23.目前针对实时通信中的连续语音识别技术还没有系统(或称为整体)的解决方案。
24.图1是根据本公开第一实施例的示意图,本实施例提供一种语音识别方法,所述方法包括:
25.101、确定说话人的语音信号。
26.102、采用专用语音识别通道,获得所述说话人的语音信号的语音识别结果,其中,不同的说话人具有不同的专用语音识别通道。
27.103、处理所述语音识别结果。
28.本实施例的执行主体可以为语音识别装置,该装置的具体形式不限定,可以为硬件、软件,或者软硬结合。该装置可以位于电子设备内,电子设备可以为用户终端或者服务端,服务端可以为本地服务器或者云端等,用户终端可以包括移动设备(如手机、平板电脑)、可穿戴式设备(如智能手表、智能手环)、智能家居设备(如智能电视、智能音箱)等。
29.本实施例的语音识别方法可以应用于实时通信中,实时通信比如为实时音视频会议。
30.实时音视频会议时,参会人员可以为多人,多人是指至少两人,参会人员较多时,可以为几十人、几百人等。
31.以在服务端进行语音识别为例,如图2所示,参会人员的用户终端上可以安装用于参与会议的客户端201,客户端201可以采集参会人员的语音信号。用户终端上可以设置语音采集装置,比如麦克风或麦克风阵列,客户端可以通过语音采集装置采集语音信号。之后,客户端201将采集的语音信号发送给服务端202。参见图2,假设参会人员为n个,n为正整数,客户端分别用端1~端n表示。
32.任何一个采集到语音信号的客户端都可以将各自的语音信号发送给服务端。参见
图2,客户端发送给服务端的语音信号可以称为上行流。
33.服务端接收到至少一个的客户端发送的语音信号后,可以确定出说话人的语音信号,该过程可以称为语音激励。经过语音激励,服务端可以确定出不大于k路的语音信号作为说话人的语音信号。其中,k为正整数,为可设置值,比如设置为6。
34.本公开的技术方案中,所涉及的用户个人信息的收集、存储、使用、加工、传输、提供和公开等处理,均符合相关法律法规的规定,且不违背公序良俗。
35.服务端确定出说话人的语音信号后,可以对说话人的语音信号进行语音识别,且,对应不同的说话人采用不同的专用语音识别通道进行语音识别。
36.服务端除了对说话人的语音信号进行语音识别之外,还可以将说话人的语音信号转发给n个客户端中的各个客户端。服务端发送给客户端的语音信号可以称为下行流。
37.语音信号又可以可以称为语音、音频、音频信号等。进一步地,在实时通信中,语音信号为实时语音信号,实时语音信号又可以称为语音流、音频流等。比如,根据传输方向的不同,语音流可以分为上述的上行流和下行流。
38.在实时通信时,语音包还可以称为实时传输协议(real-time transport protocol,rtp)语音包。
39.客户端可以以预设周期采集语音信号,以形成语音包。比如,预设周期为20毫秒(ms),因此,每个语音包的时长为20ms,1秒可以产生50个语音包。
40.在实时通信中,随着参会人员不断的说话,客户端可以不断地采集到语音包,并不断地发送给服务端,该不断地采集并发送语音包的过程还可以称为连续采集并发送语音包,或者说,实时采集并发送语音包。
41.说话人的语音信号是待传输给各个参会人员的语音信号。
42.说话人与发声人不同,参会人员中发声的人员都可以称为发声人,但是,为了保证收听效果,不是每个发声人的语音信号都要进行传输。
43.参会人员较多的实时音视频会议场景下,为了保证收听质量,并非将每个发声人员的语音包都进行转发,而是限定说话人的数量。即,假设参会人员有n个人,假设n较大(比如大于10),即使n个人都发声了,但不是n个人都作为说话人,而是在n个人中选择k(k《n)个人作为说话人。
44.k为设置值,一般来讲,k可以选择为6。即,至多将6个人作为说话人。
45.以k=6为例,假设发声人员的数量小于或等于6,则可以将全部的发声人员作为说话人,当发声人员的数量大于6,则可以选择6个人作为说话人。
46.确定说话人的语音信号后,对应不同的说话人,可以采用不同的专用语音识别通道,获得对应的说话人的语音信号的语音识别结果。
47.比如,存在三个说话人,则可以采用第一专用语音识别通道获得第一说话人的语音识别结果,采用第二专用语音识别通道获得第二说话人的语音识别结果,采用第三专用语音识别通道获得第三说话人的语音识别结果。第一专用语音识别通道、第二专用语音识别通道、第三专用语音识别通道不同。
48.由于不同的说话人具有不同的语音识别通道,不同的说话人的语音识别结果将通过不同的语音识别通道获得,从而基于不同的语音识别通道,可以区分不同的说话人。
49.获得说话人的语音识别结果后,可以处理该语音识别结果,处理可以包括:将所述
语音识别结果发送给各个参会人员的客户端,和/或,将所述语音识别结果发送给业务服务器,业务服务器比如为记录会议内容的服务器。客户端获得语音识别结果后,可以对语音识别结果进行上屏处理,语音识别结果为说话人的语音包对应的文本,即,可以在客户端的显示界面上显示各个说话人的语音内容对应的文本内容。业务服务器接收到各个说话人的语音识别结果后,可以记录各个说话人的语音识别结果,从而完成会议内容记录。
50.本公开实施例中,通过确定说话人的语音信号,并获得说话人的语音信号的语音识别结果,可以实现对说话人的语音识别,通过采用专用语音识别通道获得语音识别结果,可以实现对说话人的区分,从而可以实现连续语音识别。
51.一些实施例中,所述确定说话人的语音信号,包括:接收至少一路的语音信号;若所述至少一路的路数小于或等于预设个数,将所述至少一路的语音信号作为所述说话人的语音信号;或者,若所述至少一路的路数大于预设个数,基于所述至少一路的语音信号的能量值,按序选择所述预设个数的语音信号,作为所述说话人的语音信号。
52.比如,如图2所示,服务端可以接收到三路语音信号,假设预设个数k为6,此时,由于3《6,则可以将这三路语音信号作为说话人的语音信号。
53.又比如,服务端接收到10路语音信号,由于10》6,此时,可以在这10路语音信号中,按照语音信号的能量值从大到小的顺序,选择6路语音信号作为说话人的语音信号。
54.客户端在发送语音包时,可以在语音包中携带语音活动检测(voice activity detection,vad)值和该语音包的包能量值,服务端可以基于预设时长内接收的语音包的vad值和包能量值,计算对应路的语音信号的能量值。
55.比如,对应端1,端1发送的语音包中可以携带vad值及其包能量值,vad值可以为1或0,服务端接收到端1发送的语音包后,可以在预设时长(比如几百毫秒)内,对各个语音包的vad值和包能量值进行相乘后累加,作为端1的语音信号的能量值,用公式表示为:
[0056][0057]
其中,e为某路语音信号的能量值,m为该路语音信号在预设时长内收到的语音包的个数,vadi为第i个语音包的vad值,ei为第i个语音包的包能量值,i为[1,m]中的正整数,vadi为0或1,其中,0表示语音包为静音包,1表示语音包为非静音包,ei可以基于语音包的振幅确定。
[0058]
可以理解的是,上述语音信号的能量值的计算方式为示例,还可以采用其他的相关计算方式确定。
[0059]
通过选择不大于预设个数的语音信号作为说话人的语音信号,可以避免传输的语音信号数量较多引起的噪声问题,提高客户端的收听效果。进一步地,一般来讲,实时音视频会议的说话人的语音信号的能量较高,因此,选择能量值较高的语音信号作为说话人的语音信号,也符合实际的实时音视频会议的应用场景,更适于实际应用。
[0060]
一些实施例中,所述专用语音识别通道为语音队列与自动语音识别(automatic speech recognition,asr)服务之间的长连接,且不同说话人对应不同的语音队列,所述采用专用语音识别通道,获得所述说话人的语音信号的语音识别结果,包括:采用所述长连接,将所述说话人的语音信号发送给所述asr服务,以及,接收所述asr服务获得的所述说话人的语音信号的语音识别结果。
[0061]
其中,asr服务是指对语音信号进行语音识别,以获得语音识别结果的服务。语音识别结果即为语音信号对应的文本。asr服务也可以称为asr服务端,与接收客户端发送的语音信号的服务端可以位于相同或不同的服务器上。
[0062]
如图3a、图3b所示,服务端中可以预先建立预设个数(如6)的语音队列,并且每个语音队列与asr服务建立独立的长连接。
[0063]
其中,如未特别说明,服务端是指与客户端交互的服务端。
[0064]
独立是指,不同的语音队列对应不同的长连接,从而不同的说话人可以具有不同的专用语音识别通道。
[0065]
长连接也可以称为持久连接,是指数据传输完成了保持连接不断开,从而服务端通过长连接可以连续发送语音包给asr服务。
[0066]
参见图3a,若接收的语音信号的路数小于或等于预设个数,比如,预设个数为6,接收到三路语音信号,则可以将接收的三路语音信号存入6个语音队列中的三个语音队列中。
[0067]
参见图3b,若接收的语音信号的路数大于预设个数,比如,预设个数为6,接收到10路语音信号,则可以在接收的10路语音信号中选择6路语音信号,存入6个语音队列中。
[0068]
图3a、图3b中,已存入语音信号的语音队列用黑色填充表示。
[0069]
进一步地,语音信号可以以语音包为序列单元进行传输。
[0070]
语音包中可以携带流标识(stream_id)和序列号(seq_num)。
[0071]
流标识的类型可以为unit64,序列号的类型可以为unit16。
[0072]
流标识用于标识语音包所属的语音信号流,一般客户端对应一路语音信号流,因此,流标识可以用于标识客户端或者用户,不同客户端或用户产生的语音信号具有不同的流标识。实时音视频会议时,可以为每个参会人员对应的客户端分配唯一的流标识。
[0073]
序列号用于标识语音包的序列顺序,按照语音包的采集顺序不断递增。比如,某个客户端在入会后1s内会依次产生50个语音包,它们的序列号分别为1~50,但seq_num到了uint16的最大值时会自动从0循环。
[0074]
虽然,针对某一路流,客户端上是按照先后顺序发送语音包的,但由于音视频媒体的传输都是基于用户数据报协议(user datagram protocol,udp)协议的,因此到达服务端的语音包的顺序是随机的,网络无法保证先发送的数据先到达,所以如果要对语音信号进行语音识别,要对接收的语音包进行排序处理,按照采集时的顺序发送至asr服务时才能正确识别。
[0075]
为了同时实现对会议中的k路音频流的语音识别,在开启会议识别后,服务端会为每个会议分配6个语音包有序队列(类似map数据结构),每个有序队列拥有一个队列唯一标识(stream_queue_id),这6个队列用于接收会议中需要识别的k(k《=6)路流的语音包,当k=6时,说明每个队列都会接收语音包,k《6时,说明有若干个队列不会接收音频流。有序队列存储的是元素是键值对,键是语音包的seq_num,值是语音包数据(payload)。有序队列中的元素根据seq_num从小到大排序,服务端每接收到一个语音包,如果它是需要被识别的音频流,就插入对应的有序队列并自动排序。
[0076]
服务端会为每个语音队列创建与asr服务的长连接,每路语音信号可以采用各自独立的与asr服务的长连接,发送语音包给asr服务并接收asr服务返回的语音识别结果。通过流标识与队列标识的映射关系,可以准确地区分每路语音识别结果对应的客户端或者说
用户。
[0077]
通过采用长连接方式,可以提高处理速率,降低延时。
[0078]
一些实施例中,所述语音信号以语音包为序列单元,存储在所述语音队列中,所述将所述说话人的语音信号发送给所述asr服务,以及,接收所述asr服务获得的所述说话人的语音信号的语音识别结果,包括:按序将所述语音包发送给所述asr服务;以及,接收所述asr服务获得的所述语音包的语音识别结果。
[0079]
比如,对应某路语音信号,是按照第一语音包、第二语音包等的顺序在语音队列中排序的,那么,在语音识别时,将按照第一语音包、第二语音包的顺序依次发送给asr服务,并依次获得各个语音包的语音识别结果。
[0080]
通过将语音包发送给asr服务,并接收asr服务对语音包的语音识别结果,可以以语音包为单元进行处理,从而可以基本实时获得语音识别结果,实现语音与文本的同步。进一步地,通过按序发送语音包,可以保证语音识别结果的准确度。
[0081]
进一步地,所述语音包携带序列号,所述按序将所述语音包发送给所述asr服务,包括:确定当前序列号,所述当前序列号按序增加;将序列号为所述当前序列号的语音包,发送给所述asr服务。
[0082]
其中,当前序列号按序增加是指,从当前序列号的初始值开始,在语音队列中每次读取一个语音包后,当前序列号的值增加1。比如,当前序列号的初始值为1,则可以读取序列号为1的语音包,并将该序列号为1的语音包发送给asr服务。之后,当前序列号可以增加1,即当前序列号从1变为2,相应地,可以读取序列号为2的语音包,并将该序列号为2的语音包发送给asr服务。
[0083]
由于语音包在传输过程中可能发生乱序,比如,语音包在客户端采集时,按照序列号排列分别为1、2、3,但是,由于传输过程可能发生乱序,服务端接收的语音包的序列号可能为1、3、2,若按照接收顺序处理语音包,就会发生先处理语音包-3,再处理语音包-2,这样就会造成语音识别错误。通过按序增加当前序列号,并读取当前序列号的语音包进行asr处理,可以保证对语音包进行按序的asr处理,比如,处理完语音包-1后,按序增加当前序列号为2,则处理序列号为2的语音包,即使语音包-3是先接收到的,也会先处理语音包-2而不是语音包-3,从而保证了语音包的处理顺序与采集顺序一致,保证了语音识别结果的准确度。
[0084]
进一步地,所述方法还包括:若未获取序列号为所述当前序列号的语音包,等待预设时长;若所述预设时长后仍未获取所述当前序列号的语音包,按序获取所述当前序列号的语音包的下一个语音包,将所述下一个语音包发送给所述asr服务。
[0085]
由于语音队列(或简称队列)会自动根据seq_num对语音包进行排序,所以插入到语音队列中的语音包都自动排好序了。
[0086]
如图4所示,各个语音队列(以queue_1为例)中,语音包可以按照seq_num从小到大(如从1开始)的顺序排列。
[0087]
在接收语音包的同时,服务端会记录当前序列号(current_seq_num),当前序列号的初始值为此队列接收到的第一个语音包的序列号。
[0088]
服务端可以根据当前序列号从队列中查找对应的语音包,因为队列中语音包已经是排好序的,所以通过二分查找就能很快的查找到,查找到当前序列号的语音包后,将该语音包发送给asr服务,如图4所示,发送给asr服务(图4中表示为asr)的语音包是按序传输
的,比如,seq_num按照199、200、201的顺序依次发送给asr服务。进一步地,如果语音包是编码后的语音包,还可以对编码后的语音包进行解码处理,将解码后的语音包发送给asr服务。
[0089]
服务端与asr服务的连接是传输控制协议(transmission control protocol,tcp)长连接,能够保证数据连续性。
[0090]
各队列每读取出来一个语音包,current_seq_num就会加1。读取出来的语音包不会立马被删除,但是会被标记成已读取状态。图4中,白色填充的语音包表示读取状态为真,即已读取状态,灰色填充的语音包表示读取状态为假,即未读取状态。
[0091]
当遇到某个seq_num包无法找到时,说明此时由于此端的网络延迟导致包还没有到达,或者由于网络丢包导致此包丢失,服务端会为此包等待一定时间(jitter),当超过这个时间,将跳过此包,直接去读取下一个seq_num对应的包。
[0092]
在向asr服务不断输送音频的过程中,asr服务会实时不断的返回语音识别结果。服务端可以将语音识别结果转发至各个客户端,从而可以实现字幕上屏等功能。
[0093]
因为服务端与asr服务之间建立的是长连接,服务端收到语音识别结果回调也非常迅速,一般asr服务每100~200ms就会返回一次语音识别结果,相当于每识别出一个字就返回一次语音识别结果。在一个线程循环过程中,每个队列都按照此逻辑进行处理,其中每20ms扫描一次上行语音包缓存队列,并插入对应的有序队列,每10ms对所以队列进行读取、解码并送识别,保证服务端即使在读取等待某个包后,也能及时追赶上,整个会议过程会出现某路的识别短暂落后于实时音频,但很快就能恢复实时性。
[0094]
进一步地,还可以根据不同的业务需要,调整不同的等待时间jitter,达到不同的目的。例如,设置较小的jitter,避免因为某个包延迟到达或丢失而长时间等待,可以实现较快的识别速度;而设置较大的jitter,可以保证发往识别的音频质量更高,识别效果更好,这在某些场景下非常重要。
[0095]
通过基于当前序列号,由于当前序列号按序增加,可以实现按序发送语音包给asr服务。
[0096]
通过等待预设时长重新获取语音包,可以提高可靠性,并且,若等待预设时长后仍未获取当前序列号对应的语音包,获取下一个语音包,可以避免长时间等待,降低延时。
[0097]
一些实施例中,所述专用语音识别通道为语音队列与asr服务之间的长连接,且不同说话人对应不同的语音队列,所述方法还包括:将所述说话人的语音信号,存入所述说话人对应的语音队列中。
[0098]
进一步地,所述语音信号以语音包为序列单元存入所述语音队列,所述语音包携带序列号,所述方法还包括:若当前存入的语音包的序列号大于所述语音队列的最大队列长度,且未触发清空操作时,按序删除所述语音队列中的语音包;或者,若当前存入的语音包的序列号触发清空操作时,清空所述语音队列。
[0099]
比如,参见图3a-图3b,可以将说话人的语音信号存入各自独立的语音队列中。
[0100]
为了限制内存使用量,服务端对每个队列的大小做了限制。
[0101]
最大队列长度(max_cached_num)可以根据业务需要设置,比如,将max_cached_num设置为200。此时,服务端会为每一路音频流缓存200个语音包,也就是约过去4s的音频流(因为可能存在包延时和丢包,队列里的包的序列号不一定是完全连续的,所以不是准确
的4s的时间)。
[0102]
当队列里的语音包的数量积累到了max_cached_num,每插入一个新的语音包都会删除队列的头包,也就是seq_num最小的语音包,此时seq_num最小的语音包是4s前的数据,一般是被读取过并发送给asr服务进行语音识别了。
[0103]
如图4所示,以最大队列长度=200为例,由于序列号为101的语音包丢失,那么在插入第202个语音包时,将删除seq_num=1的语音包。
[0104]
可以理解的是,图4中的队列标识的值和流标识的值只是示例,在实际应用中,假设创建的语音队列的个数为6,则队列标识的值可以具体为1~6中的任一整数值;假设应用于实时音视频会议场景,且参会人员为n个,则流标识的值可以为1~n中的任一整数值。
[0105]
通过将语音信号存入语音队列,可以实现语音信号的缓存。
[0106]
通过按序删除语音队列中的语音信号,可以避免语音信号的溢出。
[0107]
当语音包的序列号与最大队列长度的差值的绝对值大于最大序列号的一半时,可以触发清空操作。
[0108]
其中,当seq_num到达uint16的最大值(65535)时,接下来的语音包的seq_num将会从最小值(如,1)开始,这时因为要保持队列大小在max_cached_num以下而删除队列的头包,就会直接删除最新的seq_num最小值的语音包。
[0109]
为了避免刚插入的语音包就被删除,可以清空队列,也保证了队列中缓存的是最新的语音包。
[0110]
即,当语音队列中已存储语音包,且待存入语音包的序列号(new_seq_num)与最大队列长度(max_seq_num)满足如下条件时,清空队列:
[0111]
abs(new_seq_num max_seq_num)》max_int16/2;
[0112]
其中,abs是取绝对值函数。
[0113]
通过上述流程,语音包的接收和读取并送识别是实时处理的,所以在语音包的接收,读取,识别几乎是同时进行的,被接收的语音包很快会被读取、解码、并进行识别。所以队列中缓存的绝大部分语音包都是被读取过的,偶尔的队列被清空(基本是21分钟一次)不会影响语音识别。队列的语音包缓存解决了因为某些包延迟到达或某些包丢包时需要等待时的音频接收问题,确保在等待某个包时还能正常缓存上行语音包。通过图4可以看到某个有序队列的通常状态。
[0114]
一些实施例中,所述语音信号携带流标识,所述方法还包括:建立所述流标识与所述语音包所存入的语音队列的队列标识之间的映射关系。
[0115]
其中,如上描述,服务端接收的语音信号中可以携带流标识stream_id,服务端确定某路语音信号为说话人的语音信号后,可以为不同的说话人的语音信号分配不同的语音队列,且不同的语音队列具有不同的队列标识(stream_queue_id),因此,可以建立流标识与队列标识的映射关系,比如,参见图4,流标识=0x238967与队列标识=0x34fd45之间的映射关系。
[0116]
可以理解的是,当说话人更新后,上述的映射关系也可以更新。
[0117]
如上描述,服务端可以对实时音视频会议中的k路语音信号(或称为音频流)进行语音识别。在实际会议中,这k路音频流不是一成不变的,而是随时会变化的。具体地,服务端的语音激励算法可以每几百ms计算一次说话人列表。如果计算出的列表没有发生变化,
说明会议中的说话人一直没有变化。当说话人发生变化时,这时就需要将新的音频流转发至各端,同时转发至asr服务进行语音识别。因为下行流固定只有6路,用于识别的队列也只有6个,所以这就要求某些stream_queue_id队列需要接收新的stream_id音频流,而不会再接收已经不再是说话人的音频流,该过程可以称为识别切换。发生识别切换的情况可以如下:
[0118]
(1)新人加入会导致说话人增加,之前会中只有k(k《6)人,这k路音频流都会被识别。现在会议中新加入了一个人,导致k 1个人的音频被识别;
[0119]
(2)会议中有人由不说话开始说话,挤掉了之前在说话人列表的人,这是由语音激励算法决定的。
[0120]
当语音激励计算的说话人列表顺序发生变化,但成员没有发生变化,此时说明需要被识别的音频音频流不需要改变,所以不会发生识别切换。
[0121]
当发生情况(1)时,某个队列会开始接收音频流,server会新建一个与asr服务的长连接,并建立对应stream_queue_id和stream_id的映射,按照上述描述对此路音频流进行语音识别。
[0122]
当发生情况(2)时,server保证新的映射关系已存在时不需要改变,只需更新新的映射关系,即将需要更新的stream_queue_id的映射更新成新的流的stream_id,并将队列当前序列号current_seq_num更新为新的音频流的首包的seq_num,将队列进行清空(因为它缓存是之前的人的音频数据),主动断开之前的asr长连接,并建立一个新的asr长连接,按照上述相关描述对此路音频流进行语音识别。
[0123]
比如,发生识别切换后,stream_queue_id的语音队列中存入stream_id=0x233578的语音流,其中,该队列中的首包为接收的第一个语音包,比如,seq_num=367。此时,将映射关系中的与队列标识0x34fd45对应的流标识更新为0x233578。以及,将队列1与asr服务的长连接从asr连接_1切换为asr连接_2。
[0124]
通过建立流标识和队列标识之间的映射关系,可以方便地将语音识别结果与用户进行对应。
[0125]
一些实施例中,所述方法应用于音视频会议,所述方法还包括:
[0126]
将所述说话人的语音信号转发给所述音视频会议的参会人员的客户端;和/或,
[0127]
所述处理所述语音识别结果,包括:将所述语音识别结果发送给所述客户端;和/或,将所述语音识别结果发送给用于记录会议内容的服务器。
[0128]
比如,音视频会议为实时音视频会议,实时音视频会议时,服务端确定出6路说话人的语音信号,之后可以将这6路说话人的语音信号转发给参会的n(n大于或等于6)个人的客户端。
[0129]
另外,服务端还可以从asr服务获得6路说话人的语音信号的语音识别结果,并将语音识别结果发送给n个人的客户端,客户端收到语音识别结果后,可以将语音识别结果进行上屏显示。进一步地,语音识别结果中可以包含用户标识,比如流标识,从而可以区分各个说话人的语音识别结果。
[0130]
服务端还可以将语音识别结果发送给用于记录会议内容的服务器,从而实现对会议内容的记录。
[0131]
通过对说话人的语音信号进行转发,而不是转发所有的语音信号,可以保证收听
效果。通过将语音识别结果发送给客户端,可以实现客户端对语音识别结果进行上屏显示等处理。通过将语音识别结果发送给用于记录会议内容的服务器,可以实现会议记录。
[0132]
本公开实施例中,服务端对各客户端的音频流进行语音识别,识别结果再通过网络分发到各客户端实现实时字幕上屏,或发送至业务server对会议进行自动文字记录。实时性对字幕上屏的效果极其重要,是保证产品体验的最重要性能之一。本公开实施例主要在等待某个语音包时会造成延迟,最大等待时间为jitter,但此参数是可配置的,如果产品特别强调实时性,可以设置较小jitter来达到产品效果。同时识别结果从服务端通过网络发送到各端会有一定的延迟,但这和下行流从服务端发送至各客户端的路径是一样的,所以声音和文本几乎是同时到达客户端的。再加上客户端在播放音频时也会因为等待下行流的语音包而造成一定的滞后(50ms左右),所以,能够保证下行流在端上播放时,语音识别结果刚好到达客户端,甚至已经提前到达了,如此保证声音和识别字幕的同步性。
[0133]
图6是根据本公开第六实施例的示意图。如图6所示,本实施例提供一种语音识别方法,包括:
[0134]
601、服务端接收客户端发送的语音信号。
[0135]
其中,客户端发送的语音信号还可以称为上行流。
[0136]
602、服务端通过语音激励算法,确定说话人的语音信号。
[0137]
603、服务端将说话人的语音信号分别存入对应的语音队列。
[0138]
其中,语音激励算法可以计算出当前音频能量较高的最多6路流(通话人数小于6人时,路数小于6),这6路将作为下行音频流发送至各个客户端。同时,将这6路流发送至识别模块的6个有序队列中。
[0139]
604、服务端对说话人的语音信号进行语音识别,以获得语音识别结果。
[0140]
其中,语音信号可以以语音包为序列单元存储在语音队列中,服务端可以从语音队列中按序读取语音包,并对语音包进行解码等处理后,发送给asr服务,asr服务可以对接收的各个语音包进行语音识别,以获得语音识别结果,并返回给服务端。
[0141]
具体地,6路有序队列接收语音激励算法计算出来的讲话人列表的音频流,但说话人发生变化时,将发生音频流流切换,对应上面介绍的识别切换。每个队列分别与asr建立各自独立的连接,各路音频分路识别,实现自动区分识别结果对应的说话人。
[0142]
每个队列按照它记录的当前读取序列号current_seq_num,读取语音包,解码并发送至识别服务(asr服务),每读取一次后current_seq_num将加1。当发送有未找到的语音包时,将会等待jitter时间一直查找,等待时间过后依然没有此包时将跳过此包。
[0143]
605、服务端将说话人的语音信号及其语音识别结果,发送给各个客户端。
[0144]
实时通信,比如实时音视频会议中,601~605的流程可以重复执行。即,服务端在不断向asr服务发送语音包的过程中,asr服务也会不断的产生语音识别结果,服务端收到语音识别结果后将语音识别结果下发,如下发至客户端实现字幕上屏,和/或,发送至业务server形成会议记录。
[0145]
601~605的过程是实时同步进行的,整个系统在接收上行音频流的同时,也在不断地进行语音识别,实现实时通信中的连续语音实时识别。
[0146]
本公开实施例中,通过语音队列与asr服务之间的长连接对说话人的语音信号进行语音识别,可以对实时音视频会议中的语音进行识别,并且区分各个说话人。通过对最多
6路语音信号进行识别,可以避免不必要的识别连接,节省识别资源。通过对实时对语音包进行语音识别,能够实现识别字幕上屏基本0延迟,字幕刷新速度能做到逐字刷新。
[0147]
图7是根据本公开第七实施例的示意图,本实施例提供一种语音识别装置。如图7所示,该装置700包括:确定模块701、获取模块702和处理模块703。
[0148]
确定模块701用于确定说话人的语音信号;获取模块702用于采用专用语音识别通道,获得所述说话人的语音信号的语音识别结果,其中,不同的说话人具有不同的专用语音识别通道;处理模块703用于处理所述语音识别结果。
[0149]
一些实施例中,所述确定模块701具体用于:
[0150]
接收至少一路的语音信号;
[0151]
若所述至少一路的路数小于或等于预设个数,将所述至少一路的语音信号作为所述说话人的语音信号;或者,
[0152]
若所述至少一路的路数大于预设个数,基于所述至少一路的语音信号的能量值,按序选择所述预设个数的语音信号,作为所述说话人的语音信号。
[0153]
一些实施例中,所述专用语音识别通道为语音队列与asr服务之间的长连接,且不同说话人对应不同的语音队列,所述获取模块702具体用于:
[0154]
采用所述长连接,将所述说话人的语音信号发送给所述asr服务,以及,接收所述asr服务获得的所述说话人的语音信号的语音识别结果。
[0155]
一些实施例中,所述语音信号以语音包为序列单元,存储在所述语音队列中,所述获取模块702进一步具体用于:
[0156]
按序将所述语音包发送给所述asr服务;以及,
[0157]
接收所述asr服务获得的所述语音包的语音识别结果。
[0158]
一些实施例中,所述语音包携带序列号,所述获取模块702进一步具体用于:
[0159]
确定当前序列号,所述当前序列号按序增加;
[0160]
将序列号为所述当前序列号的语音包,发送给所述asr服务。
[0161]
一些实施例中,所述装置700还包括:
[0162]
保持模块,用于若未获取序列号为所述当前序列号的语音包,等待预设时长;
[0163]
发送模块,用于若所述预设时长后仍未获取所述当前序列号的语音包,按序获取所述当前序列号的语音包的下一个语音包,将所述下一个语音包发送给所述asr服务。
[0164]
一些实施例中,所述专用语音识别通道为语音队列与asr服务之间的长连接,且不同说话人对应不同的语音队列,所述装置700还包括:
[0165]
存储模块,用于将所述说话人的语音信号,存入所述说话人对应的语音队列中。
[0166]
一些实施例中,所述语音信号以语音包为序列单元存入所述语音队列,所述语音包携带序列号,所述装置700还包括:
[0167]
删除模块,用于若当前存入的语音包的序列号大于所述语音队列的最大队列长度,且未触发清空操作时,按序删除所述语音队列中的语音包;或者,
[0168]
清空模块,用于若当前存入的语音包的序列号触发清空操作时,清空所述语音队列。
[0169]
一些实施例中,所述语音信号携带流标识,所述装置700还包括:
[0170]
映射模块,用于建立所述流标识与所述语音包所存入的语音队列的队列标识之间
的映射关系。
[0171]
一些实施例中,所述装置应用于音视频会议,所述装置700还包括:
[0172]
转发模块,用于将所述说话人的语音信号转发给所述音视频会议的参会人员的客户端;和/或,
[0173]
所述处理模块703具体用于:
[0174]
将所述语音识别结果发送给所述客户端;和/或,
[0175]
将所述语音识别结果发送给用于记录会议内容的服务器。
[0176]
本公开实施例中,通过确定说话人的语音包,并获得说话人的语音包的语音识别结果,可以实现对说话人的语音识别,通过采用专用语音识别通道获得语音识别结果,可以实现对说话人的区分,从而可以实现连续语音识别。
[0177]
本公开的技术方案中,所涉及的用户个人信息的收集、存储、使用、加工、传输、提供和公开等处理,均符合相关法律法规的规定,且不违背公序良俗。
[0178]
可以理解的是,本公开实施例中,不同实施例中的相同或相似内容可以相互参考。
[0179]
可以理解的是,本公开实施例中的“第一”、“第二”等只是用于区分,不表示重要程度高低、时序先后等。
[0180]
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
[0181]
图8示出了可以用来实施本公开的实施例的示例电子设备800的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字助理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
[0182]
如图8所示,电子设备800包括计算单元801,其可以根据存储在只读存储器(rom)802中的计算机程序或者从存储单元808加载到随机访问存储器(ram)803中的计算机程序,来执行各种适当的动作和处理。在ram 803中,还可存储电子设备800操作所需的各种程序和数据。计算单元801、rom 802以及ram 803通过总线804彼此相连。输入/输出(i/o)接口805也连接至总线804。
[0183]
电子设备800中的多个部件连接至i/o接口805,包括:输入单元806,例如键盘、鼠标等;输出单元807,例如各种类型的显示器、扬声器等;存储单元808,例如磁盘、光盘等;以及通信单元809,例如网卡、调制解调器、无线通信收发机等。通信单元809允许电子设备800通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0184]
计算单元801可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元801的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。计算单元801执行上文所描述的各个方法和处理,例如语音识别方法。例如,在一些实施例中,语音识别方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元808。在一些实施例中,计算机程序的部分或者全部可以经由rom 802和/或通信单元809而被载入和/或安装到电子设备800上。当计算
机程序加载到ram 803并由计算单元801执行时,可以执行上文描述的语音识别方法的一个或多个步骤。备选地,在其他实施例中,计算单元801可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行语音识别方法。
[0185]
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、复杂可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
[0186]
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0187]
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0188]
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0189]
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)和互联网。
[0190]
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计
算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与vps服务("virtual private server",或简称"vps")中,存在的管理难度大,业务扩展性弱的缺陷。服务器也可以为分布式系统的服务器,或者是结合了区块链的服务器。
[0191]
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
[0192]
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献