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

语音合成之四基于LLM的语音合成

基于LLM的语音合成

  • 1.技术架构
    • 1.1 LlaSA
    • 1.2 CosyVoice (和 CosyVoice2)
    • 1.3 SparkTTS
  • 2 特性对比
    • 2.1 零样本语音克隆
    • 2.2 多语种支持
    • 2.3 可控语音生成
    • 2.4 计算效率和模型大小
  • 总结

当前,在大型语言模型(Large Language Models,LLMs)的驱动下,TTS模型在语音自然度、表现力以及多功能性方面都实现了质的飞跃 。这些模型通过利用大规模语言理解和生成能力,在零样本语音克隆和多语种支持等领域取得了显著的进展 。

LLM作为这些TTS系统的核心组件或基础架构被反复提及,标志着TTS领域从传统的声学建模方法向利用LLM的语义理解和生成能力的重大转变。这种范式转变直接促成了零样本语音克隆和多语种支持等功能的进步 。

LlaSA、CosyVoice 和 SparkTTS 作为近期涌现的优秀TTS模型,均展现了基于LLM的强大能力。

1.技术架构

1.1 LlaSA

LlaSA 模型建立在强大的 Llama 架构之上,为了使 Llama 模型能够处理音频数据,LlaSA 采用了 XCodec2 作为语音标记器(Tokenizer)。XCodec2 的作用是将原始音频波形转换为离散的语音标记(Token) 。这种转换使得 Llama 模型能够像处理文本一样直接生成语音。LlaSA 的核心是一个单一的 Transformer 架构,该架构以自回归的方式进行训练,即通过预测序列中的下一个标记来生成语音 。这种单一架构的设计简化了传统的 TTS 流程,传统TTS通常包含独立的声学模型、韵律预测器和声码器等多个组件(如上一篇博客)。

LlaSA 模型提供不同参数规模的版本,包括 10 亿参数、30 亿参数以及即将推出的 80 亿参数版本 。这表明 LlaSA 在模型容量和性能方面具有可扩展性,用户可以根据计算资源和所需的合成质量进行选择。LlaSA 支持 16kHz 的音频输出 。

LlaSA 基于 Llama LLM 构建,并利用特定的语音标记器,其设计重点在于利用语言模型的强大能力进行语音合成。不同的模型尺寸也体现了在性能和计算资源之间进行权衡的考虑。通过构建在 Llama 架构之上,LlaSA 继承了其强大的语言理解和生成能力。

XCodec2 的集成弥合了连续音频信号和离散标记 LLM 之间的差距,使得模型能够直接生成语音标记。这种单阶段自回归方法与更复杂的TTS多阶段系统不同,带来更精简和高效的过程。多种模型尺寸的可用性使得用户能够选择适合其特定计算约束和性能要求的模型。

1.2 CosyVoice (和 CosyVoice2)

在这里插入图片描述

CosyVoice 采用从多语种语音识别模型中提取的监督语义标记 。与无监督标记方法相比,这种方法旨在捕获显式的语义信息,并改善与相应文本的对齐,从而可能提高内容一致性。

CosyVoice 的架构结合了一个用于文本到标记生成的 LLM 和一个用于标记到语音合成的条件流匹配模型 。这种两阶段方法将生成语义表示的任务与合成实际语音波形的任务分开,允许在每个阶段进行专门的建模。CosyVoice2 引入了针对流式语音合成的优化,包括用于改进语音标记码本利用的有限标量量化(Finite-Scalar Quantization,FSQ)和精简的文本-语音 LM 架构 。这些优化对于降低延迟和实现实时应用至关重要。

CosyVoice2 允许直接使用预训练的 LLM 作为骨干,无需单独的文本编码器和说话人嵌入,这可以通过直接利用强大的 LLM 的能力来增强上下文理解和跨语言性能 。CosyVoice2 采用分块感知的因果流匹配模型,以支持单个模型中的流式和非流式合成,实现超低延迟(首包延迟低至 150 毫秒),这对于语音聊天等交互式应用至关重要 。该模型支持多种推理模式,包括零样本、跨语言和指令式推理,为不同的语音合成任务提供了灵活性,并允许用户使用自然语言指令来指导模型 。

CosyVoice 使用监督语义标记,其侧重于改进文本和语音之间的对齐,从而可能带来更好的内容一致性和说话人相似性。CosyVoice2 对流式传输和直接 LLM 集成的强调突显了其对实时应用的适用性以及对 LLM 最新进展的利用。选择监督语义标记意味着该模型受益于显式的语言信息以及与文本的对齐,因为这些标记是从语音识别模型导出的。

两阶段架构允许LLM专门建模语义内容,而流匹配模型则专门建模声学特征。CosyVoice2 的进步,特别是对流式传输的关注以及简化架构以直接使用预训练 LLM,表明其正朝着更高效、更快速的语音合成方向发展,这对于交互式应用至关重要。

1.3 SparkTTS

在这里插入图片描述

SparkTTS 由 BiCodec 提供支持,这是一种新颖的单流语音编解码器,可将语音分解为用于语言内容的低比特率语义标记和用于说话人属性的固定长度全局标记。这种解耦表示是其核心创新,允许独立控制语言内容和说话人身份。

BiCodec作为SparkTTS的核心组件,是一种新颖的单流语音编解码器 。它的主要作用是将语音分解为两种互补的令牌类型:低比特率的语义令牌(semantic tokens)用于捕获语言内容,以及固定长度的全局令牌(global tokens)用于表示说话人属性 。这种解耦的表示方式使得对语言内容和说话人身份的控制可以相互独立进行 。具体来说,全局令牌编码器利用梅尔频谱图(Mel spectrograms)来生成全局令牌,这些令牌封装了说话人的身份特征 。而语义令牌编码器则借鉴了wav2vec 2.0模型的技术来提取语义令牌,确保在紧凑表示语言的同时不丢失上下文信息 。为了提高模型的鲁棒性并最小化训练崩溃的风险,BiCodec采用了量化技术,对语义令牌使用向量量化(VQ),对全局令牌使用有限标量量化(FSQ) 。

Qwen2.50.5B作为SparkTTS的基石 ,它不仅提供了强大的语言建模能力,还直接预测BiCodec的令牌序列(包括语义令牌和全局令牌),这些令牌随后被BiCodec的解码器用于重建音频 。这消除了对诸如流匹配等额外生成模型的依赖,此外还结合了Qwen2.5和思维链(Chain-of-Thought,CoT)生成方法,可以实现粗粒度(例如,性别、说话风格)和细粒度(例如,精确的音高值、语速)的控制。这种架构的简化是SparkTTS的关键创新之一,它通过直接利用LLM的输出来进行音频重建,无需单独的声学特征生成模型,潜在地提高了效率并降低了复杂性。

SparkTTS的训练依赖于一个名为VoxBox的大规模数据集 。VoxBox是一个经过精心策划的包含10万小时语音的数据集,并且带有全面的属性标注 。该数据集的创建旨在促进可控TTS的研究 。开发者计划在Hugging Face Datasets hub上公开发布该数据集 ,其总大小约为6TB 。如此庞大的数据集规模表明在数据收集和标注方面进行了大量的投入,这对于训练高质量且可控的TTS模型至关重要。全面的属性标注则表明其侧重于实现对语音各个方面的细粒度控制。

在训练方法方面,BiCodec采用了端到端的方式,并使用生成对抗网络(GAN)方法 。训练目标包括最小化重建损失和L1特征匹配损失(通过判别器),同时优化VQ码本 。频率域重建损失通过对多尺度梅尔频谱图使用L1损失来计算 。多周期和多频带多尺度短时傅里叶变换(STFT)判别器分别用于波形判别和频率域判别 。VQ码本学习结合了码本损失和承诺损失,并使用直通估计器(straight-through estimator)进行反向传播 。训练代码之前说计划发布,目前看起来概率较低 。使用基于GAN的训练方法,结合多个判别器和特定的损失函数,表明SparkTTS采用了复杂的训练策略,旨在实现高质量的音频合成。对重建损失和特征匹配的关注表明,其目标是捕捉语音的内容和风格细微之处。

表一:技术架构对比

特征LlaSACosyVoice (CosyVoice2)SparkTTS
基础 LLM(如果适用)LlamaLLM (Qwen2.5)Qwen2.5
语音标记器XCodec2监督语义标记BiCodec
模型架构单一 Transformer (自回归)LLM (文本到标记) + 条件流匹配 (标记到语音)单一 LLM (解码器)
关键架构特征基于 Llama,单一阶段,多种参数规模两阶段,监督语义标记,CosyVoice2 优化流式单流,解耦标记,思维链生成

2 特性对比

2.1 零样本语音克隆

LlaSA 仅需几秒钟的音频即可实现零样本语音克隆 。github上的一些issue表明,其输出可能存在噪声或在音色上与原始声音不太一致 ,这表明在捕获个人声音的细微差别方面仍有改进空间,其质量在不同用户或场景中可能并不一致,拿来即用的概率不高,多半需要retrain或者fine-tune后使用。

CosyVoice 支持零样本语音克隆,并展现出高韵律自然度、内容一致性和说话人相似性 。CosyVoice2 在零样本合成过程中也能保持稳定的语音输出 ,这表明其无需特定的训练数据即可稳健地复制说话人特征,实现了与人类相当的合成质量 。

SparkTTS 在零样本语音克隆方面是三者最好的(目前感觉是业界中文最先进的开源模型),仅需一段参考音频即可。用户反馈表明,即使使用很短的参考音频,它也能生成非常逼真的中文语音 ,这表明其可能在处理声调语言方面具有优势或进行了专门优化。SparkTTS 在使用短音频样本进行高质量中文语音克隆方面的显著成功可能归因于其 BiCodec 架构有效捕获说话人特定属性的能力或其使用的训练数据。这也可能意味着该模型特别适合像中文这样的声调语言。

所有三个模型在零样本语音克隆方面都表现出色,这证明了 LLM 在学习说话人特征方面的强大能力。然而,感知质量和所需的参考音频时长可能有所不同。SparkTTS 在语音克隆方面,尤其是在中文方面拥有很高的声誉,零样本语音克隆在所有三个模型中都是一项关键特性,这突显了其在当前 TTS 技术领域的重要性。

2.2 多语种支持

LlaSA 在中文和英文中都展现出逼真且富有情感的语音 。还有一个多语种版本(Llasa-1B-Multilingual),包括对法语、德语、荷兰语、西班牙语、意大利语、葡萄牙语、波兰语、日语和韩语的支持,尽管由于训练数据有限,某些语言的性能可能不太理想 ,合成的语音质量也不太稳定,这表明 LlaSA 正在努力扩展其语言覆盖范围,但对于数据较少的语言,质量可能会有所权衡。

CosyVoice 被描述为一个可扩展的多语种合成器,支持 100 多种语言 。CosyVoice2 特别提到了对中文、英文、日语、粤语和韩语的支持 ,在日语和韩语的基准测试中表现出色 。这表明其具有广泛的多语种合成能力,并且在某些非英语语言中表现出强大的性能。

SparkTTS 支持中文和英文,并在这两种语言之间具备零样本语音克隆能力。这种重点双语支持和跨语言克隆表明其优先考虑在这两种语言中的高性能。

在三个模型中,CosyVoice 提供了最广泛的多语种支持,而 LlaSA 和 SparkTTS 主要关注中文和英文,LlaSA 具有一定的扩展多语种能力。CosyVoice 和 SparkTTS 都具备跨语言语音克隆功能。支持的语言数量是衡量 TTS 模型多功能性的重要因素。CosyVoice 声称支持 100 多种语言,使其成为多语种应用的首选。虽然 LlaSA 和 SparkTTS 专注于广泛使用的中文和英文,但 LlaSA 的多语种版本表明其正在努力扩展语言覆盖范围。跨语言语音克隆的能力进一步增强了这些模型在国际和混合语言场景中的实用性。

2.3 可控语音生成

LlaSA 能够捕捉情感并提供对语音风格的一定程度的控制 。表达情感的能力增强了合成语音的自然度和表现力。CosyVoice 提供情感控制和粤语合成 。

CosyVoice2 提供了更精细的情感控制和方言口音调整 。这表明其侧重于为用户提供对生成语音特征的精细控制。

SparkTTS 支持通过调整性别、音高和语速等参数来创建虚拟说话人,并且可以进行粗粒度(例如,性别、说话风格)和细粒度(例如,精确的音高、语速)的调整。这种详细的控制水平允许高度定制的语音生成。SparkTTS 似乎提供了对性别、音高和语速等语音参数最明确和最细粒度的控制。

虽然 LlaSA 和 CosyVoice 也提供了一定程度的控制,尤其是在情感和风格方面,但 SparkTTS 的方法似乎更侧重于参数驱动。精确控制语音的各个方面对于许多应用至关重要。SparkTTS 提供的可调参数的全面集合,为用户提供了高度的灵活性来创建所需的语音特征。虽然 LlaSA 侧重于捕捉更广泛的方面(如情感和风格),而 CosyVoice2 在精细的情感和方言控制方面取得了进展,但 SparkTTS 的显式参数调整提供了一种更直接的方式来根据特定要求塑造输出。这在需要精确控制声学特征的场景中可能特别有用。

表二:特性对比

特征LlaSACosyVoice (CosyVoice2)SparkTTS
零样本语音克隆支持 (质量可能不一致)支持 (说话人相似性好)支持 (尤其擅长中文)
多语种支持中文、英文 + 部分其他语言100+ 种语言 (CosyVoice),中文、英文、日语、粤语、韩语 (CosyVoice2)中文、英文
跨语言克隆
可控语音生成情感、风格情感、粤语、方言口音 (CosyVoice2)性别、音高、语速 (粗细粒度控制)
优劣基于广泛被支持的Llama,输出可能存在噪音,合成/克隆不够稳定提供指令遵循指导合成控制,克隆的相似度非业界领先,多语种效果待明确擅长中文克隆,issue上提到了奇怪的声音、停顿、吞字等

2.4 计算效率和模型大小

LlaSA 运行资源密集 。提供 1B和 3B 参数的变体,并且正在开发 8B亿参数的版本 。较大的模型尺寸表明更高的计算需求。

CosyVoice 高效 。CosyVoice2 的参数大小为 0.5B 。强调低延迟和实时因子 。较小的模型尺寸和对低延迟的关注表明其设计优先考虑效率。

SparkTTS 设计高效且简单,完全基于 Qwen2.5 构建。仅使用 1B 个参数即可实现优于其他需要高达 7B个参数的模型的性能 。生成语音的速度比竞争模型快 1.8 倍 。Spark-TTS-0.5B 的参数大小为 0.5B。较小的参数大小和明确的效率和速度声明表明其侧重于资源友好性。

SparkTTS (0.5B) 和 CosyVoice2 (0.5B) 的参数尺寸较小,并且明确提到了效率和低延迟,这表明这些模型旨在更加资源友好,并且适合具有计算约束或需要实时生成的应用程序。相比之下,LlaSA 的参数尺寸较大(1B、3B,以及正在开发的 8B),并且用户反馈也表明其资源密集,这表明它可能需要更强大的硬件,并且更适合计算资源不太重要但需要高质量输出的应用程序。

总结

基于LLM的方法摆脱了音素建模,采用了LLM+Decoder架构,在大大简化了TTS的复杂度的同时,提高了合成的可控性,LLM作为这些TTS系统的核心组件或基础架构被反复提及,标志着TTS领域从传统的声学建模方法向利用LLM的语义理解和生成能力的重大转变。这种范式转变直接促成了零样本语音克隆和多语种支持等功能的进步 。

基于 LLM 的 TTS 技术正在迅速发展,LlaSA、CosyVoice 和 SparkTTS 等模型代表了该领域的重大进步。它们各自的技术选择和性能特点使其在不同的应用领域具有独特的优势,共同推动着语音合成技术的发展。

相关文章:

语音合成之四基于LLM的语音合成

基于LLM的语音合成 1.技术架构1.1 LlaSA1.2 CosyVoice (和 CosyVoice2)1.3 SparkTTS 2 特性对比2.1 零样本语音克隆2.2 多语种支持2.3 可控语音生成2.4 计算效率和模型大小 总结 当前,在大型语言模型(Large Language Models,LLMs)…...

Docker Python 官方镜像使用说明(TAG说明)

Docker Python 官方镜像使用说明(TAG说明) 本文将以python的3.12版本,详细讲解官方 Python 镜像 的TAGS含义 官方文档:https://github.com/tuonioooo/docker 🧭 一张图先看懂(最常见 Tag) py…...

Node.js 开发用户登录功能(使用mysql实现)

在 Web 开发中,用户登录功能是一个基础且重要的部分。、 一、环境搭建 在开始开发之前,我们需要搭建好相应的开发环境。以下是所需的工具和库: Node.js:作为 JavaScript 的运行环境,为我们的项目提供支持。mysql2&am…...

程序员学英文之Shipment Claim 运输和索赔

Time is precious , don’t waste your time, you should spend your time on something valuable . 时间很宝贵,不要浪费时间,你应该把时间用在有 价值的事情上。 Dia-1: Shipment by Voyage Charter 租船装运 1. May I know when your bo…...

python实战项目64:selenium采集软科中国大学排名数据

python实战项目64:selenium采集软科中国大学排名数据 一、项目需求二、流程分析三、完整代码一、项目需求 本项目的需求是使用selenium采集软科中国大学排名的数据。网站首页如下: 抓取此网页数据一般有两种方式,一种是直接发requests请求,我们这里采用的是使用selenium控…...

Linux服务器:在ufw防火墙设置这套规则sudo ufw allow from 172.0.0.0/8,为什么容器就可以访问宿主机的服务了?

在 Docker 环境中,容器默认使用 桥接网络(bridge),宿主机和容器之间的通信会受到防火墙(如 ufw)的限制。当你执行 sudo ufw allow from 172.0.0.0/8 后,容器可以访问宿主机上的服务,原因如下: 1. Docker 默认使用 172.x.x.x 网段 Docker 默认会创建一个 docker0 网桥…...

Google搜索技巧

谷歌搜索 1. 使用双引号 (" ") 精确匹配短语 ● 例子:"人工智能的定义" ● 作用:确保搜索结果中包含完全匹配的短语,而不是单独的单词。 2. 使用减号 (-) 排除特定词语 ● 例子:苹果 -水果 ● 作用&…...

Reactor编程模型介绍

Reactor 模型是一种基于事件驱动的编程模型,广泛应用于高并发网络服务器的设计中。它通过事件循环和回调机制,将事件的处理逻辑从主线程中解耦出来,从而实现高效的异步 I/O 操作。Reactor 模型的核心思想是利用一个或多个事件分发器(Reactor)来监听各种事件(如 I/O 事件、…...

C++笔记-stack_queue(含deque,priority_queue,仿函数的讲解)

一.stack和queue的基本使用 stack和queue就是我们之前所学的栈和队列,这两个和之前学的vector,list不太一样: 这是vector和list的,注意第一行中写的containers,代表这两个都是容器,但是: stac…...

意见反馈留言二维码制作

意见反馈对于工作整改具有重要作用,在工作中一味埋头苦干不如抬头多听听反馈声音。而传统的反馈内容投递后,因为繁琐性和时效性的枷锁,往往石沉大海,不知何时才能得到回应,这就导致反馈信息的延迟,一些时效…...

扣子智能体平台深度解读:功能剖析与全流程工作流详解

在上一篇文章中,我们已经带大家了解了“智能体”这一概念的内涵,并通过扣子智能体平台的各大模块做了初步介绍,同时用一个简单的示例演示了如何构建和部署第一个智能体。那篇文章打好了基础,让大家对智能体的基本组成与工作方式有…...

C语言五子棋项目

头文件与宏定义 #include <graphics.h> #include <conio.h> graphics.h&#xff1a;EasyX 图形库&#xff0c;提供图形绘制功能&#xff08;画线、画圆、显示文字等&#xff09;。 conio.h&#xff1a;提供控制台输入输出函数&#xff08;这里只是为了兼容性&…...

建筑安全员 A 证与 C 证:差异决定职业方向

在建筑行业的职业发展道路上&#xff0c;安全员 A 证和 C 证就像两条不同的岔路&#xff0c;它们之间的差异&#xff0c;在很大程度上决定了从业者的职业方向。 从证书性质和用途来看&#xff0c;A 证是从业资格证书&#xff0c;更像是一把开启安全管理高层岗位的 “金钥匙”。…...

长连接、短连接与WebSocket的基本知识

目录 前言正文 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器&#xff0c;无代码爬取&#xff0c;就来&#xff1a;bright.cn Java基本知识&#xff1a; java框架 零基础从入门到精通的学习路线 附…...

MySQL常见问题解答

一、安装与配置问题 1. 安装失败(权限 / 依赖 / 端口冲突) 权限问题:以管理员身份运行安装程序(Windows)或使用sudo(Linux)。依赖缺失: Windows 需安装 Visual C++ Redistributable(如 2013 版)。Linux 通过包管理器安装依赖(如libaio、perl)。端口冲突: 检查 33…...

Codeforces Round 1019 (Div. 2)(ABCD)

A. Common Multiple 翻译&#xff1a; 给你一个整数数组 a1,a2,...,an。如果存在一个数组 y1,y2,...,ym&#xff0c;且 y 的元素是不同的&#xff08;换句话说&#xff0c;对于所有 1≤i<j≤m 的数组&#xff0c;yi≠yj&#xff09;&#xff0c;并且对于所有 1≤i≤m 的数组…...

爬虫学习总结

通过前几次课&#xff0c;我们学习了爬虫的相关基础知识。 以下是我对爬虫学习做的一些总结&#xff1a; 一、认识爬虫&#xff1a;开启数据抓取之旅 1.1 什么是网络爬虫​ 网络爬虫就像是一个不知疲倦的 “数据搬运工”&#xff0c;它能按照预先设定的规则&#xff0c;自动…...

UE5的 Modify Curve 蓝图节点

In Unreal Engine’s Animation Blueprints, the Modify Curve node lets you drive and alter any named Animation Curve on your character at runtime. The Apply Mode setting on that node controls how the “new” value you feed in (via the added curve‐input pin)…...

鸿蒙中的并发线程间通信、线程间通信对象

目录 并发线程间通信1. 线程间通信对象1.1 普通对象1.2 ArrayBuufer对象1.3 SharedArrayBuffer对象1.4 Transferable对象&#xff08;NativeBinding对象&#xff09;1.5 Sendable对象简介异步锁ASON解析与生成共享容器共享模块Sendable对象冻结 2 线程间通信场景2.1 使用TaskPo…...

Elasticsearch内核探秘:从Shard分配到网络通信的深度实践指南

#作者&#xff1a;孙德新 文章目录 一、底层模块深入解析之shard allocation1、shard allocation的介绍2、cluster level shard allocation介绍3、disk-based shard allocation介绍4、shard allocation awareness5、shard allocation filtering6、node下线时的shard延迟分配7、…...

Vue3 模板语法

目录 一、插值语法 {{ }} 二、核心指令 三、动态属性绑定 四、事件修饰符 五、条件渲染 vs 列表渲染总结 六、最佳实践 示例 1&#xff1a;插值语法 & 基础绑定 示例 2&#xff1a;条件渲染 示例 3&#xff1a;列表渲染 示例 4&#xff1a;事件处理 示例 5&…...

第1节:Backtrader到底是个啥?能干嘛?

——“框架在手&#xff0c;天下我有&#xff1b;不是吹&#xff0c;Backtrader真香警告&#xff01;” &#x1f423; 一句话简介 Backtrader 是一个 专门为量化交易打造的 Python 回测框架&#xff0c;说白了&#xff0c;它就是一个量化策略“模拟器控制台评审团”&#xff…...

Java基础第21天-正则表达式

正则表达式是对字符串执行模式匹配的技术 如果想灵活的运用正则表达式&#xff0c;必须了解其中各种元字符的功能&#xff0c;元字符从功能上大致分为&#xff1a; 限定符选择匹配符分组组合和反向引用符特殊字符字符匹配符定位符 转义号\\:在我们使用正则表达式去检索某些特…...

【Pandas】pandas DataFrame mod

Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象&#xff08;如 DataFrame、Series 或标量&#xff09;的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…...

【哈希表】1399. 统计最大组的数目

1399. 统计最大组的数目 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数 n 。请你先求出从 1 到 n 的每个整数 10 进制表示下的数位和&#xff08;每一位上的数字相加&#xff09;&#xff0c;然后把数位和相等的数字放到同一个组中。 请你统计每个组中的数字数目&…...

57、Spring Boot 最佳实践

Spring Boot 最佳实践 一. 开发规范与代码风格 编写高质量的代码不仅需要功能的实现,还需要遵循一定的规范和代码风格,以提高代码的可读性、可维护性和协作效率。以下是 Spring Boot 开发中的一些关键规范和代码风格建议。 1. 代码命名规范 在编写代码时,命名是非常重要的…...

Java高级:数据库访问优化

系列文章目录 Java高级部分 JDBC编程 文章目录 系列文章目录前言一、编写属性文件&#xff1a;二、编写DBUtil工具类&#xff1a;三、使用DBUtil工具类&#xff1a;总结 前言 通过我之前发的数据库连接&#xff0c;数据库连接https://blog.csdn.net/2301_81776550/article/det…...

升级xcode16之后react-native-zip-archive不兼容,unsupported option ‘-G‘

问题 升级xcode到16之后,xcode build报错:unsupported option -G for target x86_64-apple-ios13.4-simulator (in target RNZipArchive from project Pods) 出现原因 在 React Native 项目中,当你将 Xcode 升级到 16 后,可能会遇到 RNZipArchive 相关的编译错误,特别是…...

基于MTF的1D-2D-CNN-LSTM-Attention时序图像多模态融合的故障识别,适合研究学习(Matlab完整源码和数据),附模型研究报告

基于MTF的1D-2D-CNN-LSTM-Attention时序图像多模态融合的故障识别&#xff0c;适合研究学习&#xff08;Matlab完整源码和数据&#xff09;&#xff0c;附模型研究报告 目录 基于MTF的1D-2D-CNN-LSTM-Attention时序图像多模态融合的故障识别&#xff0c;适合研究学习&#xff0…...

逻辑漏洞安全

逻辑漏洞是指由于程序逻辑不严导致一些逻辑分支处理错误造成的漏洞。 在实际开发中&#xff0c;因为开发者水平不一没有安全意识&#xff0c;而且业务发展迅速内部测试没有及时到位&#xff0c;所以常常会出现类似的漏洞。 由于开发者/设计者在开发过程中&#xff0c;由于代码…...

基于PaddleOCR对图片中的excel进行识别并转换成word优化(二)

0、原图 一、优化地方 计算行的时候&#xff0c;采用概率分布去统计差值概率比较大的即为所要的值。 def find_common_difference(array):"""判断数组中每个元素的差值是否相等&#xff0c;并返回该差值:param array: 二维数组&#xff0c;其中每个元素是一个…...

5.2.3 WPF 中 XAML 文件 Converter 使用介绍

Converter&#xff08;转换器&#xff09;在 WPF 数据绑定中扮演着重要角色&#xff0c;用于在源数据和目标属性之间进行值转换 举例来说&#xff1a;我想用一个bool量来控制一个背景&#xff0c;为true时&#xff0c;显示红色&#xff1b;为false时背景用默认颜色。因此 Backg…...

基于STM32_HAL库的HC-08蓝牙插座项目

基于STM32_HAL库的HC-08蓝牙插座 文章目录 基于STM32_HAL库的HC-08蓝牙插座一、项目需求二、硬件连接三、项目实现3.1 CubeMX配置3.2 以阻塞的方式实现3.3 以中断的方式实现 一、项目需求 通过手机可以控制开发板上的LED或者继电器 二、硬件连接 首先将HC-08蓝牙模块连接到我们…...

SwiftUI 3.Button介绍和使用

SwiftUI 的 Button 是用于触发用户操作的核心交互组件。以下是 Button 的详细介绍和使用示例&#xff1a; 一、基础用法 1. 创建简单按钮 Button("点击我") {print("按钮被点击了") }2. 自定义按钮内容 Button {// 点击动作 } label: {Text("保存&…...

Linux 管道理解

一、什么是管道 1.1 unix中最古老的进程间通信 1.2 一个进程链接到另一个进程的数据流称为“管道”&#xff1a; 图解&#xff1a; 二、管道通信的原理 2.1当我们创建一个进程然后打开一个文件的时候 会经过以下步骤&#xff1a; ①首先要描述这个进程&#xff0c;为这个…...

从并发问题衍生出的Spring的七种事务传播行为

最近在处理一个BPM流程时&#xff0c;遇到了并发问题&#xff0c;原因是事务粒度太大了&#xff0c;导致等待lock超时。今天刚好借此机会分享下Spring框架中提供的7种事务传播行为。 在 Spring中&#xff0c;Transactional 注解支持配置事务的传播行为&#xff0c;用于指定当一…...

第十五届蓝桥杯 2024 C/C++组 艺术与篮球

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 思路详解&#xff1a; 代码&#xff1a; 代码详解&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; P10385 [蓝桥杯 2024 省 A] 艺术与篮球 - 洛谷 艺术…...

Python内置函数---bin()

用于将整数转换为二进制字符串 1. 基本语法与参数 bin(x) 参数&#xff1a; x 必须为整数&#xff08; int 类型&#xff09;&#xff0c;或实现了 __index__() 方法的自定义对象&#xff08;该方法需返回整数&#xff09; 。 返回值&#xff1a;以 0b 开头的二进制字符串。…...

网络socks 代理

在系统/终端中设了这样的环境变量&#xff0c;而没有在代码中覆盖&#xff0c;HTTPX 就会启用该 socks 代理。 env | grep proxy https_proxyhttps://proxyhk.zte.com.cn:80 http_proxyhttp://proxyhk.zte.com.cn:80 no_proxylocalhost,127.0.0.0/8,::1,zte.com.cn,zte.intra,…...

【正则表达式】核心知识点全景解析

目录 一、基础语法架构二、核心元字符详解三、高级匹配技巧1. 字符集合2. 分组与引用3. 断言机制 四、Python re模块核心方法五、性能优化策略1. 编译重用2. 避免回溯陷阱3. 选择高效量词 六、典型应用场景1. 数据验证2. 数据提取3. 文本清洗 七、调试技巧宝典1. 可视化调试工具…...

深度学习--ResNet残差神经网络解析

文章目录 前言一、什么是ResNet网络二、传统卷积神经网络存在的问题1、梯度消失和梯度爆炸2、退化问题 三、如何解决问题四、残差结构五、18层残差网络1、解释2、隔层相加优点3、隔层相加数值增大问题 六、18层残差网络以外的表格示例七、BN层&#xff08;Batch Normalization&…...

数据结构线性表的顺序存储结构

线性表是由零个或多个数据元素组成的有序序列。 特点&#xff1a; 数据元素间是有顺序的&#xff1b; 数据元素的个数是有限的&#xff1b; 一般来说&#xff0c;数据元素的类型是相同的&#xff08;强类型语言&#xff09;。c/c是强类型语言&#xff0c;必须指定数据类型。…...

深入解析C++ STL Queue:先进先出的数据结构

一、引言 在计算机科学中&#xff0c;队列&#xff08;Queue&#xff09;作为一种遵循先进先出&#xff08;FIFO&#xff09;​原则的数据结构&#xff0c;是算法设计和系统开发的基础组件。C STL中的queue容器适配器以简洁的接口封装了底层容器的操作&#xff0c;为开发者提供…...

永磁同步电机控制算法-反馈线性化控制

一、原理介绍 基于非线性系统的精确线性化控制方法&#xff0c;采用精确反馈线性化原理对永磁同步电机进行输入-输出线性化&#xff0c;该方法通过坐标变换和状态反馈将系统的数学模型转变为两个线性子系统&#xff0c;在实现线性化的同时也对系统中电流和转速存在的耦合现象进…...

开源 RAG 引擎:文档理解精准、检索高效、可视化干预灵活,一站式搞定

引言&#xff1a; RAGFlow 是一款基于深度文档理解的开源 RAG 引擎&#xff0c;与 LLM 结合后可实现精准引用问答。它支持 20 多种文档格式解析&#xff0c;配备智能分块策略及混合检索方案&#xff0c;还有可视化干预界面&#xff0c;且支持 Docker 快速部署&#xff0c;堪称…...

URP-UGUI相关知识

一、UGUI的基本组成部分 Canvas &#xff08;画布&#xff09;所有UI都需要放在Canvas画布下面&#xff0c;不然无法显示EventSystem 所有的事件响应系统都需要依赖于EventSystem,若删除该组件&#xff0c;交互效果就 不会显示 1.Canvas(画…...

COMSOL多孔结构传热模拟

多孔结构传热模拟涉及对多孔介质内部复杂的热量传递过程进行建模和分析&#xff0c;这类模拟对于优化材料设计、提高能源效率以及解决环境问题等方面具有重要意义。本案例介绍在COMSOL内建立全连通多孔结构几何模型&#xff0c;并将孔隙及基体划分两相材料&#xff0c;进行多孔…...

【CSS】层叠,优先级与继承(四):层叠,优先级与继承的关系

层叠&#xff0c;优先级与继承的关系 前文概括 【CSS】层叠&#xff0c;优先级与继承&#xff08;一&#xff09;&#xff1a;超详细层叠知识点 【CSS】层叠、优先级与继承&#xff08;二&#xff09;&#xff1a;超详细优先级知识点 【CSS】层叠&#xff0c;优先级与继承&am…...

CDN加速http请求

一、CDN加速定义 CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;是通过全球分布式节点服务器缓存网站内容&#xff0c;使用户就近获取数据的技术。其核心目标是缩短用户与内容之间的物理距离&#xff0c;解决网络拥塞、带宽不足等问题&#xff…...

python实战项目63:获取腾讯招聘信息内容并进行统计分析

python实战项目63:获取腾讯招聘信息内容并进行统计分析 一、需求分析二、流程分析1、获取指定招聘工作类型的目标地址url。2、采集详情页信息。3、保存数据4、完整爬虫代码三、统计分析一、需求分析 本项目的需求是爬取腾讯社会招聘信息网中社会招聘的不同工作类别岗位数据,…...