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

随着电子产品的升级换代,用户对通话质量的要求也越来越高。通话降噪算法对通话质量起到了关键核心的作用。计算资源的提升使得深度学习模型在便携式的低功耗芯片上面跑起来了,器件成本降低让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

扫描上方二维码 

填写讲师申请表单

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python接口自动化-requests模块之post请求

一、源码解析 def post(url, dataNone, jsonNone, **kwargs):r"""Sends a POST request.:param url: URL for the new :class:Request object.:param data: (optional) Dictionary, list of tuples, bytes, or file-likeobject to send in the body of the :cla…

【MySQL】学习汇总(完整思维导图)

用心打造超详细MySQL基础学习教程,文末附系列完整思维导图 内容导航 新手村 SQL入门(一)常见函数使用(二)约束(三)多表查询(四)事务(五) 进阶路 存储引擎(六) SQL性能分析 (七) 索引 (八) SQL优化(九) 视图(十) 存储过程(十一) 触发器(十二) 锁(十三) MySQL管理(十四)…

SpringBoot3---核心特性---2、Web开发I

星光下的赶路人star的个人主页 如果我们总是等待绝对的一切就绪,那我们将永远无法开始 文章目录 1、WebMvcAutoConfiguration1.1 生效条件1.2 效果1.3 WebMvcConfigure接口1.4 静态资源规则代码1.5 EnableWebMvcConfiguration源码1.6 为什么容器中放一个WebMvcConfi…

Flask项目打包为exe(附带项目资源,静态文件)

1.在项目根目录创建my_app.spec文件,内容如下: # -*- mode: python ; coding: utf-8 -*-block_cipher Nonea Analysis([server.py], # flask入口pathex[],binaries[], datas[("E:/**/templates","/templates"),("E:/**/s…

(7.28-8.3)【大数据新闻速递】《数字孪生工业软件白皮书》、《中国绿色算力发展研究报告》发布;华为ChatGPT要来了

【数字孪生工业软件白皮书(2023)】 近日,第七届数字孪生与智能制造服务学术会议成功举行,2023《数字孪生工业软件白皮书》在会上正式发布。《白皮书》在《Digital Twin》国际期刊专家顾问委员会指导下,由国家重点研发计…

物理量时空属性内禀律

一、物理量时空属性内禀律: 1、物理量具有内在的时空属性,对所有表达式具有时空强制性。 2、物理量时空属性的计算等级较表达式低1个数学等级。 二、物理量时空属性的表示: 空间直线L的时空属性表示为: d(L)(1s,0t) &#xff…

Spring 事务详解(注解方式)

目 录 序言 1、编程式事务 2、配置声明式事务 2.1 基于TransactionProxyFactoryBean的方式(不常用,因为要为每一个类配置TransactionProxyFactoryBean) 2.2 基于AspectJ的XML方式(常用,可配置在某些类下的所有子…

「从零入门推荐系统」22:chatGPT、大模型在推荐系统中的应用

作者 | gongyouliu 编辑 | gongyouliu 提示:全文2.5万字,预计阅读时长2小时,可以先收藏再慢慢阅读。 我们在上一章介绍了chatGPT、大模型的基本概念、核心技术原理等基础知识,有了这些背景知识的铺垫,下面我们来介绍ch…

使用tinyxml解析和修改XML文件

首先要清楚XML文件包含哪些元素&#xff1a; 他是由元素、文本或者两者混合物组成。元素可以拥有属性&#xff0c;元素是指从开始标签到结束标签的部分。 <?xml version"1.0" encoding"UTF-8" ?> <books><book id"1001">&…

day50-springboot+ajax分页

分页依赖&#xff1a; <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.0.0</version> </dependency> 配置&#xff1a; …

【100天精通python】Day23:正则表达式,基本语法与re模块详解示例

目录 专栏导读 1 正则表达式概述 2 正则表达式语法 2.1 正则表达式语法元素 2.2 正则表达式的分组操作 3 re 模块详解与示例 4 正则表达式修饰符 专栏导读 专栏订阅地址&#xff1a;https://blog.csdn.net/qq_35831906/category_12375510.html 1 正则表达式概述 python 的…

苹果电脑第三方应用程序卸载工具CleanMyMacX4.14

CleanMyMacX&#xff0c;这是一款可以帮助你快速识别并卸载电脑上的多个应用程序的第三方工具&#xff0c;省去了逐个卸载的繁琐步骤。 我们首先要到下载CleanMyMacX&#xff0c; CleanMyMac X全新版下载如下: https://wm.makeding.com/iclk/?zoneid49983 然后&#xff0c…

大数据Flink(五十五):Flink架构体系

文章目录 Flink架构体系 一、 Flink中的重要角色 二、Flink数据流编程模型 三、Libraries支持

从 TCP/IP 到 CCIP:Chainlink 与合约的互联网

未来已来。通过链上金融重塑资本市场预计将影响全球价值 8.67 万亿美元的资产的使用方式。 Chainlink 的跨链互操作性协议&#xff08;CCIP&#xff09;将会这一转型过程中发挥重要作用&#xff0c;这是区块链连接性和互操作性的突破&#xff0c;使得 DeFi 应用可以通过单一界…

前端实习day20

今天解决了不少bug&#xff0c;成就感满满&#xff0c;有几个问题困扰了我很久&#xff0c;我查阅了很多博客&#xff0c;终于找到解决思路&#xff0c;顺利解决&#xff0c;这里记录一下解决思路。 1、在通过this.$refs.layoutSide.style设置<a-layout-sider>的宽度时&…

Opencv-C++笔记 (14) : 霍夫变换(直线、圆)

文章目录 一、霍夫变换-直线1.1霍夫变换-直线 原理详解 二、霍夫圆检测 一、霍夫变换-直线 Hough Line Transform用来做直线检测 前提条件 – 边缘检测已经完成 1、平面空间&#xff08;x,y&#xff09;到极坐标空间转换&#xff1b; 2、对极坐标进行变换&#xff0c;转化为…

服务器时钟同步

服务器时钟同步 文章目录 服务器时钟同步背景windows时钟同步Linux机器上的时钟同步Centos时钟同步Ubuntu系统时钟同步 查看是否同步的命令 背景 运维&#xff0c;XXX服务器慢了2秒&#xff0c;导致XXX业务没有正常执行&#xff0c;请立即排查为啥会有时钟不同步的问题。 首先…

ubuntu22安装如何安装window软件(.exe)

ubuntu未提供相应程序安装包&#xff0c;如何使用的ubuntu22.04 安装window提供的exe程序呢&#xff1f; 这里我了解有两种方案&#xff1a; 使用模拟器进行window程序的运行&#xff0c;但是肯定会有相应的性能损耗如&#xff08;wine&#xff09;在linux上运行virtualbox或…

【数据分享】2013-2020年全国范围的逐日SO2栅格数据(免费获取)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们分享了来自于Zendo平台的1km分辨率的PM2.5、PM10和10km分辨率的SO2栅格数据&#xff08;均可查看之前文章获悉详情&#xff09;&#xff1a; 2000-2021年全国1km分辨率的逐日PM2.5栅格数据2000-2021年全国1k…

2023年 Java 面试八股文(20w字)

目录 第一章-Java基础篇 1、你是怎样理解OOP面向对象 难度系数&#xff1a;⭐ 2、重载与重写区别 难度系数&#xff1a;⭐ 3、接口与抽象类的区别 难度系数&#xff1a;⭐ 4、深拷贝与浅拷贝的理解 难度系数&#xff1a;⭐ 5、sleep和wait区别 难度系数&a…