当前位置: 首页 > news >正文

AIGC音视频工具分析和未来创新机会思考

编者按:相较于前两年,2023年音视频行业的使用量增长缓慢,整个音视频行业遇到瓶颈。音视频的行业从业者面临着相互竞争、不得不“卷”的状态。我们需要进行怎样的创新,才能从这种“卷”的状态中脱离出来?LiveVideoStack 2023上海站邀请到了PPIO边缘云的创始人王闻宇,和我们分享了他针对这一问题进行的思考。本次分享包括近年音视频行业的分析、国外4款AIGC应用工具介绍、最新论文情况介绍,以及王闻宇对行业的看法和展望,以期为音视频从业者提供更具广度的行业视角。

文/王闻宇

整理/LiveVideoStack

大家好,今天有幸再次来到LVS的讲台给大家做分享。今天主要分享国外比较出名的音视频工具及理论依据,以及一些视频AIGC相关最新论文的情况,还有我对行业情况的思考。

我是王闻宇,现任PPIO边缘云联合创始人和CTO。从业音视频行业多年、之前PPTV网络电视创业团队成员,也是架构师。现在在做PPIO边缘云,是以提供算力为核心的服务,主要服务音视频传输,转码,云端渲染和AIGC等业务。下面这张图片是我用AIGC做的照片。

56109679dc7e45a40e93e7260b49c1a3.png

-01-

发生了什么

首先,2023年发生了什么事?

这张图摘自《2023中国网络视听发展研究报告》。可以明显看到,整个音视频行业的使用量已经达到了增长缓慢的极限。比起22年底,21年底用户人数只增加了一个百分点。22年产业的市场规模的增长速度也只有4.4个百分点。整个音视频行业遇到了瓶颈,开始进入一个很缓慢的时代。

这是我们音视频行业的从业者面临着“卷”的根源,大家都在相互竞争。我们怎么样创新才能从这种“卷”中出来?

ab3507c2037edeabed23515d021ada40.png

过去一年,世界发生了什么?请看下图,这是ChatGPT,它达到一个亿的用户只用了两天的时间,超过了历史上所有的APP,甚至包括Tiktok,Instagram,Snapchat,Facebook等。

d7fe63f417c85363848824e9b81a3843.png

再看下图,Stable Diffusion成为历史上增速最快的项目。和它对标的项目是比特币、以太坊、kafka、spark等知名项目。而且,Stable Diffusion基本上是垂直的线,一天时间就达到了几万关注。

这就是这次的十倍变化要素,AI的魅力。

这里回溯一下AI的发展过程:①在20世纪50年代,就有了基于规则的少量数据处理;后来80年代,基于统计学发展出了机器学习;②21世纪后,伴随显卡的性能提升,神经网络,深度学习逐步得到应用;③特别是2014-2017年,神经网络得到一系列的发展,包括CNN卷积神经网络RNN、循环神经网络、VAE、GAN生成对抗网络等,AI在很多领域有了落地的应用。④直到2017年,Transfarmer的伟大发明,带领我们进入了今天大语言模型的时代。⑤后来在2020年,Diffusion的发明,非常惊艳的生成图片效果,点燃了AIGC绘画的的浪潮。

那么视频在什么时代呢?我的看法是视频可能离走过这个鸿沟还有一定距离,这是在我分析过国外的APP后得出的想法。

3735d3a143e91c3ba733e77a23a034a1.png

接下来我给大家分享4款AIGC的应用。

-02-

音视频应用AIGC在萌芽

第一款应用是D-ID,它的核心是实现面部的动画。

2d0122d2642a827361ffce798fe9636a.png

2b554d99b2f747cbda02e7988d71008b.png

这是对他们公司做的分析,包括融资和创始人的经历。国外音视频的创业者并不都是名校毕业生。中国人只要再努力一下,是很容易超越国外的产品的。

d563e9898a4e26cf6564fa2ac21a4102.png

关于技术的实现,在他们CEO的一篇演讲中有提到如何将声音和嘴型进行对齐的内容,还提到了一种音频驱动人脸的全神经辐射的技术。

它的本质是把一个图像从2D生成3D的建模过程,但是文章中没有提到具体是怎么做的,我们根据AD-NeRF进行相关的假设。

AD-NeRF这篇资料讲述了音频驱动人脸的技术原理。AD-NeRF是一种由语音信号直接生成说话人视频的算法,仅需要目标人物几分钟的说话视频,该方法即可实现对该人物超级逼真的形象复刻和语音驱动。首先利用人脸解析方法将整个训练画面分为三部分,分别是背景、头部和躯干。其次,通过头部的前景和背景的后景去训练头部部分模型。然后,通过头部部分隐函数生产的图像和背景作为后景,再把躯干作为前景,去训练躯干部分的模型。

同时,声音部分也作为AD-NeRF模型的一个新的特征输入,通过DeepSpeech的方法,将声音转化成29维的特征数据,输入到AD-NeRF模型当中。

在生成图像的时候,通过对头部模型和躯干模型输入相同的特征,其中包括音频特征和姿态特征,来完成AD-NeRF模型的推理。在最终立体渲染图像的过程当中,首先采用头部模型积累像素的采样密度和RGB值,把渲染好的头部图像贴到静态背景上,然后躯干模型通过预测躯干区域的前景像素来填充缺失的躯干部分。通过以上的方法,AD-NeRF实现了音频驱动人脸当中头部与上身运动一致,并让产生动作与表情非常自然。

5198aaf26ca73d14332be4d2b20e9295.png

第二个分享的是Wonder Studio AI。它的两位创始人不是计算机工程师,一个是艺术家,一个是《头号玩家》的演员。它是在电影中或视频中,把一个真实的人换成另一个真实的人或数字人。

2655125950dc74c67b01a898f8dc221b.png

这个项目的融资不多,但做的东西非常惊艳。两位创始人都是电影制片人,还有一些顾问共同实现这个体系。有两篇文章提到他们项目的实现方法,一篇是他们的官方文章,另一篇是国内一位博主对他们进行的分析。

要做到视频内CG角色的实时替换,首先利用Opnepose等人体姿态估计算法对人物的3D姿态进行捕捉,并将其与建模好的CG模型进行绑定。其次,由于选定人物与CG模型在视频中所占的空间环境不同,因此需要对选定人物的轮廓进行精准识别,并经过一定的处理让选定人物仿佛在原视频中没有出现过一般,这里需要采用人物擦除算法。

f08afb1f5af50124bf1f92d7ddf5dabe.png

目前,由清华团队提出的Inpaint Anything能够轻松实现这一需求。该算法基于Meta开源语义分割算法Segment Anything Model(SAM)对目标人物轮廓进行精准识别,生成Mask,再利用图像生成算法LaMa或stable Diffusion能够实现对Mask的图像内容进行自定义填充。

d76a223633262cb691335454a54435ae.png

但Wonder Studio官方没有提到他们的方案具体是怎么实现的,以上是我就这个技术本身做的想法。

c5d7943a764c86ec72a24043037ff48b.png

第三个工具是AIGC的官方应用,叫做Runway,它的定位是新一代的艺术,也是一个2c的产品。它提供了一个平台,可以对视频进行风格编辑,还有一系列的工具。它分为两代:Gen1和Gen2。Gen1只能视频转化成视频,视频加上文字最后转化为视频。

6cd1cf5f1af6bda3b7c397145efe84bb.png

这家公司的融资背景非常深厚,在过去几年紧跟AIGC的浪潮及爆发性场景的应用。值得注意的是,它的三位创始人员都是艺术家。而我们国内创业或公司创新的人都是工程师或者学术方面的人员。这家公司都是艺术家创业,可见他们更注重做出来的东西的感受。这也体现了东西方文化上的差异。

ef6d51f4d0b757f41c0f7bb4a05afdac.png

已有的研究中表明CLIP的图像embedding对图像内容在图像中的位置和形态不敏感,而更关注内容本身,因此它是与深度这一结构信息较为“正交”的,使得Gen-1可以将图像解耦为彼此干扰较小的结构信息和内容信息。

Gen-1和Stable Diffusion路径很像,把中间的竖线去掉,基本上就是Stable Diffusion的架构。它把一个原始的视频形成画面,图像的深度图作为结构信息、CLIP编码器的图像embedding作为内容信息,在隐空间进行扩散模型的训练。生成的时候也是把输入的文本通过CLIP方式转化回去,最后再进行干预,就能呈现视频的结果。不同的是,它还运用了图片的模式转化,即MiDaS,把图片生成一个框架,再干预这个环节。大概的技术原理是用文本干预视频的过程,从而得出最后的效果。

https://arxiv.org/abs/2302.03011这篇论文是他们的官方论文。这个应用思路其实比较简单,如果大家要做也不会很困难。

7aeaa2ef8ea8bbbedbe4e6cac6cce8f4.png

第四个工具是Rewind。这个工具特别厉害,很遗憾的是它只能在苹果电脑上使用。它把大家日常工作的内容全部录下来,整理后再通过GTP进行对接。这个工具严格来说不是完整的视频应用,但它是个类视频应用,我是它的重度用户。可以通过回拉里面的进度条得知自己今天做的任何事,里面的文本也是可以摘出来的。

dcb684d825d4c3bd95b7a14ac404e865.png

这个公司很有意思,Altman投了2轮,种子轮和天使轮,另外还拿到了很多知名的投资。

c86237fe0af1fa98dfe8d8cb3ca5063a.png

这个工具很有创意,它和音视频技术关系不大。核心点是调用了苹果的M1和M2芯片的接口,对显示的内容做OCR,再把OCR后的内容用文本方式存起来,

另外,官方宣称它用了H.264技术进行压缩,来同时把视频录制了下来。(但是这里我是持怀疑的,能把视频大小压缩到70倍,但我觉得H.264的技术还有些挑战)

最后,再把OCR的文本通过向量工程的方式和Chatgpt对接,从而具备了智能能力。当你问它(Rewind)你做了什么,它通过向量工程向Chatgpt调API来完成这一过程,所以它基本可以帮你总结出你每天都做了什么,你之前遇到了什么问题。它能够对你的日常工作进行归类,这是我用这个工具的原因。

其实AIGC视频工具还有很多,我这里讲的4个是比较典型的使用场景。

-03-

视频生成研究最新趋势

另外谈谈我对视频生成技术的学习和研究。

f3a7e8ece13cc2d29ae6eb024a721014.png

生成的本质是什么?我认为生成的本质是高维空间建立映射,不论是文字、图片,还是视频、音频,最终都会转化为数学问题,并在高维空间中建立起映射。而人脑正是因为能够建立起这种高维的映射,才能形成一定的智能。

6d7f62c2aa83abcb02b9cac8e507881d.png

前面也提到的,CLIP是非常关键的技术,是StableDiffusion的子模型,打通了文本和图像的映射关系。CLIP的原理是对文本和图片分别通过Text Encoder和Image Encoder输出对应的特征,然后在这些输出的文字特征和图片特征上进行对比学习,再将它进行映射。

为了训练CLIP,OpenAI从互联网收集了共4个亿的文本-图像对,论文称之为WIT(Web Image Text)。WIT质量很高,而且清理得非常好,其规模相当于JFT-300M,这也是CLIP如此强大的原因之一。

7274f833ecc2d1e0223479a42097ae85.png

这是谷歌的一篇论文,讲的是视频的Diffusion Model,它可以理解为是StabDiffusion的变种,它在StableDiffusion的每个过程中都引入了一个时间维度t,以实现时间注意力机制,使得它生成的画面之间有一定的联系。

为了使扩散模型适用于视频生成任务,这篇论文提出了3D UNet,该架构使用到了space-only 3D卷积和时空分离注意力。具体来说,该架构将原UNet中的2D卷积替换成了space-only 3D卷积(space-only 3D convolution)。随后的空间注意块仍然保留,但只针对空间维度进行注意力操作,也就是把时间维度flatten为batch维度。在每个空间注意块之后,新插入一个时间注意块(temporal attention block),该时间注意块在第一个维度即时间维度上执行注意力,并将空间维度flatten为batch维度。论文在每个时间注意力块中使用相对位置嵌入(relative position embeddings),以便让网络能够不依赖具体的视频帧时间也能够区分视频帧的顺序。这种先进行空间注意力,再进行时间注意力的方式,就是时空分离注意力。

这种时空分离注意力的UNet可以应用在可变序列长度上,这种时空分离注意力的方式有一个好处是可以对视频和图片生成进行联合建模训练。就是说可以在每个视频的最后一帧后面添加随机的多张图片,然后通过掩码的方式来将视频以及各图片进行隔离,从而让视频和图片生成能够联合训练起来。

ba78e160f3a8b2077213e06311b369c8.gif

但是这个机制其实比较弱,只能生成一些非常简单的画面。

近期有两篇论文值得一提,一个是Diffusion over Diffusion,这篇论文的定位是关于生成长视频的思考。Diffusion over Diffusion主要解决的问题是长视频之间前后关联的问题。之前的视频基本都是自回归的架构,生成得比较慢,因为它是串行的。

1ad446e173d06733439db6a9e410b1ba.png

它的特点是什么?它为什么要Diffusion over Diffusion?因为它是一种分层结构的扩散模型,通过一层层扩散生成视频。

Diffusion over Diffusion的视频生成过程是一个“从粗到细”的视频生成过程,先通过在全局扩散模型(Global Diffusion)中输入文字来生成整个时间范围内的关键帧,然后在局部扩散模型(Local Diffusion)中输入文字和上一层Diffusion生成的两张图片,递归地生成填充附近帧之间的内容,最终生成长视频。

这种分层结构的设计使模型能够直接在长视频上进行训练,不仅消除了视频生成领域中训练短视频与推理长视频之间差距,也确保了视频情节的连续性,同时也能极大的提升了生成效率。

通过官网的演示资料可以看到,它下面写的是一个prompt演讲,根据prompt生成一个稍微长一点的视频内容。在prompt换了之后,它又能生成一个稍微更长点的、更多样化的(内容)。这就是它的演示结果。

aed43c4085ff4c489a1029a90fa4bbf2.png

下面这篇论文的名字叫Any-to-Any,这是一篇综合图像、语音、视频和文本的多模态论文。其中Any to any的含义是,你能将上述模态数据进行任意组合的输入,得到任意组合的输出。例如输入的时候可以根据图片、文本、声音,最后生成一个带语音的视频。

40e47ab20a444660c22e97a53112d099.png

这篇论文提出了模型可组合扩散(Composable Diffusion,CoDi),这是第一个能够同时处理和生成任意组合模态的模型。它具体是怎么做的?

首先这篇论文为了对齐不同模态之间的特征,设计了Bridging Alignment(特征桥接对齐)方式,采用CLIP为基准,冻结CLIP文本编码器权重,再使用对比学习在文本-音频、文本-视频数据集上进行训练,使得音频、视频编码器提取的特征能对齐CLIP预训练模型中文本编码器提取的文本特征。

第二步,为每种模态(例如文本、图像、视频和音频)训练一个潜变扩散模型(Latent Diffusion Model,LDM)。这些模型可以独立并行训练,利用广泛可用的特定模态训练数据(即具有一个或多个模态作为输入和一个模态作为输出的数据)确保出色的单模态生成质量。

最后,通过为每个扩散器添加交叉注意力模块和一个环境编码器V来实现的,将不同LDM的潜变量投影到共享的潜空间。之后再固定LDM的参数,只训练交叉注意力参数和V。由于不同模态的环境编码器是对齐的,LDM可以通过插值表示的V与任何组合的共同生成模态进行交叉注意力。这使得CoDi能够无缝地生成任何模态组合,而无需对所有可能的生成组合进行训练。

b0bd79fe7ca588dd5e59995961ce402c.gif

官网的演示很震撼。例如这三个是带有声音的视频。

9a409a63e2f390250eb5508968be2308.gif

这三个分别是文本、图片、下雨的声音。这三个结合起来,就生成了一个泰迪熊在雨中过街的画面。网上有一些评论,说这篇论文真正运用的时候差距很大,因为多模态需要大量的数据支持才可能做好。它还是学术级,离跨越鸿沟还有很远的距离。

-04-

未来音视频创新机会在哪

我接下来的思考是,未来音视频AIGC成熟且能大规模应用在什么时候?

b873ce8f8f09cd9eea66b4b05655c8c0.png

这个图摘自红杉的报告。红色部分属于很不成熟的,黄色部分属于正在发展的,绿色部分就是成熟的。在这个预测里可以看到,文本和code在2023年能够做到很成熟,但是图片可能要到25年才能做到非常可控、可产品化,3D和视频预测要到2030年才能成熟。

不管是应用还是论文,基本上都是基于Diffusion的改良,甚至很多模型都是基于Diffusion模型的一种扩散,今天的很多更高级的视频、3D的生成框架,也离不开扩散。如果某天视频真的要参与化的时候,是不是需要有一种更原生的底层逻辑的突破、比扩散还高一个维度的突破才能做到?但是今天我们基于已有的技术,加上一些工程化的努力,我相信应该可以做很多东西了。

关于音视频的应用,如果和行业数据相关,我认为用好开源,加上一些工程上的产品级创新,再结合大模型,把向量工程、提示工程做好,基本就能解决大量的需求了。

-05-

关于PPIO边缘云

最后介绍一下我们的PPIO边缘云。PPIO 于 2018年由 PPTV 创始人姚欣和我联合创立,作为中国领先的独立边缘云服务提供商,PPIO在全国30多个省,超过1000多个县市及区域,为客户提供符合低时延、高带宽、海量数据分布处理需求的边缘云计算服务和解决方案。

ad234113e0f5f6c89e6906268ade285f.png

PPIO的核心是以算力为本。这个图是运营商的骨干图,能够帮助理解边缘带宽。图中拿移动来举例,我们覆盖的范围并不是很大很多,而是相对分散的一些节点,但是这种节点的SOA也是可保证的。

6bea895ca6b63f4f79972ea0d1c48ffd.png

从城域网的角度看,备用节点覆盖在BRAS这一层,甚至会放置在MEC。

把算力资源放下后,就能做一些边缘的推理服务。我们可以提供基于裸金属和GPU容器的的服务,同时也能提供上面调度的逻辑。另外我们还可以支持推理加速的框架,例如Oneflow、AITemplate、TensorRT等。

8b0ddd676630ffa9dcec981e5b718118.png

基于 PPIO 在边缘算力上的优势,我们构建了专门适用于 AI 推理场景的架构。它主要包含三个层面的服务:裸金属,容器,推理网关。

• 裸金属服务,主要适用于大模型的场景,例如:一个大语言模型的推理服务需要占用 4~10 张显卡,甚至要多机联合推理的情形。客户可以直接通过 IaaS 控制台或 OpenAPI 来申请、启动、停止和释放裸金属机。

• 容器服务,主要适用于可以灵活调度的场景,一般这类模型相对较小,一个推理服务实例只需要 1 张左右显卡,例如 StableDiffusion 的推理。容器服务实例由 PPIO k8s@Edge 系统管理,该系统保持与原生 k8s 兼容,可以满足客户按需弹性调度的需求。

• 推理网关服务,是上层用户请求层的智能调度服务,它可以根据后端推理实例的负载情况,动态地将用户的请求调度到最合适的实例上,并且它支持客户设置个性化的调度策略。另外当部分节点或实例故障时,该网关也可以智能地将其剔除,避免用户请求打到该实例上,对于已经调度到这些实例上的请求,网关将自动将这些请求重新转发到其他健康实例上去处理,整个过程对于请求方完全无感。

此外,在服务客户的过程中,我们发现有些时候显卡在接受较大的用户请求时,偶尔会出现显存不足的情况。比如 在 3090 24G 上,刚好有一个模型要跑 30G 多一些怎么办?这时候很容易想到,将一部分内存来“充当”那显存使用,临时性地将显存的内容搬运到内存里,当这些显存的内容需要被访问时再搬回去,这样可以让上层的应用勉强能跑起来。为此我们基于 Nvidia 的 Unifed Memory 和 Cuda 劫持技术,构建了用户态的虚拟 GPU,实现了这一功能。该项技术使得推理服务在处理用户的较大请求过程中,显存的问题得到了极大的缓解。但是该技术也会使得显存和内存之间的 swap 操作变多,从而影响性能,因此在对性能有较高要求的场景,不建议设置太大的虚拟显存。

15a99eb174a54ac07247ead738120d50.png

我们也有基于 Stable Diffusion WebUI 的一些应用,采用界面和算力分离的架构,不用 GPU,不用安装 WebUI,入门门槛低,也容易整合到用户自有的工作流中。用户也不用下载和维护模型,一方面我们已经集成了很多模型了,另一方面用户还可以添加自己的模型。

b92e6875e02ab6d9cc92ebdba76057e0.png

我们还提供了基于 Stable Diffusion 的 AI 图片生成和图片编辑的 API 平台,基本上从工程阶段已经做到了快、便宜,同样也能够支持各种模型,也能实现 文生图,图生图,ControlNet,Upscaling,Inpainting,Outpainting,抠图,和擦除等系列功能,可以满足游戏素材生成,电商图片的修改等场景。

7ce5f76ad7f5835b4fd933a2e5030fbe.png

另外,我们也针对一些场景实现了主体固定的解决方案,就是能生成一系列图片,但保持主体不变、背景变换,特别适合当前流行的儿童插画,小说配图生成等场景。

最后,我最近经常也在思考,我们人类为什么有智能。再看看 AI 的高速发展,距离我们人类越来越近了,现在AI的原理越来越和我们的大脑近似,也是类似的矩阵、向量的计算,所以我顿时感觉人类的智慧没有想象中那么伟大。

或者再过十年,计算机超越人类是完全有可能的。而我们作为音视频行业从业者,需要积极拥抱新的技术创造更大的价值。


3db1a1fbfe90a950ef95d42944d323dd.jpeg

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

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

c7c240c1739a0a26f4e4a037a43edfc9.jpeg

扫描上方二维码 

填写讲师申请表单

相关文章:

AIGC音视频工具分析和未来创新机会思考

编者按:相较于前两年,2023年音视频行业的使用量增长缓慢,整个音视频行业遇到瓶颈。音视频的行业从业者面临着相互竞争、不得不“卷”的状态。我们需要进行怎样的创新,才能从这种“卷”的状态中脱离出来?LiveVideoStack…...

Mybatis——返回值(resultType&resultMap)详解

之前的文章里面有对resultType和resultMap的简单介绍这一期出点详细的 resultType&#xff1a; 1&#xff0c;返回值为简单类型。 直接使用resultType“类型”&#xff0c;如string&#xff0c;Integer等。 String getEmpNameById(Integer id); <!-- 指定 result…...

多IP服务器有什么作用

1.利于搜索引擎收录&#xff1a; 使用多IP应用云服务器可使一个IP对应一个网站&#xff0c;使各个网站之间的独立性更强&#xff0c;这样搜索引擎会评定该网站质量更高&#xff0c; 更容易抓取到该网站的页面&#xff0c;便于搜索引擎收录。 2.提高网站的权重和排名&#xff…...

Python-主线程控制子线程结束

需求&#xff1a;主线程创建子线程和键盘输入监听线程&#xff0c;然后等待它们退出。当用户输入 q 后&#xff0c; 子线程会收到停止信号并退出&#xff0c;键盘输入监听线程也会退出&#xff0c;最终主线程退出。 import threading import time import keyboardclass Worker…...

水电站防雷工程综合解决方案

水电站防雷工程是指为了保护水电站的建筑物、设备和人员免受雷电危害而采取的一系列技术措施。水电站防雷工程的主要内容包括接地装置、引下线、接闪器、等电位连接、屏蔽、综合布线和电涌保护器等分项工程。水电站防雷工程的施工和质量验收应遵循国家标准《建筑物防雷工程施工…...

每日刷题(翻转+二分+BFS)

食用指南&#xff1a;本文为作者刷题中认为有必要记录的题目 ♈️今日夜电波&#xff1a;凄美地—郭顶 1:10 ━━━━━━️&#x1f49f;──────── 4:10 &#x1f504; ◀️ ⏸ ▶️ ☰…...

系统卡死问题分析

CPU模式 CPU Frequency Scaling (CPUFREQ) Introduction CPU频率调节设备驱动程序的功能。该驱动程序允许在运行过程中更改CPU的时钟频率。一旦CPU频率被更改,必要的电源供应电压也会根据设备树脚本(DTS)中定义的电压值进行变化。通过降低时钟速度,这种方法可以减少功耗…...

中大许少辉博士中国建筑出版传媒八一新书《乡村振兴战略下传统村落文化旅游设计》百度百科新闻

中大许少辉博士中国建筑出版传媒八一新书《乡村振兴战略下传统村落文化旅游设计》百度百科新闻&#xff1a; 乡村振兴战略下传统村落文化旅游设计 - 百度百科 https://baike.baidu.com/item/乡村振兴战略下传统村落文化旅游设计/62588677 概览 《乡村振兴战略下传统村落文化旅游…...

int和Integer的不同

一个奇怪的事情&#xff0c;在int[]用 Arrays.asList 转List 的时候&#xff0c;转过去的是List<int[]>。而不是List<int>类型的。于是试了String和Integer类型。发现只有Int[]有问题。 package com.test.lc;import java.util.ArrayList; import java.util.Arrays…...

eslintignore无效解决办法

项目的根目录下新建.eslintignore&#xff0c;但是无论怎么配置&#xff0c;该文件总是无法生效。本想解决不生效的问题&#xff0c;但是一直无法解决&#xff0c;于是换了一种解决问题的思路。 方法一&#xff1a; 在需要进行忽略的文件顶部加上 /* eslint-disable */这样e…...

C# 学习笔记

此笔记极水~ &#xff0c;来自两年前的库存。 是来自 B站 刘铁猛大佬 的视频&#xff0c;因为 好奇学了学。 其他 c# 变量的 内联赋值 vs. 构造函数内赋值 (引用自&#xff1a;https://www.iteye.com/blog/roomfourteen224-2208838) 上下文&#xff1a;c#中变量的内联赋值其…...

算法练习(8):牛客在线编程08 字符串

package jz.bm;import java.util.Arrays;public class bm8 {/*** BM83 字符串变形*/public String trans(String s, int n) {StringBuilder res new StringBuilder();//大小写转换for (int i 0; i < n; i) {if (s.charAt(i) > a && s.charAt(i) < z) {res.a…...

深入理解分布式架构,构建高效可靠系统的关键

深入探讨分布式架构的核心概念、优势、挑战以及构建过程中的关键考虑因素。 引言什么是分布式架构&#xff1f;分布式架构的重要性 分布式系统的核心概念节点和通信数据分区与复制一致性与一致性模型负载均衡与容错性 常见的分布式架构模式客户端-服务器架构微服务架构事件驱动…...

为什么选择elasticsearch分布式搜索引擎

文章目录 &#x1f52d;什么是elasticsearch&#x1f320;ELK技术栈&#x1f320;elasticsearch和lucene&#x1f320;为什么不是其他搜索技术&#xff1f; &#x1f52d;总结 &#x1f52d;什么是elasticsearch elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常…...

一百五十九、Kettle——Kettle9.2通过配置Hadoop clusters连接Hadoop3.1.3(踩坑亲测、附流程截图)

一、目的 由于kettle的任务需要用到Hadoop&#xff08;HDFS&#xff09;&#xff0c;所以就要连接Hadoop服务。 之前使用的是kettle9.3&#xff0c;由于在kettle新官网以及博客百度等渠道实在找不到shims的驱动包&#xff0c;无奈换成了kettle9.2&#xff0c;kettle9.2的安装…...

渗透测试之逻辑漏洞

文章目录 一、支付漏洞1.修改附属值2.多重替换支付3.重复支付4.最小额支付5.最大值支付6.越权支付7.无限制试用8.多线程并发9.支付漏洞思路 二、密码找回漏洞1.本地验证绕过2.利用session重新绑定客户3.去掉验证参数绕过4.总结 三、短信验证码绕过1.短信验证码生命期限内可暴力…...

HTML class 中 CSS名称的顺序并不重要

的确是这样&#xff01;我可以证明。让我们先来看一些CSS代码: .a {color: red; }.b {color: blue; }现在让我们看一些标记: <div class"a b">Here’s some text</div>文本会是蓝色的&#xff0c;因为.b 在CSS中是最后定义的&#xff0c;对吧&#xff…...

设计模式8:代理模式-静态代理

我尝试在JDK、Android SDK和一些出名的库中&#xff0c;寻找静态代理的源码&#xff0c;没能找到。如果有读者发现&#xff0c;欢迎评论或者私信我。 本文目录 静态代理的实例1. 售票代理2. 明星代理 静态代理的实例 1. 售票代理 售票服务 public interface TicketService {…...

运动耳机哪款好用、适合运动的耳机推荐

如今&#xff0c;蓝牙耳机不仅是手机的最佳伴侣&#xff0c;也成为了运动爱好者的必备装备。但是&#xff0c;在如此众多的蓝牙耳机中&#xff0c;你是否对选购感到困惑呢&#xff1f;实际上&#xff0c;选择适合运动的蓝牙耳机需要考虑许多因素&#xff0c;如舒适度、稳固性、…...

页面滑动到可视区域加载更多内容思维流程

页面滑动到可视区域加载更多内容思维流程...

Java Word转PDF(直接转和以图片形式转)、PDF转图片、图片转PDF

在淘宝上找了一家写代码的店铺写了一个工具类&#xff0c;再参考网上的代码&#xff0c;改了改 用到的类库&#xff1a; <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/fontbox --><!--word转pdf--><dependency><groupId>com.documents4…...

dockerfile编写LNMP

目录 1. 项目环境 2. 服务器环境 二、部署nginx&#xff08;容器IP为192.168.158.26&#xff09; 1、整个Dockerfile文件内容 ​编辑 2、配置nginx.conf文件 3、构建镜像 三、部署mysql 1、整个Docker文件内容 3、生成镜像 4、启动镜像容器 5、验证mysql 四、PHP部署 1…...

websocket + stomp + sockjs学习

文章目录 学习链接后台代码引入依赖application.ymlWebSocketConfigPrivateControllerWebSocketService WebSocketEventListenerCorsFilter 前端代码Room.vue 学习链接 WebSocket入门教程示例代码&#xff0c;代码地址已fork至本地gitee&#xff0c;原github代码地址&#xff…...

ApplicationListener , @EventListener 和 CommandLineRunner 启动顺序验证

一. 背景 排查线上问题, 发现一个重要功能的全局锁线程启动延迟很高. 服务启动40分钟之后, 才能拿到锁. 排查之后发现原因是因为代码引入了高优先级的ApplicationListener代码, 导致全局锁线程启动延迟. 二. 结论 启动顺序从高到底依次为: ApplicationListener , EventListe…...

网络编程基础(1)

目录 网络编程解决是跨主机的进程间通讯 1、网络 2、互联网 3、ip地址 &#xff08;1&#xff09;ipv4: &#xff08;2&#xff09;ipV6:1 &#xff08;3&#xff09;IP地址的组成&#xff1a; (4)Linux查看IP地址&#xff1a;ifconfig 4、mac地址 5、ping Ip地址 6…...

Linux驱动开发(Day4)

思维导图&#xff1a; 字符设备驱动分步注册&#xff1a;...

LVS负载均衡群集部署(LVS-NAT模型实例)

一、集群 1.1集群的含义 Cluster&#xff0c;集群、群集,为解决某个特定问题将多台计算机组合起来形成的单个系统。 由多台主机构成&#xff0c;但对外只表现为一个整体。 1.2群集的三种类型 1.2.1负载均衡群集 LB&#xff1a; Load Balancing&#xff0c;负载均衡&#x…...

【仿写tomcat】五、响应静态资源(访问html页面)、路由支持以及多线程改进

访问html页面 如果我们想访问html页面其实就是将本地的html文件以流的方式响应给前端即可&#xff0c;下面我们对HttpResponseServlet这个类做一些改造 package com.tomcatServer.domain;import com.tomcatServer.utils.ScanUtil;import java.io.IOException; import java.io…...

stm32单片机/51单片机蜂鸣器不响(proteus模拟)

蜂鸣器不发生原因就1个&#xff1a;电压不够 所以需要提高蜂鸣器2端的电压&#xff1a;可以采用的方法有&#xff1a; 1提高蜂鸣器电阻&#xff0c;这样根据分压原理&#xff0c;可以提升蜂鸣器2段电压 2更改蜂鸣器的工作电压为更小的值&#xff0c;这个可以通过在proteus内…...

BERT、ERNIE、Grover、XLNet、GPT、MASS、UniLM、ELECTRA、RoBERTa、T5、C4

BERT、ERNIE、Grover、XLNet、GPT、MASS、UniLM、ELECTRA、RoBERTa、T5、C4 ELMOBERTERNIE![在这里插入图片描述](https://img-blog.csdnimg.cn/274e31d0f8274c748d05abe2ec65fc73.png)GroverXLNetGPTMASSUniLMELECTRARoBERTaT5C4ELMO BERT...

手机网站建站用哪个软件好/制作一个网站步骤

众所周知&#xff0c;redis是单线程的。 多个客户端发来的所有指令会按接受到的顺序一个个的执行。 那么multi&#xff0c;exec的作用是什么呢&#xff1f;和pipeline区别在哪&#xff1f; 如果只是简单的认为&#xff0c;multi可以在客户端打包要执行的命令批量的提交到服务端…...

做网站后台服务器什么最好/佛山网站建设

本文使用的是alibaba的Dubbo。Dubbo整合Springboot可以分为四步&#xff1a;第一步&#xff1a;首先需要了解Dubbo官方给的建议&#xff0c;至少有三个工程&#xff1a;接口工程&#xff1a;主要存实体bean和业务接口服务提供者&#xff1a;业务接口的实现类和调用数据持久层&a…...

彩库宝典官方app版下载/关键词优化公司排行

1查询工资比scott高的员工信息 A 第一步&#xff1a;查询出scott这个员工的工资 select sal from emp where ename SCOTT; B 第二步&#xff1a;查询出工资比scott高的员工信息 select * fromemp where sal >3000; 总结&#xff1a; 子查询的本质&#xff1a;多…...

生态农业网站建设方案/网站建设制作教程

一&#xff0c;数据库初识 Q1&#xff1a;为什么要用数据库 将文件和程序存在一台机器上上很不合理的 操作文件是一件很麻烦的事 Q2:数据库的优势 程序稳定性&#xff1a;这样任意一台服务所在的机器崩溃了都不会影响数据和另外的服务 数据一致性&#xff1a;所有的数据都存储在…...

网站建设客服术语/无锡营销型网站建设

公众号关注 「运维之美」设为「星标」&#xff0c;每天带你玩转 Linux &#xff01;需求&#xff1a;某业务 MySQL 迁移&#xff0c;但是迁移前需要做如下准备工作。统计各个业务表的 DML 操作情况。统计各个业务表的最后访问时间。条件&#xff1a;60 min 一个 1GB 的 Binlog。…...

甘肃住房和城乡建设局网站/百度百科推广费用

原地址&#xff1a;http://blog.csdn.net/u012085988/article/details/17531005 资源下载&#xff1a;http://download.csdn.net/detail/u012085988/6770625 &#xff08;最近csdn貌似出了问题&#xff0c;超链接不能用了&#xff0c;博客写好发布后发现被截短了&#xff0c;这…...