声音克隆GPT-SoVITS
作者:吴业亮
博客:wuyeliang.blog.csdn.net
一、原理介绍
GPT-SoVITS,作为一款结合了GPT(生成预训练模型)和SoVITS(基于变分信息瓶颈技术的歌声转换)的创新工具,正在声音克隆领域掀起一场革命。这款工具凭借其强大的少样本学习能力,使得用户仅需极少的语音样本,便能生成高度逼真的声音克隆,为音频创作带来了前所未有的便利。
1、GPT-SoVITS的技术原理与优势
GPT-SoVITS的核心在于其创新的少样本学习算法。这种算法使得工具能够在接收到极少量的语音样本后,快速构建出一个临时的声音模型,并基于此模型生成与原始录音高度相似的声音克隆。具体而言,当用户上传一段时长仅为五秒的音频文件时,GPT-SoVITS便能通过分析录音中的频率、节奏及音色等特征参数,生成与原始录音高达80%-95%相似度的声音克隆。若增加至一分钟的样本量,则可进一步提升克隆质量,创建出几乎与真人无异的高保真度文本到语音(TTS)模型。
GPT-SoVITS的优势不仅在于其少样本学习能力,还在于其跨语言支持、高频优化以及丰富的功能。该工具支持中文、日语、英语、韩语和粤语五种语言的跨语种合成,使得用户可以用一种语言的录音来生成另一种语言的语音,轻松跨越语言界限。此外,针对网络音频中常见的高频缺失、音质沉闷等问题,GPT-SoVITS进行了全面优化,有效补充了缺失的高频,改善了整体音质。同时,该工具还新增了语速调节、无参考文本模式、更优的混合语种切分等实用功能,进一步拓展了其应用场景。
2、GPT-SoVITS的应用场景
GPT-SoVITS凭借其卓越的性能和丰富的功能,在多个领域展现出了巨大的应用潜力。以下是一些典型的应用场景:
- 个性化语音助手:通过声音克隆技术,用户可以轻松打造个性化的语音助手,为自己的生活和工作提供便利。
- 游戏角色配音:在游戏开发中,通过采集角色配音演员的少量录音样本,GPT-SoVITS能够生成符合角色设定的声音,大大节省了后期制作时间和成本。
- 有声读物制作:利用GPT-SoVITS的文本转语音功能,用户可以轻松将文字内容转化为自然流畅的语音输出,为有声读物的制作提供高效工具。
- 无障碍服务:对于视力障碍人士来说,GPT-SoVITS可以生成他们熟悉的人的声音来播报信息,提供更加贴心和个性化的无障碍服务。
- 广告配音与营销:在广告行业中,GPT-SoVITS可以生成各种名人或特定角色的声音来配音广告,提高广告的吸引力和影响力。
3、GPT-SoVITS与千帆大模型开发与服务平台
在探讨GPT-SoVITS的应用时,不得不提的是其与千帆大模型开发与服务平台的结合。千帆大模型开发与服务平台提供了丰富的AI模型开发工具和资源,包括模型训练、部署、优化等一站式服务。GPT-SoVITS作为其中的一款优秀工具,可以充分利用平台提供的资源和支持,进一步发挥其声音克隆和文本转语音的优势。
例如,在千帆大模型开发与服务平台上,用户可以更方便地获取GPT-SoVITS的安装包和更新信息,享受平台提供的专业技术支持和服务。同时,用户还可以利用平台提供的模型训练和优化工具,进一步提升GPT-SoVITS的性能和效果。此外,通过与平台上的其他AI模型进行集成和协同工作,GPT-SoVITS还可以拓展更多的应用场景和功能。
4、原理
1)、语音合成
VITS是一种用于端到端文本到语音(TTS)的模型,结合了对抗学习和条件变分自动编码器,旨在生成高质量的语音效果。近年来,虽然已经提出了多种单阶段训练和并行采样的TTS模型,但它们的样本质量往往无法与传统的两阶段系统相媲美。为了解决这个问题,VITS采用了一种并行的端到端方法,能够生成更自然、更真实的声音。
该模型通过标准化流和对抗训练过程增强的变分推理,显著提升了生成建模的表达能力。此外,VITS引入了随机持续时间预测器,能够从输入文本中合成出节奏各异的语音。这种设计允许模型捕捉潜在变量的不确定性,形成了一种自然的一对多关系,使得同一段文本可以以不同的音高和节奏进行多样化的表达。这种灵活性和高质量的输出使VITS在语音合成领域中具备了广泛的应用潜力。
论文地址:https://arxiv.org/pdf/2106.06103
Github地址:https://github.com/jaywalnut310/vits

2)、 Whisper语音识别
Whisper是OpenAI开发的先进自动语音识别(ASR)系统,经过训练的语料库包含68万小时的多语言(涵盖98种语言)和多任务监督数据。OpenAI认为,这种庞大且多样化的数据集显著提升了系统对各种口音、背景噪音和专业术语的识别能力,使其在实际应用中表现出色。
除了语音识别功能,Whisper还支持多种语言的转录和翻译,能够将非英语语言直接翻译成英语。这种多功能性使得Whisper不仅适用于语音转文字的任务,还能在国际交流、内容创建和教育等领域发挥重要作用。凭借其出色的准确性和灵活性,Whisper为用户提供了一个强大的工具,有助于打破语言障碍,促进沟通与理解。
论文地址:https://github.com/openai/whisper
GitHub地址:https://arxiv.org/pdf/2212.04356
Whisper的基本原理基于一种Transformer序列到序列模型,旨在处理多种语音任务,包括多语言语音识别、语音翻译、口语语言识别以及语音活动检测。通过将这些任务统一表示为一个需要解码器预测的符号序列,Whisper能够有效地替代传统语音处理管道中的多个阶段,简化了处理流程。
该模型采用多任务训练的格式,使用一系列特殊符号作为任务指示符或分类目标。这种设计不仅提升了模型的灵活性,还使其在处理不同类型的语音输入时表现出色。例如,当面对多种语言或不同口音时,Whisper能够利用其训练数据中的丰富信息,快速适应并提高识别准确性。通过这种创新的方法,Whisper在语音处理领域展示了强大的能力,能够满足多样化的用户需求。

Whisper系统提供了五种不同的模型尺寸,以平衡速度和准确性。每种模型的设计旨在满足不同应用场景的需求,用户可以根据自己的具体要求选择合适的模型。以下是可用模型的名称、对应的大致内存需求和相对速度:
- 小型模型:内存需求低,速度快,适合实时语音识别任务,但在复杂音频环境中的准确性可能稍逊。
- 中型模型:提供更好的准确性,同时保持相对较快的速度,适合大多数日常应用。
- 大型模型:在准确性上有显著提升,适合对精度要求较高的场景,如医疗记录转录和法律文件审阅,但相对速度略慢。
- 超大型模型:具有出色的语音识别性能,能够处理复杂口音和技术术语,适合专业领域的使用,内存需求较高,速度相对较慢。
- 特大模型:提供顶尖的准确性,特别适用于高噪声环境和多方对话场景,内存需求极大,速度较慢,适合不需要实时处理的情况。
通过这些不同尺寸的模型,用户可以根据自己的硬件资源和应用需求,灵活选择最合适的选项,以实现最佳的语音识别效果。

5、总结
GPT-SoVITS作为一款革命性的少样本语音转换与合成工具,正在声音克隆领域发挥着越来越重要的作用。其强大的少样本学习能力、跨语言支持、高频优化以及丰富的功能,使得用户能够轻松实现声音克隆和文本转语音等操作。同时,通过与千帆大模型开发与服务平台的结合,GPT-SoVITS还可以进一步拓展其应用场景和功能。相信在未来,GPT-SoVITS将继续引领音频创作领域的发展潮流,为用户带来更多惊喜和可能。在音频创作日益繁荣的今天,GPT-SoVITS无疑为创作者们提供了一个强大的工具。无论是个人娱乐、广告营销还是商业合作,GPT-SoVITS都能发挥其独特的作用,为音频创作领域注入新的活力和创意。随着技术的不断进步和应用场景的不断拓展,我们有理由相信,GPT-SoVITS将会在未来发挥更加重要的作用。
二、环境信息
| 类别 | 规格 |
|---|---|
| OS | Ubuntu 20.04 |
| 内存 | 32G |
| cpu | 16core |
| 磁盘 | 120G |
| 显卡 | tesla M40 |
| 显卡驱动 | 520.61.05 |
| cuda | cuda_11.8 |
| cudnn | 9.5.1.17_cuda11 |
三、环境部署
- 创建GPT-SoVITS需要的环境
# conda create -n GS python=3.9
# conda activate GS
2、conda配置
1)、配置清华镜像源在/root/.condarc
channels:- defaults
show_channel_urls: true
default_channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudpytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
您可以遵循上述配置文件中的格式添加第三方源(推荐),或者通过以下命令添加第三方源:
第三方源
conda config --set custom_channels.auto https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/
使用下列命令清除索引缓存。
conda clean -i
3、配置pip 镜像源
# pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
4、GPT-SoVITS安装
1)、 GitHub仓库进行克隆
官网地址:GPT-SoVITSGitHub地址
# git clone https://github.com/RVC-Boss/GPT-SoVITS.git国内源
git clone https://mirror.ghproxy.com/https://github.com/RVC-Boss/GPT-SoVITS.git
2)、进入安装目录
# cd GPT-SoVITS/
3)、执行安装
# bash install.sh
# apt install ffmpeg
# apt install libsox-dev
# conda install -c conda-forge 'ffmpeg<7'
四、下载模型
1、从GPT-SoVITS Models下载预训练的模型并将其放置在GPT_SoVITS/pretrained_models中。
创建项目的虚拟环境后,激活该环境,并执行:
pip install -U huggingface_hub
export HF_ENDPOINT=https://hf-mirror.com
2、下载lj1995/GPT-SoVITS到GPT_SoVITS/pretrained_models目录
huggingface-cli download --resume-download --local-dir-use-symlinks False lj1995/GPT-SoVITS --local-dir GPT_SoVITS/pretrained_models
3、下载G2PW模型,解压缩并重命名为G2PWModel,然后将它们放在GPT_SoVITS/text中
cd GPT_SoVITS/text
wget https://paddlespeech.bj.bcebos.com/Parakeet/released_models/g2p/G2PWModel_1.1.zip
unzip G2PWModel_1.1.zip
mv G2PWModel_1.1 G2PWModel
4、对于UVR 5(人声/伴奏分离混响去除,另外),从UVR 5权重下载模型并将其放置在tools/uvr5/uvr5_weights中。
huggingface-cli download --resume-download --local-dir-use-symlinks False lj1995/VoiceConversionWebUI --local-dir tools/uvr5/uvr5_weights
将下载的内容拷贝到uvr5_weights目录,内容如下:
(base) root@ubuntu:~/GPT-SoVITS/tools/uvr5/uvr5_weights# ll
total 543500
drwxr-xr-x 3 root root 333 Dec 4 11:10 ./
drwxr-xr-x 6 root root 142 Dec 4 01:48 ../
-rw-r--r-- 1 root root 14 Dec 3 05:31 .gitignore
-rw-r--r-- 1 root root 63454827 Dec 3 23:33 HP2_all_vocals.pth
-rw-r--r-- 1 root root 63454827 Dec 3 23:33 HP2-人声vocals+非人声instrumentals.pth
-rw-r--r-- 1 root root 63454827 Dec 3 23:33 HP3_all_vocals.pth
-rw-r--r-- 1 root root 63454827 Dec 3 23:33 HP5_only_main_vocal.pth
-rw-r--r-- 1 root root 63454827 Dec 3 23:33 HP5-主旋律人声vocals+其他instrumentals.pth
drwxr-xr-x 2 root root 25 Dec 4 01:37 onnx_dereverb_By_FoxJoy/
-rw-r--r-- 1 root root 63666335 Dec 3 23:33 VR-DeEchoAggressive.pth
-rw-r--r-- 1 root root 111925279 Dec 3 23:33 VR-DeEchoDeReverb.pth
-rw-r--r-- 1 root root 63666335 Dec 3 23:33 VR-DeEchoNormal.pth
5、对于中文 ASR(额外功能),从 Damo ASR Model、Damo VAD Model 和 Damo Punc Model 下载模型,并将它们放置在 tools/asr/models 目录中。
# cd GPT-SoVITS/tools/asr/models
# apt-get install git-lfs
# git lfs install
# git clone https://www.modelscope.cn/iic/punc_ct-transformer_zh-cn-common-vocab272727-pytorch.git
# git clone https://www.modelscope.cn/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch.git
# git clone https://www.modelscope.cn/iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch.git
五、登录web
1、使用python运行webui.py
# python webui.py
或者这样带语言执行
python webui.py zh_CN
回显如下:
Running on local URL: http://0.0.0.0:9874
2、改造成service服务,并设置开机启动
创建/etc/systemd/system/GPTSoVits.service
[Unit]
Description=GPTSoVits
After=network.target[Service]
Type=simple
User=root
WorkingDirectory=/root/GPT-SoVITS
ExecStart=/bin/bash -c 'source /root/miniconda3/bin/activate && conda activate GPTSoVits && python webui.py zh_CN'
Restart=on-failure[Install]
WantedBy=multi-user.target
设置开机启动
systemctl daemon-reload
systemctl restart GPTSoVits.service
systemctl enable GPTSoVits.service
2、通过 http://192.168.1.6:9874登录
http://192.168.1.159:9874
五、使用教程
1、快速克隆
点击1-GPT-SoVITS-TTS—>1c推理–>开启TTS推理WebUI,会新弹出一个界面

新弹出界面http://192.168.1.159:9872/

如果报错:
LookupError:
**********************************************************************Resource cmudict not found.Please use the NLTK Downloader to obtain the resource:>>> import nltk>>> nltk.download('cmudict')
解决办法:
查看nltk.data.path数据目录
(GPTSoVits) root@ubuntu:~# python
Python 3.9.20 (main, Oct 3 2024, 07:27:41)
[GCC 11.2.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import nltk
print(nltk.data.path[0])
>>> print(nltk.data.path[0])
/root/nltk_data
手动下载库,并导入
(GPTSoVits) root@ubuntu:~# wget https://mirror.ghproxy.com/https://github.com/nltk/nltk_data/archive/refs/heads/gh-pages.zip
(GPTSoVits) root@ubuntu:~# unzip gh-pages.zip
(GPTSoVits) root@ubuntu:~# mkdir /root/nltk_data
(GPTSoVits) root@ubuntu:~# cd /root/nltk_data
(GPTSoVits) root@ubuntu:~/nltk_data# cp -a ../nltk_data-gh-pages/packages/* .
(GPTSoVits) root@ubuntu:~/nltk_data# ll
请注意,要保证解压后的文件夹和压缩包同名,且压缩包和解压后的文件需要同时存在于目录中,否则将同样报错Resource xxx not found 例如这样:
(base) root@ubuntu:~/nltk_data/taggers# ll
total 31880
drwxr-xr-x 9 root root 4096 Dec 3 08:31 ./
drwxr-xr-x 12 root root 157 Dec 3 08:26 ../
drwxr-xr-x 2 root root 47 Sep 27 2015 averaged_perceptron_tagger/
drwxr-xr-x 2 root root 159 Jul 5 15:58 averaged_perceptron_tagger_eng/
-rw-r--r-- 1 root root 156 Jul 29 10:34 averaged_perceptron_tagger_eng.xml
-rw-r--r-- 1 root root 1539115 Jul 29 10:34 averaged_perceptron_tagger_eng.zip
drwxr-xr-x 2 root root 50 Jul 13 2016 averaged_perceptron_tagger_ru/
drwxr-xr-x 2 root root 159 Jul 5 17:44 averaged_perceptron_tagger_rus/
-rw-r--r-- 1 root root 207 Jul 29 10:34 averaged_perceptron_tagger_rus.xml
-rw-r--r-- 1 root root 5997187 Jul 29 10:34 averaged_perceptron_tagger_rus.zip
-rw-r--r-- 1 root root 206 Jul 29 10:34 averaged_perceptron_tagger_ru.xml
-rw-r--r-- 1 root root 8628828 Jul 29 10:34 averaged_perceptron_tagger_ru.zip
-rw-r--r-- 1 root root 145 Jul 29 10:34 averaged_perceptron_tagger.xml
-rw-r--r-- 1 root root 2526731 Jul 29 10:34 averaged_perceptron_tagger.zip
drwxr-xr-x 3 root root 39 Aug 26 2013 maxent_treebank_pos_tagger/
drwxr-xr-x 3 root root 21 Jul 11 12:06 maxent_treebank_pos_tagger_tab/
-rw-r--r-- 1 root root 171 Jul 29 10:34 maxent_treebank_pos_tagger_tab.xml
-rw-r--r-- 1 root root 3731431 Jul 29 10:34 maxent_treebank_pos_tagger_tab.zip
-rw-r--r-- 1 root root 167 Jul 29 10:34 maxent_treebank_pos_tagger.xml
-rw-r--r-- 1 root root 10156853 Jul 29 10:34 maxent_treebank_pos_tagger.zip
drwxr-xr-x 2 root root 4096 Jul 4 2022 universal_tagset/
-rw-r--r-- 1 root root 236 Jul 29 10:34 universal_tagset.xml
-rw-r--r-- 1 root root 19095 Jul 29 10:34 universal_tagset.zip
在每个子目录执行
aa=`find . | grep .zip`
for v in $aa; do unzip $v; done
验证测试正常
(GPTSoVits) root@ubuntu:~# python
Python 3.9.20 (main, Oct 3 2024, 07:27:41)
[GCC 11.2.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from nltk.corpus import cmudict
print(cmudict.entries())
>>> print(cmudict.entries())
[('a', ['AH0']), ('a.', ['EY1']), ('a', ['EY1']), ...]
>>>
2、通过训练合成音频
1)、打开开启UVR5-WebUI

2)、在新弹出的界面http://192.168.1.159:9873/

成功后

素材音频在如下目录

点击音频切割

切割后音频在如下目录

开启降噪

成功后文件如下:

开启离线批量ASR

开启打标,校准音频和文字内容,

弹出界面http://192.168.1.159:9871/
逐句校对并保存

开启一键三连

成功后

进行模型微调训练

如果SoVITS训练报如下错误
解决办法,在webui.py中新增一行如下,并重启服务,再次训练

开启推理,刷新模型,使界面识别到刚才训练的模型

选择最下面的模型

开启推理

弹出界面http://192.168.1.159:9872/

合成语音,完成!!!
参考:
https://cloud.baidu.com/article/3384362
https://www.bilibili.com/video/BV1a7pEe9EyC?t=721.6
https://github.com/RVC-Boss/GPT-SoVITS
https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e
相关文章:
声音克隆GPT-SoVITS
作者:吴业亮 博客:wuyeliang.blog.csdn.net 一、原理介绍 GPT-SoVITS,作为一款结合了GPT(生成预训练模型)和SoVITS(基于变分信息瓶颈技术的歌声转换)的创新工具,正在声音克隆领域掀…...
【STM32 Modbus编程】-作为主设备读取保持/输入寄存器
作为主设备读取保持/输入寄存器 文章目录 作为主设备读取保持/输入寄存器1、硬件准备与连接1.1 RS485模块介绍1.2 硬件配置与接线1.3 软件准备2、读保持寄存器2.1 主设备发送请求2.2 从设备响应请求2.3 主机接收数据3、读输入寄存器4、结果4.1 保持寄存器4.2 输入寄存器在前面的…...
前端开发入门指南Day 17:TypeScript高级类型(泛型,类型守卫,Partial<T>和 Required<T>等)
泛型:代码的"变色龙" 🦎 为什么需要泛型? 想象一个快递员,每天要处理不同类型的包裹。如果为每种类型的包裹都写一套处理程序,那会很麻烦。泛型就像是一个"通用的包裹处理系统",它能…...
flex布局容易忽略的角色作用
目录 清除浮动 作用于行内元素 flex-basis宽度 案例一: 案例二: 案例三: flex-grow设置权重 案例一: 案例二: 简写flex-grow:1 0 auto; flex作为一维布局,行和列的使用,忽略的小角色,大…...
如何开发高效的企业内训APP?教育培训系统源码搭建实战详解
本篇文章,小编将从教育培训系统的源码搭建、功能设计以及技术实现等方面,详细探讨如何开发一款高效的企业内训APP。 一、企业内训APP的需求分析 在开发企业内训APP之前,首先需要明确其基本需求。一个高效的企业内训APP应该具备以下几个核心…...
【软考网工笔记】网络基础理论——传输层
IPSec协议 Internet协议安全性是一种开放标准的框架结构,通过使用加密的安全服务以确保在Internet协议(IP)网络上进行保密而安全的通讯。 工作在OSI模型的第三层网络层上,使其在单独使用时适于保护基于TCP或UDP的协议࿰…...
如何预防服务器后台爆破攻击
服务器后台爆破(Brute Force Attack)是一种通过反复尝试用户名和密码组合,以非法获取系统访问权限的攻击方式。这种攻击不仅会消耗服务器资源,还可能导致合法用户被锁定或敏感数据泄露。为了有效预防服务器后台爆破攻击࿰…...
CMake笔记之在CMakeLists.txt文件中开启Debug模式
CMake笔记之在CMakeLists.txt文件中开启Debug模式 code review! 文章目录 CMake笔记之在CMakeLists.txt文件中开启Debug模式1.设置 CMake 的构建类型2.添加编译器的调试选项3.使用 CMAKE_CXX_STANDARD (可选)4.编译和构建5.针对多配置生成器6.最终示例 CMakeLists.txt 1.设置 …...
C++编程:模拟实现CyberRT的DataVisitor和DataDispatcher
文章目录 0. 引言1. 设计概要1.1 主要组件1.2 类关系图1.3 工作流程 2. 代码实现2.1. 定义数据结构2.2. 实现 DataVisitor2.3. 实现 DataDispatcher2.4. 实现 Receiver2.5. 实现具体的 DataVisitor2.6. 示例主程序2.7. 编译和运行 0. 引言 使用 C 实现一个类似CyberRT 架构的 …...
【Flutter】WillPopScope组件-监听物理返回键事件自定义返回事件
WillPopScope(onWillPop: () async {if ( flutterWebViewPlugin ! null && await flutterWebViewPlugin.canGoBack() true) {flutterWebViewPlugin!.goBack();return false; // 阻止默认的返回行为} else {return true; // 允许默认的返回行为}},child: Scaffold(),);…...
【sqlserver】mssql 批量加载数据文件 bulk copy使用
参考文章: Using bulk copy with the JDBC driver SqlServer数据批量写入 SqlServer批量插入数据方法–SqlBulkCopy sqlserver buld copy需要提供,数据文件的对应表的元数据信息主要的字段的位置、字段的名称、字段的数据类型。 执行bulk load时候不一…...
flinkSql中累计窗口CUMULATE
eventTime package com.bigdata.day08;import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.table.api.bridge.java.StreamTableEnvironment;public class _05_flinkSql_Cumulate_eventTime {/*** 累积窗口 eventTime* …...
关于在ubuntu上无法运行EasyConnect的解决方法
需要这三个文件 libpangocairo-1.0-0_1.40.14-1_amd64.deb libpangoft2-1.0-0_1.40.14-1_amd64.deb libpango-1.0-0_1.40.14-1_amd64.deb然后执行 cp source /usr/share/sangfor/EasyConnect再重启EasyConnect即可 下载链接 http://kr.archive.ubuntu.com/ubuntu/pool/main/…...
【Axure高保真原型】数值条件分组
今天和大家分享数值条件分组的原型模板,效果包括: 点击添加分组按钮,可以显示添加弹窗,填写分组名称和数值区间后,可以新增该分组信息‘’ 修改分组区间,可以直接在输入框里修改已有的分组区间,…...
python学习——字符串的拼接操作
在Python中,字符串拼接是一项基本操作,用于将多个字符串合并成一个字符串。以下是几种常见的字符串拼接方式: 1. 使用 运算符 最简单和直接的方式是使用 运算符来拼接字符串。 str1 "Hello, " str2 "World!" resu…...
多线程篇-8--线程安全(死锁,常用保障安全的方法,安全容器,原子类,Fork/Join框架等)
1、线程安全和不安全定义 (1)、线程安全 线程安全是指一个类或方法在被多个线程访问的情况下可以正确得到结果,不会出现数据不一致或其他错误行为。 线程安全的条件 1、原子性(Atomicity) 多个操作要么全部完成&a…...
el-select的搜索功能
el-select的相关信息: 最基本信息 v-model的值为当前被选中的el-option的 value 属性值 :label是选择器可以看到的内容 过滤搜索 普通过滤搜索 <el-selectv-model"selectedCountry"placeholder"请选择国家"filterable:loading"lo…...
MFC实现全屏功能
之前全屏都是参考: MFC单文档(SDI)全屏程序的实现 主要思路就是将各种菜单工具栏隐藏恢复。 随着MFC的升级,MFC框架本身就具备了全屏的功能。 微软有一个全屏实现类: CFullScreenImpl Class managing full-screen mod…...
网络安全技术详解:虚拟专用网络(VPN) 安全信息与事件管理(SIEM)
虚拟专用网络(VPN)详细介绍 虚拟专用网络(VPN)通过在公共网络上创建加密连接来保护数据传输的安全性和隐私性。 工作原理 VPN的工作原理涉及建立安全隧道和数据加密: 隧道协议:使用协议如PPTP、L2TP/IP…...
v-model 根据后端接口返回的数据动态地确定要绑定的变量
在 Vue 中,v-model 是用于创建双向绑定的指令。通常,它用于与组件或表单元素的值进行绑定。但有时你可能需要根据后端接口返回的数据动态地确定要绑定的变量。 你可以通过以下步骤来实现这个需求: 步骤 1: 获取后端接口数据 首先ÿ…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
