通话降噪算法在手机和IOT设备上的应用和挑战

news2024/11/25 15:44:19

随着电子产品的升级换代,用户对通话质量的要求也越来越高。通话降噪算法对通话质量起到了关键核心的作用。计算资源的提升使得深度学习模型在便携式的低功耗芯片上面跑起来了,器件成本降低让IoT设备开始使用骨导传感器,,那怎么样才能将深度学习和传统算法结合?怎么样充分利用好骨导传感器?怎么样将客观测试的结果转化为真实的用户体验?这也是新时期通话算法面临的新的挑战。LiveVideoStackCon 2022北京站邀请到了王林章老师,为我们分享通话降噪算法在手机和IOT设备上的应用和挑战。

文/王林章

整理/LiveVideoStack

大家上午好。今天我带来的分享题目是:通话降噪算法在手机和IoT设备上的应用和挑战。

5d2950ef9eed3469ef4604ed78ba9295.png

先看一下国家统计局的数据,在2021年全国通话时长有 4. 56 亿万分钟,基本上平均每人每天至少有 10 分钟的通话时间。

ec37273166c43102d1e507642e2d7ecb.png

手机保有量也非常大,在 21 年底有18. 56 亿部手机。如果根据中国有14 亿人口的话,可能还有4亿多人有两个手机。

21年智能手机出货量的数据是13亿台,22年的数据量有所下降,大约在 11 亿台。

dba5cc621cb334916e1a443587163f0c.png

然后是 TWS 耳机的出货量,在 22 年大约有 3. 5 亿台,也在稳步增长,所以这个算法也在不停运作。

9cfbcdd552e563ddfe8c58025f8cd0ba.png

今天我从五个方面讲一下通话降噪算法落地的状态:

首先,通话降噪算法的评价方法,怎么样的算法才是最好的算法?其次,通话降噪算法的背景介绍。最后,介绍通话降噪算法面临的挑战、落地的实践和未来的展望。

-01-

通话降噪算法的评价方法

835f6589e37badf28c2fcb361ba6cc03.png

首先介绍一下:什么是语音,什么是噪声。

我们一般把语音分为两类:清音和浊音。清音,一般指声带不发音;浊音,声带发音。从图频谱上看,浊音会有很多基音和谐波,清音基本没有,就像白噪声。清音和浊音并不是指一个字,而是在音节里有清音和浊音的区别。

噪声分为很多种。常见的噪声,有马路噪声、地铁噪声、施工的噪声。还有一些特殊噪声,如风噪、共振噪声,因为这些噪声对算法的挑战更高,所以把它们列为特殊噪声。

关于噪声的分类,如果从算法的角度来讲,传统算法都可以处理好一般的平稳噪声。

根据空间的特性,可以分为方向性噪声和扩散场噪声,一般用阵列算法来处理。

此外,根据频带的宽度,又分为窄带和宽带噪声。图里有清音和浊音的标注,浊音会有比较清晰的谐波成分;清音就像白噪声,是一个比较平稳的状态。

1fdcff0d12fa6d251888283d35a72452.png

我们大致理解一下噪声的范围。在生活中,比如会议室,如果不说话,可能是40到80dB的噪声场景。到了马路上,如果有汽车通过,一般是70到 80 dB。如果在地铁上,地铁呼啸而来的噪声可能会到90 dB。酒吧、KTV 里的噪声可能到了100 dB。飞机发动机就更大了,可能有110到130dB的噪声。

后文会给大家一些建议,看看什么样的噪声场景对我们危害比较大。

再说一下语音的声压级范围。一般耳语是在50 dB,正常说话可能在60 dB,不包括用扩音器。如果用扩音器,声音在 100 dB左右。大声喧哗一般是80dB,歌唱家一般在 90dB左右,但是最高能达 130dB。

左边的图显示了什么样的噪声对我们的影响最大。其实,在130dB 的情况下,我们只要在这个环境里待两分钟,那么听力就可能受伤害了,也许就不能再恢复了。

然后再看一下听力在KTV中的状态,KTV 里的噪声大约在 100 dB 左右,如果在这个环境里待过两个小时或超过两个小时,听力也会受到伤害,而且这种伤害是不能恢复的。

所以,给大家一个建议:不要在KTV里待太长时间,两个小时足够了,超过两个小时可以去休息一下,保护自己的听力。

04de55bc63c9ca5bf128d8a3a2d5cfe1.png

再看一下,如果耳朵受损,会是一个什么样的状态。这里有一个数据,在正常播放的情况下,能够听得很清晰。在1000赫兹的情况下,如果正常播放的声音听不清楚了,要加大到约 20 dB 以上才能听清的话,那么耳朵就已经受到严重的伤害了。这时根据中国医学的数据来看,在 4000赫兹的环境里,可能要加到 70—80 dB 才能听清。所以如果耳朵受伤,可能最初听到的声音是很闷的。和大家强调一下,保护听力还是很重要的。

f7c6e0b40e6a6fa3877e7ff6f7fb1c5d.png

国际标准如何规范通话降噪的参数?

ITU出了一系列参数,因为我们在做通话降噪,所以最关注P800 这个协议,它是关于通话降噪评价非常多的一个标准,大家如果有兴趣可以去找原文看一下。

还有P830、805等一系列标准,大部分都是给音频和语音的编解码,用于音频的质量的判断,speech 也会有编解码质量的损伤,所以也有一些标准对此进行规范。

右边的第一张图是天津大学的老师在做的关于信噪比对可懂度的评价。我们发现当信噪比在0dB 的时候,可懂度基本在 50% 左右。当信噪比大于0,如果超过 10dB ,可懂度在 80dB的80% 以上,所以这时的可懂度是比较好的。当信噪比低于- 5dB时,可懂度就非常差了。

3cdc02833750f38d3f5ae814292e3c05.png

我们有一些通话和评测要求,这些要求会更加严格。在测试时,我们进行了严格的检验。例如要求测试时手机的通话时间,如打电话一小时或两小时,在不同环境下保持算法稳定运行。另外,当拿起手机时,我们会堵住底部的麦克风,这时即便通话也不能说话,因为底部的麦克风被堵上,声音无法传递。这是我们自己的测试要求。

刚才提到了一个重要的通话标准,即ITU标准里的P800。这个标准通常采用五分制评分。在算法开发过程中,我们通常无法完全达到4到5分的水平,因为这个要求非常高。因此,我们主要追求达到3到4分的水平,即听起来非常清晰,但可能会有一些杂音。

当然,如果得分在1到2分之间,这基本上是不可接受的;而得分在2到3分之间是可以的,意味着仍然可以进行交流,但可能存在一定的延迟。因此,在恶劣情况下,也可能出现2到3分的情况,能够确保可以通话,但音质可能不是很好。

8d3a9a27cf35ed887d92312ed7eadc8c.png

在这里,我具体列举了具体参数。当做深度学习模型训练时,我们通常会关注到PESQ分和STOI分,这是短时主观的可懂度的评估。比如第三个TMOS分数,它评估的是在没有噪声的情况下使用手机打电话后,对方接收到的语音质量如何。大家可能会有一个疑问,即在没有噪声的情况下打电话,那传输的语音应该非常好,理论上讲确实应该非常好。但是,我们发现,算法可能会破坏语音,或者在传输过程中造成破坏。因此,TMOS是对传输过程中没有噪声且语音没有受损的情况下的评估。接下来,我们再看看NMOS和SMOS,它们是在噪声环境下对语音进行评估的。NMOS评估的是在噪声环境下打电话后,抑制噪声水平如何?抑制得越多,NMOS分数就越高。SMOS评估的是在噪声环境下打电话后,经过链路传输后的语音的保证度如何?语音保证度越好,得分就越高。

所以,看起来SMOS和NMOS的分数有些矛盾,因为抑制得越多,可能损伤的语音也越多,而如果要求语音保证很好,降噪水平可能就达不到目标要求。因此,有一个综合的评分叫做GMOS分数。GMOS分数综合了SMOS和NMOS的评分,从而得出一个结果。

TMOS、SMOS、NMOS以及GMOS是评价通话质量时非常重视的几个参数。目前,有一些趋势,就是大家还不太相信GMOS,如小米采用的评估方式是将SMOS和NMOS的平均值作为评价标准,而不是用GMOS。

ba91cb48df900ecfefd159eea491b6e6.png

小米的通话评估是在全消声室中进行的,目前所有的通话都会在这样的消声室中进行评价。噪声复原系统有6个扬声器,周围有6个扬声器来进行噪声复原。我们的手机是标准装卡,包括嘴巴与扬声器的距离以及耳朵与听筒的距离。这是我们的标准评价测试系统。

-02-

通话降噪算法的基础介绍

d750a3d11898ddda4c844dcb8f07aecf.png

在介绍完语音通话评价后,我们继续探讨算法的技术。

首先,我们来看一下通话降噪算法的发展过程。最早,大家可能都知道谱减法、噪声估计这些早期的算法,后来的数据处理中也会用到类似的方法,例如高斯混合模型(GMM)算法和子空间算法,目前我们也在使用矩阵分解方法,如IV。

从2013年开始,深度学习在降噪领域发挥了强大的能力,尤其在抑制非平稳状态方面表现出色。早期的方法基于掩蔽曲线和频谱掩蔽,后来逐步升级,出现了基于复数谱mapbased方法。

c57690f95ce14bcdd142a66ee84259e3.png

目前,我们采用深度学习与传统方法相结合的方式进行降噪。我认为未来的趋势可能是采用多模态的降噪方法以及训练超大模型,这种降噪方法可能与目前热门的GPT模型以及超大模型的输出相关。

efebaeea00b3bc4f59960866b59b6cf5.png

在通话降噪领域,从2012年到2013年,深度学习的引入可以被视为一个里程碑。其中有两篇文章具有重要意义:一篇是斯坦福的文章,在语音识别方面,通过抑制噪声,提高了鲁棒性;另一篇是2013年王德亮老师在语音分离方面引入了机器学习的方法。

fdb0b3f8474ce72530b0e621c862e341.png

我把通话降噪里比较经典的文章列在图中,这里有一个过程:早期我们用什么样的方法去做语音降噪,到后来我们逐步深入提升它的效果。

在早期阶段,徐勇在降噪研究中引用了一种称为"Dense"的方法,即线性层,取得了较好的降噪效果,这是早期取得较好降噪效果的一篇文章。然而,这种"Dense"层的计算量较大,并且效果有所欠缺,因为它所学习的东西类似于统计规律。

因此,从2016年开始,高通在研究中引入了一种被称为"CN"的卷积网络。卷积网络的好处在于它能够学习频域之间的频谱信息,所以具有更好的效果。

在2018年,有两篇文章也值得提及。一篇是由李锦辉老师在引入LSTM 的时候,提出的基于递归的RNN的模型,而另一篇则是大家比较熟悉的RNN方案,其参考代码在网上可获取。其模型具有非常低的计算量,但带来了非常好的降噪效果。它采用了传统降噪思路,包括降噪模型和树状滤波过程,这些细节较为复杂,但总的来说,这篇文章在早期为大家提供了有价值的参考。

随着对深度学习的研究,在2020年ICASSP举办了一个降噪比赛。西北工业大学的老师开发了DCCRN模型,效果是非常惊艳,在2020年的比赛中拿到第一名。

在2021年的比赛里,声学所的李晓东老师团队提出了一个分阶段降噪的模型,在处理混响的情况下表现更出色,也获得了第一名。

因此,总体来看,发展方向是从DNN到CNN,再到RNN,然后进一步发展为更为复杂的深度学习DCCRN模型。

38747d325a40d6c5aedec58e95cd7146.png

这里我想提一下我们自己的工作,之前介绍的都是其他老师在降噪研究方面的工作,而我们在这个领域做了一点简单的改进。在前面介绍语音和噪声的情况时,提到语音除了基频和谐波外,还可能有共振峰等概念。所以,我们认为在卷积层上不一定需要在整个频谱范围内都做卷积。我们尝试了一种改进方式,即只对关注的低频部分进行卷积,然后再对关注的高频部分进行卷积。

d4ba82c5f1279a97833e5060b27503ca.png

这里的原始数据是一个婴儿的哭声。婴儿的哭声与人的声音非常相似,也有基频和谐波,因此对其进行降噪是非常难的。

我们再听一下在使用小模型时的输出结果,这个声音可能会听起来有些沉闷,这是因为在收敛过程中保留了一些婴儿的哭声。

再看一下训练的大模型的结果,基本上可以听到大模型对婴儿哭声的抑制效果非常好。语音的清晰度也还可以,基本上能听得清楚。根据前文所提的MOS打分,估计大模型的评分应该在3分左右,而小模型可能是2分多。

这是一个基础的概念,深度学习方面的内容讲完后,我们还需要看一下传统算法,因为在通话降噪领域,传统算法仍然发挥着重要作用。

9eaae477a9647b467d6137a7c772a46e.png

这里展示了回声产生的过程:有一个说话人发出声音,声音通过路径传播,如果在下方黄色框内没有用算法进行处理,声音会通过麦克风进入耳朵。

29543f3cbc3feb3dd36a0ea47fc2a8ac.png

在回声消除的算法中,最早期是采用牛顿迭代方法,它是一种简单的方法,通过误差和梯度迭代计算W因子。然而,这种方法存在一些问题,比如如何处理双重回声、共享环境、怎么确定滤波器长度、收敛速度以及非线性问题等。

所以我列出了一些简单的建议。例如,在设计滤波器时,考虑到复杂的混响环境,不一定需要使用很长的滤波器,可以使用其他方法。

9404bd136a043d47385c1d6bacddd268.png

此外,关于AEC,现在也有使用神经网络的方法,它的优点是语音保真度更好。目前有两种方法,一种是让神经网络学习整个过程,将麦克风的数据和参考信号输入网络,让网络自己学习和处理回声抑制;另一种方法是将传统算法的结果和参考信号一起提供给神经网络进行处理。这两种方法都各有优势,但是神经网络的计算量非常大,与传统方法相比,计算量的问题让我们很难接受。

所以,我们也在考虑一个问题,即是否将降噪效果也整合到回声抑制中。我们正在尝试这件事,即让神经网络既处理回声抑制,又进行降噪处理。

038ff958457ad1c3012ef861d1bb0a16.png

在2022年,我们参与了ICASSP的AEC挑战赛。我们发表了一些相关文章,取得了还不错的效果。特别是在低信回比的情况下,比如-5dB,甚至-50dB下,我们的方法仍然能够获得良好的效果。我们使用了一些热门的技术,比如Transformer,这是一种神经网络模型。但是,因为它的计算量较大,所以目前只是做了一些演示,并没有落地应用。另外,关于AEC,可能还涉及到一些阵列算法,适用于手机应用和IOT应用。

47becc6fa3a0807324c1dda2e41be113.png

阵列算法主要用于实现方向性的信号抑制,其中包括一些常见的算法,如GSC、MVDR、GEV等。这些算法的主要目标是求出麦克风阵列与声源方向之间的关系。具体的推导过程可以在相关资料中找到。

通过阵列算法,我们可以得到麦克风阵列摆放位置与声源方向之间的关系。这个推导过程的好处在于可以了解每个麦克风接收到信号时会出现什么样的差异。

c0bbd49fc6b6c6d94a9da02c60c8d373.png

阵列算法的推导过程涉及到对阵列接收信号的标注以及确定目标方向矩阵。在推导过程中,可以使用简单的阵列算法,如CBF算法。CBF算法的基本思路是通过比较每个麦克风接收到的信号来确定最优的状态,这是CBF算法的最简单过程。

5e4d14619529a16ae77aed9de71aed9d.png

这里我们在做一件最重要的事情,就是确定两个麦克风之间接收信号的区别。其中最关键的因素可能是延时差异。虽然整个推导过程可能非常复杂,但它计算了延时对两个麦克风的影响。

2c7b21e7ecc818e3a70af313a712d3cf.png

CBF 只是理论上的推导,MVDR是我们真正使用的算法。MVDR算法的主要思路是通过约束条件来保证方向位的正确性,并使用拉格朗日算子来最小化目标函数并最大化目标信号,同时最小化其他方向的噪声信号。

eb74cb93fdabbb20660308bd54fc39e1.png

对于单通道降噪问题,早期的方法是基于能量估计。通过计算信号在频段上的能量,并跟踪最小值,如果最小值不为零,那么它就被认为是这个平台里的噪声。

我们在实际应用中,发现平滑能量计算对结果的影响非常大。这里可以看到Alpha因子对噪声估计的准确度影响很大。

45ca2c3e6a41ddfea3157fa08050413a.png

单通道降噪升级在这个基础上提出了一种基于信噪比的迭代评估方法,通过判断平滑和改进来获得更好的降噪效果,这算是传统算法里的迭代升级。

-03-

通话降噪面临的挑战

我们再看一下算法面临的挑战。

我们在手机、IOT以及在其他设备上的应用的时候,面临的最大问题就是计算资源。因为现在和以前不同,以前是传统算法,计算的容量有限。但是现在有深度学习这个模型。深度学习模型在语音降噪领域取得了显著的进展。这些模型的效果与模型的规模相关,越大的模型能够学习越多。如果想要实现更好的效果,关键是要确保足够的计算资源,所以这也依赖于硬件的不断发展。

3089dc7e5b6e34589cac2da901370d06.png

虽然电脑上的计算资源较为充足,但在可穿戴设备(如小米SE手表)上,需要不停地优化手机里的算法,以便应用到手表、耳机上。

834a7126773ab4fd336d87c7055722a6.png

比如在电脑上,内存资源用1M以上也无所谓。然而,在手机上,可用的资源较为有限,可能只有几百K的内存可供使用。而在IOT设备上,通常只能分配100K左右的内存。所以这是一个很大的挑战。

32c811c52a3dd48e13e3da27208c82d9.png

在手机使用中存在一些挑战,其中之一是关于麦克风的问题。很多人打游戏时会在两端握着这个手机,这会把麦克风堵住。如果在打游戏的同时还需要与队友通信,但麦克风被堵住了,对方就无法听到声音。因此,我们就会面临一些挑战,比如如何解决麦克风被堵住的问题。

在2020年,小米普及了立体声功能的手机,手机两端都有speaker的声音,所以声音和麦克风的距离非常近。这种近距离使信回比非常低,甚至可以达到-30dB的超低信回比。

在测试中,我们还遇到了一些超级混响环境下的自适应回声消除(AEC)问题。测试团队会拿着手机在封闭的玻璃房间里进行电话测试,这种环境下存在非常强的混响。这种反复的声音反射可能会导致滤波器收敛困难,给我们带来一定的挑战。

3ad4c57de72c0845254b0a9f15c424bd.png

在实际应用中,我们面临一些问题。例如,无线充电器的使用,当手机放在无线充电器上并打免提电话时,充电器的底部可能会堵住麦克风。因此,这时需要算法智能性地解决这个问题。

另外,耳机的使用也可能遇到类似的问题,例如不正确的佩戴方式会导致阵列算法的出现问题。为此,我们采用自适应波形形成而不是固定波束形成的方法。

除此之外,我们还面临其他挑战,例如风噪的处理,因为风噪对麦克风信号的影响是无规律的。因此,处理风噪也是一个相对困难的问题。

b0d679fdf20e1d60942358a0036e1697.png

在处理音频的过程中,我们还遇到了一些挑战。例如,在使用3G网络时,如果用户使用电信号码,那么在3G网络中可能会产生Tap噪声,这是我们需要解决的问题之一。

另外,在早期的手机中,通常会有收音功能。然而,电路的GND地线可能会引入一些噪声,这也需要我们处理。

-04-

通话降噪算法的落地实践

8cbbe3d18be1dc7114968b85e410a5a4.png

在处理计算量的问题时,芯片的发展起到了重要的作用,如MTK和展讯,都在开发内核。这些内核不断升级,包括内核数目和SIMD等功能也在不断提升。SIMD指令能够执行多个乘加任务,从而为我们提供更多的计算资源。

所以大家可以考虑一下算法芯片话的开发,这是一个比较有潜力的平台。未来,在计算能力上面也可以看到一代、二代、三代不停的成长。

62722125237f383c2d549e97d882e9bb.png

在将算法落地时,我们遇到的第二个问题是参数传递和更新的挑战。算法是有一些参数的,我们需要将这些参数顺利地传递给下层的DSP,以便更新算法参数。

我们遇到了一个耳机没有声音的问题。我们发现在测试时,没有测试到印度耳机的例子,我们只使用国内的耳机进行测试,而印度耳机的增益非常小。所以一旦出现问题,我们必须迅速解决。

因此,我们的算法一旦调整完毕,就需要立即更新参数。在这种情况下,设计的结构要求CPU能够快速将参数传递给DSP,以便迅速解决问题。这里提到的Orasis架构可以确保CPU与底层DSP之间实现快速通信。然而,我们也面临一些问题。例如,在通话过程中,客户可能抱怨通话质量不佳,但无法获得客户的隐私数据,所以我们会在客户自己的手机上保存一些数据。

29f350943f5677c5ccaab294f0d9d2f9.png

当用户反馈通话质量不好时,可以保存相关的数据Log。我们会跟踪这些日志,并直接与客户沟通,询问是否可以上传这些日志。我们会在本地保留这些数据,获取部分用户数据来做进一步的数据分析。

14ed5a5dc6212bb23fd537ac2d024d8e.png

在 TWS耳机上,除了使用传统的麦克风进行通信外,我们还可能使用 VPU进行通信。在耳机上,VPU的数据处理能力会被充分利用。

bd73450e16c0803a0e794a95d8ed292f.png

我们会发现VPU的质量并不理想,尤其是在高频方面存在污染。然而,它在低频方面的效果很好。为了解决这个问题,我们在这方面做了大量工作,把风噪处理得非常平稳。

541c37d8244c713588c6bba5e53c823b.png

在手表上也做了这种处理,比如怎么抑制混响。

在手机通话方面,也进行了一些处理,例如,只有手机的所有者能够拿起手机进行通话,其他人无法使用手机进行通话。

856cf43d22e7e468b00dc8e64faf8559.png

09a62f55adfdf01781954caa1cee82d9.png

我们通过声纹降噪的方法,利用前30秒或10秒甚至更短的数据来获取用户的声纹信息。然后,在通话过程中,将应用这个声纹信息来进行算法处理,以便抑制其他人的声音。

829624c8c3a7258c93b98fd5b83e8e1b.png

这是一些声纹降噪效果体验的演示。

0579eaa21db5a227c710c7fc1c1ddf33.png

通话降噪其实还有很多问题,我简单罗列一下。例如强非线性情况下的一些问题、内麦回声的问题等,这都是需要解决的。

-05-

通话降噪的未来展望

d686dff098b6687ae4e38de688fa62c3.png

未来展望方面,对于手机通话降噪,我们可以考虑基于低复杂度和低功耗的要求。这意味着可以结合传统算法和深度学习技术。在高计算资源的情况下,深度学习模型可能会成为主要的选择,并采用多级优化的方式来提高性能和效果。

8578b9da08dc949ac83486dc36f41a45.png

在低功耗的情况下,我做了简单的罗列。有些问题可以使用经典算法来处理,而对于深度学习方面,可以考虑以下几个方面:特征选择、网络结构、Loss 函数。但在实际应用中,可能会遇到小模型在图像上的表现较好,但在听觉感知上效果可能不理想的情况。

f6e1a2899bf2066b320c3592a43806a1.png

最后,我认为多模态降噪也是未来的一个方向。我今天的分享就到这里,谢谢大家。


165f22806a7911e3e50f2bb3519840d5.jpeg

LiveVideoStackCon是每个多媒体技术人的舞台,如果您在团队、公司中独当一面,在某一领域或技术拥有多年实践,并热衷于技术交流,欢迎申请成为LiveVideoStackCon的出品人/讲师。

扫描下方二维码,可查看讲师申请条件、讲师福利等信息。提交页面中的表单完成讲师申请。大会组委会将尽快对您的信息进行审核,并与符合条件的优秀候选人进行沟通。

b4e3233b424f76b13a1a22cbae8e03d6.jpeg

扫描上方二维码 

填写讲师申请表单

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/835914.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

提升制造业智能化水平——免费MES系统的领航者

随着工业4.0的持续推进和数字化转型的浪潮涌现,制造业正面临着前所未有的机遇与挑战。在这个数字化时代,企业需要更高效、智能、灵活地管理生产流程,以应对日益激烈的市场竞争。而制造执行系统(MES)无疑成为了实现这一…

抽象类的顶级理解

目录 1.抽象类的介绍 2. 抽象类语法 3.模板设计模式 1.抽象类的介绍 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果 一个类中没有包含足够的信息来描绘一个具体的对象&…

【Vue3项目实战】vue3项目基于el-menu封装左侧菜单栏组件

文章目录 概述一、先看效果1.1 静态效果1.2 动态效果 二、核心思路三、全量代码3.1 文件目录结构3.2 /sidebar/index.vue 中3.3 /sidebar/sidebarItem.vue 中3.4 路由表结构 四、代码讲解五、SVG组件六、系列文章友链1、[配置husky、stylelint、commitlint,实现git提…

庄懂的TA笔记(十九)<特效:顶点 平移+缩放+旋转+幽灵夜巡效果)>

庄懂的TA笔记(十九)<特效:顶点 平移缩放旋转幽灵夜巡效果)> 大纲: 效果展示: 正文: 一、顶点平移: 1、代码实现: 1.1、声明移动范围,移动速度。 _…

‘<>‘ cannot be used with anonymous classes

‘&#xff1c;&#xff1e;‘ cannot be used with anonymous classes <>不能与匿名类一起使用 Description Resource Path Location Type <> cannot be used with anonymous classes SearchHitSupport.java /spring-data-elasticsearch/src/main/java/org/spri…

QWidget样式

1、设置边框样式&#xff1a; QWidget {font-family:Microsoft YaHei UI;background:#ffffff;/*border:3px solid rgba(207, 209, 208, 170);设置整体边框*/border-bottom: 3px solid rgba(207, 209, 208, 170);/*设置底部边框*/border-top: 3px solid rgba(207, 209, 208, 1…

谷歌云 | 电子商务 | 如何更好地管理客户身份以支持最佳的用户体验

【本文由Cloud Ace整理发布。Cloud Ace是谷歌云全球战略合作伙伴&#xff0c;拥有 300 多名工程师&#xff0c;也是谷歌最高级别合作伙伴&#xff0c;多次获得 Google Cloud 合作伙伴奖。作为谷歌托管服务商&#xff0c;我们提供谷歌云、谷歌地图、谷歌办公套件、谷歌云认证培训…

docker创建镜像并上传云端服务器

docker创建镜像并上传云端服务器 docker容器与镜像的关系1.基本镜像相关文件创建1.1 创建dockerfile文件1.2.创建do.sh文件1.3 创建upload_server_api.py文件1.4 创建upload_server_webui.py文件1.5 文件保存位置 2. 创建镜像操作2.1 创建镜像2.3 创建容器2.2 进入环境容器2.3 …

leetcode----JavaScript 详情题解(4)

目录 2722. 根据 ID 合并两个数组 2723. 添加两个 Promise 对象 2724. 排序方式 2725. 间隔取消 2726. 使用方法链的计算器 2727. 判断对象是否为空 2624. 蜗牛排序 2694. 事件发射器 2722. 根据 ID 合并两个数组 现给定两个数组 arr1 和 arr2 &#xff0c;返回一个新…

Flink 系列四 Flink 运行时架构

目录 前言 介绍 1、程序结构 1.1、Source 1.2、Transformation 1.3、Sink 1.4、数据流 2、Flink运行时组件 2.1、Dispatcher 2.2、JobManager 2.3、TaskManager 2.4、ResourceManager 3、任务提交流程 3.1、standalone 模式 3.2、yarn 模式 4、任务调度原理 4…

AI智慧安监视频监控汇聚平台EasyCVR调用接口出现跨域现象该如何解决?

视频监控汇聚EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视…

Scrum敏捷开发流程图怎么画?

1. 什么是Scrum敏捷开发流程图&#xff1f; Scrum敏捷开发流程图是一种可视化工具&#xff0c;用于形象地描述Scrum敏捷开发方法中的工作流程和活动。Scrum敏捷开发流程图展示了项目从需求收集到产品交付的整个开发过程&#xff0c;帮助团队理解和跟踪项目进展&#xff0c;促…

vue使用FullCalendar插件实现日历会议预约功能

目录 1. vue 项目使用npm安装插件 2. vue 页面代码&#xff08;直接复制粘贴可用&#xff09; 3. vue FullCalendar的内置函数以及配置 前言&#xff1a;此案例是用FullCalendar插件做一个会议日程预约功能&#xff0c;此功能可查看自己的日程安排会议信息等...... FullC…

国产化车载智能座舱方案引领新时代

车载智能座舱是一项集成了多种技术的复杂工程&#xff0c;包括大量的硬件设备、大数据分析、实时交互、用户体验和技术创新研发等。由于涉及的技术领域繁多&#xff0c;智能座舱技术在实际应用中面临很多技术壁垒&#xff0c;如硬件性能、互联互通、集成性、数据采集、存储、处…

Flink正常消费一段时间后,大量反压,看着像卡住了,但又没有报错。

文章目录 前言一、原因分析二、解决方案 前言 前面我也有提到&#xff0c;发现flink运行一段时间后&#xff0c;不再继续消费的问题。这个问题困扰了我非常久&#xff0c;一开始也很迷茫。又因为比较忙&#xff0c;所以一直没有时间能够去寻找答案&#xff0c;只是通过每天重启…

智慧医院该啥样?白皮书给你答案

注意&#xff1a;案例数据均为虚拟数据 随着云计算、大数据、物联网、区块链、新一代互联网通信等新技术的不断发展,“新基建”的不断升级,新医改的不断深化,智慧医院成为我国医院现代化建设的重要发展方向。 党的十八大以来&#xff0c;数字经济更是上升为国家战略&#xff…

运动式蓝牙耳机哪种好、口碑最好的运动蓝牙耳机

为了保持身体健康&#xff0c;许多人在闲暇时选择进行一些日常运动。其中&#xff0c;很多人喜欢在运动时戴上耳机&#xff0c;让身体随着音乐的节奏运动&#xff0c;希望能够增强运动效果。正因如此&#xff0c;市场上涌现了许多优秀的运动耳机品牌&#xff0c;它们推出了一系…

人脸识别场景下Faiss大规模向量检测性能测试评估分析

在前面的两篇博文中&#xff0c;主要是考虑基于之前以往的人脸识别项目经历结合最近使用到的faiss来构建更加高效的检索系统&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《基于facenetfaiss开发构建人脸识别系统》 Facenet算法的优点&#xff1a;高准确率&#…

MQTT协议详解「概念、特性、版本及作用」

MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输&#xff09;是ISO标准下基于发布/订阅方式的轻量级消息协议。MQTT通常使用TCP / IP&#xff08;传输控制协议/Internet协议&#xff09;作为其传输&#xff0c;但也可以使用其他双向传输。MQ…

vue、uniapp直传阿里云文档

前端实现文件上传到oss&#xff08;阿里云&#xff09;适用于vue、react、uni-app&#xff0c;获取视频第一帧图片 用户获取oss配置信息将文件上传到阿里云&#xff0c;保证了安全性和减轻服务器负担。一般文件资源很多直接上传到服务器会加重服务器负担此时可以选择上传到oss&…