通话降噪算法在手机和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

扫描上方二维码 

填写讲师申请表单

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【秋招】算法岗的八股文之机器学习

目录 机器学习特征工程常见的计算模型总览线性回归模型与逻辑回归模型线性回归模型逻辑回归模型区别 朴素贝叶斯分类器模型 (Naive Bayes)决策树模型随机森林模型支持向量机模型 (Support Vector Machine)K近邻模型神经网络模型卷积神经网络(CNN)循环神经…

uni-app、H5实现瀑布流效果封装,列可以自定义

文章目录 前言一、效果二、使用代码三、核心代码总结 前言 最近做项目需要实现uni-app、H5实现瀑布流效果封装,网上搜索有很多的例子,但是代码都是不够完整的,下面来封装一个uni-app、H5都能用的代码。在小程序中,一个个item渲染…

网络安全(秋招)如何拿到offer?(含面试题)

以下为网络安全各个方向涉及的面试题,星数越多代表问题出现的几率越大,祝各位都能找到满意的工作。 注:本套面试题,已整理成pdf文档,但内容还在持续更新中,因为无论如何都不可能覆盖所有的面试问题&#xf…

今天开始学习如何正式调查

本节要讲解三个内容 样本容量 调查方式 调查问卷的回收 在正式调查之前需要确定样本容量 就说要准备调查多少人确定好样本容量之后又要考虑设计的调查问卷 是以什么样的方式发出去 问卷的回收又要注意什么问题 要讲的主要内容 先看样本容量 样本容量确定的基本原…

redis+token+分布式锁确保接口的幂等性

目录 1.幂等性是什么? 2.如何实现幂等性呢? 1.新增管理员,出弹窗的同时,请求后台。 2.后端根据雪花算法生成唯一标识key,以雪花数为key存到redis。并返回key给前端。 3.前端保存后端传过来的key。 4.前端输入完成…

Navicat远程连接Linux的MySQL

打开Linux终端,进入root权限,用vim打开MySQL的配置文件 vim /etc/mysql/mysql.conf.d/mysqld.cnf将bind-address的值改为0.0.0.0 进入MySQL mysql -u root -p 将root用户改为允许远程登录 update user set host % where user root; 创建用户 CRE…

【C++奇遇记】函数探幽(上)

🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 数据库专栏 初阶数据结构 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如…

玩转SWAT模型——最全面SWAT模型教程【建模方法、实例应用、高级进阶】

目录 第一部分:SWAT模型实践部分 第二部分:SWAT模型【进阶部分】 更多推荐 【专家】:刘老师【副教授】,北京重点高校资深专家,和美国SWAT软件开发方长期合作,拥有丰富的科研及工程技术经验,长…

node.js安装

下载 https://nodejs.org/en 安装 D:\Program Files\nodejs 配置 D:\Program Files\nodejs 目录下新建 node_cache 和 node_global 在cmd管理员身份运行: npm config set prefix "D:\Program Files\nodejs\node_global" npm config set cache &qu…

Netty 粘包半包

什么是 TCP 粘包半包? 假设客户端分别发送了两个数据包 D1 和 D2 给服务端,由于服务端一次读取到的字节 数是不确定的,故可能存在以下 4 种情况。 (1)服务端分两次读取到了两个独立的数据包,分别…

手机变电脑2023之虚拟电脑droidvm

手机这么大的内存,装个app来模拟linux,还是没问题的。 app 装好后,手指点几下确定按钮,等几分钟就能把linux桌面环境安装好。 不需要敲指令, 不需要对手机刷机, 不需要特殊权限, 不需要找驱…

怎么快速搭建BI?奥威BI系统做出了表率

搭建BI系统有两大关键,分别是环境搭建和数仓建设。这两点不管是哪一个都相当地费时费力,那要怎么才能快速搭建BI平台,顺利实现全企业数字化运营决策?奥威BI系统方案,你值得拥有! 奥威BI系统方案&#xff0…

剑指Offer06. 从尾到头打印链表

# 06. 从尾到头打印链表 目录 # 06. 从尾到头打印链表题目代码(双指针法)代码逻辑 递归法代码设计流程 题目 官方地址 代码(双指针法) /*** Definition for singly-linked list.* public class ListNode {* int val;* L…

【计算机视觉 | Kaggle】飞机凝结轨迹识别 Baseline 分享和解读(含源代码)

文章目录 一、导读二、比赛背景三、比赛任务四、比赛数据五、评价指标六、Baseline6.1 Training part6.2 Submission part 一、导读 比赛名称:Google Research - Identify Contrails to Reduce Global Warming https://www.kaggle.com/competitions/google-researc…

【计算机网络】UDP协议

文章目录 1. UDP简介2. TCP和UDP的区别3. UDP的报文格式4. UDP的应用场景 1. UDP简介 UDP和TCP都是传输层协议,用于在计算机网络中发送和接收数据。数据可以是视频,可以是图片,可以是文字等.与TCP相比,UDP不提供数据传输的可靠性和流控制功能&#xff0…

8月16日起!亚马逊新商品上架需更新产品类型的274个属性!

亚马逊美国站发布公告称为了帮助买家更轻松地搜索产品,改善买家的购买决策提高卖家的销量,8月16日起受影响的200种产品类型的274个属性在上架前需更新属性,以下是公告内容: 自2023年8月16日起,200种产品类型的274个属…

18 | 基于DDD的微服务设计实例

为了更好地理解 DDD 的设计流程,这篇文章会用一个项目来带你了解 DDD 的战略设计和战术设计,走一遍从领域建模到微服务设计的全过程,一起掌握 DDD 的主要设计流程和关键点。 项目基本信息 项目的目标是实现在线请假和考勤管理。功能描述如下…

用于大型图像模型的 CNN 内核的最新内容

一、说明 由于OpenAI的ChatGPT的巨大成功引发了大语言模型的繁荣,许多人预见到大图像模型的下一个突破。在这个领域,可以提示视觉模型分析甚至生成图像和视频,其方式类似于我们目前提示 ChatGPT 的方式。 用于大型图像模型的最新深度学习方法…

轻松搭建酒店小程序

酒店小程序的制作并不需要编程经验,只需要按照以下步骤进行操作,就能很快地搭建自己的小程序商城。 第一步,注册登录账号进入操作后台,找到并点击【商城】中的【去管理】进入商城的后台管理页面,然后再点击【小程序商城…

vue实现文件下载

实现效果图&#xff1a;点击蓝色文字&#xff0c;下载文件 代码实现&#xff1a; <div v-for"(item, index) in form.fileList" :key"index"><i class"el-icon-upload" style"color: #c0c4cc; margin-right: 5px"></i&…