Ubuntu18.04.6本地部署PaddleSpeech实验代码(CPU版)

news2024/7/4 5:04:35

前言

        因为本人不是搞python和AI的,所以部署这个项目是耗时耗力,本地部署还是挺麻烦的,发现了很多问题,关键就是权限和源代码路径问题,经历了14天(大部分时间扔在做系统,装环境,代码阅读上了),尝试了很多种方式方法,系统安装了不知道多少遍,才本地部署成功,记录下过程中出现的问题,和最合理的安装流程,方便以后的二次开发。

落地的就是这个试验了,里面包含了训练、合成,项目传送门:【有手就行】使用你自己的声音做语音合成 - 飞桨AI Studio

系统选择

Windows Server 2012 R2、Centos7.6、Ubuntu18.0.4,官方的建议是使用Linux系统。

1.Windows Server 2012 R2

        Windows,安装环境等过程都是很顺利的,但是最后还是失败了,主要是MFA的环境问题和MFA相关的程序对现有环境使用的问题,都不是从面上能轻易解决的,所以最后还是放弃了。

2.Centos7.6

        这是我最早使用的部署系统,使用了Docker和直接安装两种方式,也失败了,但是后来在ubuntu解决问题的过程中,也发现Centos出现的问题也是可以解决的,所以等有空了,我会在尝试一次在Centos中部署下,并制作成Docker。

3.Ubuntu18.04.6

        选用18版本,就是考虑兼容的问题,而且我用的是桌面版,因为在语音合成项目中使用了streamlit进行发布,桌面版可以使用浏览器直接本地访问,不用在其他电脑上打开网页,桌面版还可以打开很多工具,比如性能监控、系统备份(用于制作镜像备用)等等。

本地部署成功案例截图

前端截图

 这是在执行微调训练成功的后台打印输出截图

 这是音频合成的后台输出截图

环境安装

一、下载Ubuntu18.04.6

Ubuntu 18.04.6 LTS (Bionic Beaver)

我使用的是英文版的,中文补丁自行百度吧。英文版的用起来其实更方便。

在安装的时候有个用户名,我填写的ajb(本人名字拼音缩写而已)后续会有很多地方用到。

二、进入桌面系统

这里注意下,Ubuntu的默认root密码是随机的,所以,要进入ROOT模式还需要执行以下命令

sudo passwd root

重新设置下root的密码,后续的所有操作要使用root用户来执行,否则会出现权限问题,非常难解决,就是因为一开始没使用root权限,出现的问题千奇百怪,总结下来就是因为权限不足导致的。

再执行:

su root

输入刚才设置的密码,就可以登录到ROOT模式了。

三、安装环境的准备

        注:之前我用了Anaconda来管理应用环境,但也因为权限的问题部署失败了,也是我对系统了解有点一知半解了,所以在这里放弃使用了Anaconda。直接在系统上安装环境。

修改下载源

#更换到清华源上,原来的较慢
 
找到/etc/apt/sources.list进行一下备份: sudo cp /etc/apt/sources.list /etc/apt/sources_init.list
vim /etc/apt/sources.list 写入阿里源
 
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
 
#再执行
sudo apt-get update
sudo apt-get -f install
sudo apt-get upgrade

执行 sudo apt-get update 可能出现的问题:
有可能会遇到“由于没有公钥,无法验证下列签名:NO_PUBKEY 3B4FE6ACC0B21F32”提示报错,经过谷歌发现是密钥的问题,这时需要执行

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32

注意提示的密钥和你上述命令中的密钥是一样的,每个人的电脑都不一样
在这里插入图片描述加速部分出处:解决ubuntu apt-get下载慢问题 

四、安装基础环境

        Ubuntu18默认是默认安装Python3.6的,输入 命令:python3会有提示。python默认是没有被使用的。但是本次安装中,我们使用的是命令:python3.9,也不会占用默认python。也就是说互不干扰吧。

步骤开始:

1.安装构建工具

sudo apt-get install build-essential libssl-dev libffi-dev python3-dev

2.安装相关依赖包(逐一执行)都是必须安装的,否则后期还要补

sudo apt-get install gcc make zlib1g-dev

sudo apt-get install libbz2-dev

sudo apt-get install libsqlite3-dev

sudo apt-get install python3-dev libxml2-dev libffi-dev libssl-dev libxslt1-dev

3.python3.9.12安装

#先切换目录
cd /home

#下载
wget https://cdn.npm.taobao.org/dist/python/3.9.12/Python-3.9.12.tgz

#解压
tar -xf Python-3.9.12.tgz

#切换到源码目录
cd Python-3.9.12

#编译指令
./configure --enable-optimizations

#-j8参数表示使用8个线程同时编译源代码,可以根据自己的电脑配置进行调整。
make -j8

#安装 altinstall命令会在系统中安装Python 3.9.12,而不会覆盖系统默认的Python版本
sudo make altinstall

#检查Python版本:在终端中运行以下命令检查Python版本:
python3.9 -V

五、安装PaddlePaddle

以下所有的pip安装都会加上 python3.9 -m,不会安错地方。

我这里选择的是CPU版。

python3.9 -m pip install paddlepaddle==2.4.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

如果提醒pip版本需要更新,则执行:

python3.9 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip

这里基本不会出现什么问题,无论是windows还是linux都会很流畅的就完成了。

六、安装PaddleSpeech

1.安装中会出现kaldiio安转出错的问题,建议首先安装pytest-runner

python3.9 -m pip install pytest-runner -i https://pypi.tuna.tsinghua.edu.cn/simple

2.安装PaddleSpeech

python3.9 -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

3.安装streamlit,运行页面使用

python3.9 -m pip install streamlit -i https://pypi.tuna.tsinghua.edu.cn/simple

4.安装ffmpeg,在试验中的第二步(检验数据)需要用到

sudo apt-get install ffmpeg

七、下载代码

1.项目传送门:【有手就行】使用你自己的声音做语音合成 - 飞桨AI Studio

2.启动项目,并进入

 3.选择性下载

文件说明(自己研究的,不对请指正): 

inference:目录(空的),用于存放自己生成的训练模型,进行合成用。

nltk_data:让程序自动下载会很慢,而且有可能下载不全,执行程序的时候会出现bad zip file的错误。将整个目录放到 ubuntu用户(登录root,就放到root下)的目录下,比如:我的是放到了/root/nltk_data。root登录到控制台,可以执行下面的拷贝命令:

cp -r /home/ajb/aistudio/nltk_data/ /root/

PaddleSpeech:工具包、源码、一大堆都在这里。

util:此项目的一些处理代码。

env.sh:项目的自动环境配置脚本,跑一遍是必要的,而且要给权限去跑,还要修改相关的路径。

#权限
cd /home/ajb/aisdudio
sudo chmod 777 ./env.sh
# 安装 PaddleSpeech
if [ ! -d "/home/ajb/aistudio/PaddleSpeech" ];then
    # PaddleSpeech 不存在
    echo "PaddleSpeech 不存在,从bos下载PaddleSpeech"
    cd /home/ajb/aistudio \
    && wget https://paddlespeech.bj.bcebos.com/demos/speech_web/PaddleSpeech.zip \
    && unzip PaddleSpeech.zip \
    && rm PaddleSpeech.zip
else
    echo "PaddleSpeech exits"
fi
 
# 下载 nltk 依赖
if [ ! -d "/home/ajb/aistudio/nltk_data" ];then
    echo "nltk_data 不存在,从bos下载 nltk_data"
    cd /home/ajb/aistudio \
    && wget https://paddlespeech.bj.bcebos.com/Parakeet/tools/nltk_data.tar.gz \
    && tar zxvf nltk_data.tar.gz \
    && rm nltk_data.tar.gz
else
    echo "nltk_data exits"
fi
 
# 删除死链
find -L /home/ajb/aistudio -type l -delete
 
# pip 安装依赖库
cd /home/ajb/aistudio/PaddleSpeech \
&& pip install pytest-runner -i https://mirror.baidu.com/pypi/simple \
&& pip install . -i https://mirror.baidu.com/pypi/simple \
&& pip install paddlespeech-ctcdecoders -i https://mirror.baidu.com/pypi/simple \
&& pip install uvicorn==0.18.3 -i https://mirror.baidu.com/pypi/simple
 
# 下载预训练模型
if [ ! -d "/home/ajb/aistudio/.paddlespeech/models" ];then
    if [ -f "/home/ajb/aistudio/data/data180142/paddlespeech_env.zip" ];then
        # 存在挂载数据集
        echo "36 存在挂载环境,复制环境数据"
        cd /home/ajb/aistudio/data/data180142 \
        && unzip paddlespeech_env.zip \
        && mkdir -p /home/ajb/aistudio/.paddlespeech \
        && mv conf /home/ajb/aistudio/.paddlespeech \
        && mv datasets /home/ajb/aistudio/.paddlespeech \
        && mv models /home/ajb/aistudio/.paddlespeech
    else
        # 不存在挂载数据集
        echo "不存在挂载环境,从bos下载 .paddlespeech 预训练模型"
        paddlespeech tts --input "你好,欢迎使用百度飞桨深度学习框架!" --output output.wav \
        && paddlespeech asr --lang zh --input output.wav --yes \
        && rm output.wav
    fi
else
    echo "paddlespeech 预训练模型已下载"
fi
 
 
# 配置 MFA 环境
if [ ! -d "/home/ajb/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3/tools" ];then
    echo "开始配置 tools 环境"
    cd /home/ajb/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3 \
    && mkdir -p tools/aligner \
    && cd tools \
    && cp /home/ajb/aistudio/montreal-forced-aligner_linux.tar.gz ./ \
    && tar xvf montreal-forced-aligner_linux.tar.gz \
    && cd montreal-forced-aligner/lib \
    && ln -snf libpython3.6m.so.1.0 libpython3.6m.so \
    && cd /home/ajb/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3/tools/aligner \
    && wget https://paddlespeech.bj.bcebos.com/MFA/ernie_sat/aishell3_model.zip \
    && wget https://paddlespeech.bj.bcebos.com/MFA/AISHELL-3/with_tone/simple.lexicon \
    && unzip aishell3_model.zip
else
	echo "第二次开始配置 tools 环境"
    cd /home/ajb/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3 \
    && mkdir -p tools/aligner \
    && cd tools \
    && cp /home/ajb/aistudio/montreal-forced-aligner_linux.tar.gz ./ \
    && tar xvf montreal-forced-aligner_linux.tar.gz \
    && cd montreal-forced-aligner/lib \
    && ln -snf libpython3.6m.so.1.0 libpython3.6m.so \
    && cd /home/ajb/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3/tools/aligner \
    && wget https://paddlespeech.bj.bcebos.com/MFA/ernie_sat/aishell3_model.zip \
    && wget https://paddlespeech.bj.bcebos.com/MFA/AISHELL-3/with_tone/simple.lexicon \
    && unzip aishell3_model.zip
    echo "MFA 环境已存在"
fi
 
# 下载微调需要的训练模型
if [ ! -d "/home/ajb/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3/models" ];then
    if [ -f "/home/ajb/aistudio/data/data180142/models.zip" ];then
        # 存在挂载数据集
        echo "74 存在挂载环境,复制环境数据"
        cd /home/ajb/aistudio/data/data180142 \
        && unzip models.zip \
        && mkdir -p /home/ajb/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3/models \
        && mv fastspeech2_mix_ckpt_1.2.0 /home/ajb/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3/models \
        && mv hifigan_aishell3_static_1.1.0 /home/ajb/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3/models \
        && mv pwgan_aishell3_static_1.1.0 /home/ajb/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3/models \
        && mv wavernn_csmsc_static_0.2.0 /home/ajb/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3/models
    else
        # 未挂载数据集
        echo "不存在挂载环境,从bos下载微调模型"
        cd /home/ajb/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3 \
        && mkdir models \
        && cd models \
        && wget https://paddlespeech.bj.bcebos.com/t2s/chinse_english_mixed/models/fastspeech2_mix_ckpt_1.2.0.zip \
        && unzip fastspeech2_mix_ckpt_1.2.0.zip \
        && wget https://paddlespeech.bj.bcebos.com/Parakeet/released_models/pwgan/pwgan_aishell3_static_1.1.0.zip \
        && unzip pwgan_aishell3_static_1.1.0.zip \
        && wget https://paddlespeech.bj.bcebos.com/Parakeet/released_models/hifigan/hifigan_aishell3_static_1.1.0.zip \
        && unzip hifigan_aishell3_static_1.1.0.zip \
        && wget https://paddlespeech.bj.bcebos.com/Parakeet/released_models/wavernn/wavernn_csmsc_static_0.2.0.zip \
        && unzip wavernn_csmsc_static_0.2.0.zip
    fi
else
    echo "预训练模型下载完成"
fi

fun_exp1.streamlit.py:趣味实验室:帧级别控制

montreal-forced-aligner_linux.tar.gz:对准器压缩包,会被程序自动安装

untitled.streamlit.py:这就是主程序了,在我的项目中,我改了名字叫SpeechMain.py

work:程序执行后,放置生成的模型、音频等等。。。默认是空的,后续如果没有在此文件夹下生成任何文件,那就是程序的权限问题。我在这个问题上纠结了很久。

4.拷贝代码

        拷贝到/home/ajb/aistudio目录下面,用登录桌面的普通用户拷贝也可以,后面我们是用的root用户来访问他们的。

桌面查看:

 命令行查看:

 八、运行,解决问题

        先说,我部署的时候是一个干净的项目,对照aistudio云实验室来一步一步的排除问题,尤其经常碰到no such file or directory 这种情况,就是因为没有写入成功。所以说,运行失败的大部分原因是因为权限和路径。

先解决路径问题,需要修改的文件我列在下面:

修改路径

SpeechMain.py,请自行搜索/home/aistudio ,一定要改成自己的项目目录。

util/get_mfa_result.py,同上

 util/check_oov.py

util/generate_duration.py

 util/finetuneTTS.py,这个文件重点说下,不光光是我图中标示的,其他位置也有,自己搜索。

还有就是 文件里有相关python的命令行,需要修改

 这个文件里有很多这样的地方,原文是 python3 /home/aistudio/xxxxxxxx,但是我们python3可是系统自己带的python3.6啊,而且没安装相关插件环境,不出错才怪呢,路径也不对,自行搜索修改吧,不多。

 改完这些再去执行启动吧,有很多问题自然就消失了,下面是启动后的一些大概率出现的问题。

执行启动

streamlit run SpeechMain.py

问题:./evn.sh的时候,出现git错误,要处理,有环境要下载

解决:sudo apt-get install git

问题:[nltk_data] Downloading package averaged_perceptron_tagger to
[nltk_data]     /root/nltk_data...   卡在这里

解决:

把aistudio项目里的直接下载或者复制过去,我是复制过去的。

cp -r /home/ajb/aistudio/nltk_data/ /root/

问题:zipfile.BadZipFile: File is not a zip file

解决:cp -r /home/ajb/aistudio/nltk_data/ /root/

问题:AttributeError: module 'numpy' has no attribute 'complex'.

解决:numpy版本高了,降低下

python3.9 -m pip install numpy==1.21.6 -i https://pypi.tuna.tsinghua.edu.cn/simple

问题:

File "/home/sysadmin/.local/lib/python3.9/site-packages/paddlespeech/t2s/datasets/data_table.py", line 45, in __init__

assert len(data) > 0, "This dataset has no examples"

AssertionError: This dataset has no examples

解决:计算MFCC时的问题: 向 aishell3 里添加自己的音频数据进行训练 · Issue #2319 · PaddlePaddle/PaddleSpeech · GitHub

删除原有libopenblas,重新安装

rm /home/ajb/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3/tools/montreal-forced-aligner/lib/thirdparty/bin/libopenblas.so.0

sudo apt-get install libopenbals

问题:这个问题和上一个是相关联的

Traceback (most recent call last):

File "/home/sysadmin/aistudio/util/extract_feature.py", line 350, in <module>

extract_feature(

File "/home/sysadmin/aistudio/util/extract_feature.py", line 224, in extract_feature

sentences, vocab_phones, vocab_speaker = get_map(

File "/home/sysadmin/aistudio/util/extract_feature.py", line 75, in get_map

sentences, speaker_set = get_phn_dur(duration_file)

File "/home/sysadmin/.local/lib/python3.9/site-packages/paddlespeech/t2s/datasets/preprocess_utils.py", line 26, in get_phn_dur

f = open(file_name, 'r')

FileNotFoundError: [Errno 2] No such file or directory: './durations.txt'

解决:

#这是一段网上的解决办法
打开/home/sysadmin/.local/lib/python3.9/site-packages/paddlespeech/t2s/datasets/preprocess_utils.py修改第26行代码,with_open(加上str即可。

#其中:/home/sysadmin/.local 这个目录 对应的应该是我们的/root/local,因为我们用的是root用户
#这样是没办法解决根本问题的。

#解决办法在这里
#只要删除'r'这个参数就可以了,在python2.6之后,为了避免程序员的错误,可以不写第二个参数

#原作者这个处理办法 只能生效一次,而且不会完成目录和文件的写任务,项目文件夹里不会生成任何东西,也会卡住项目。
#前面的 删除so和安装libopenblas还是要作的。

问题:导出模型时,报错:FileNotFoundError: [Errno 2] No such file or directory: '/home/sysadmin/aistudio/work/exp_demo/dump/speaker_id_map.txt'

解决:代码问题,这就是上一步那个open函数导致的,再一个就是权限问题了,要用root用户。

就到这里了,解决了重要的问题,如果有其他问题可以留言。

最后感谢 蜉蝣的     Ubuntu系统本地搭建百度飞浆语音合成 - 知乎 一问中的诸多解决办法。

可以参考我对上文的转载和备注修改 (转载)Ubuntu系统本地搭建百度飞浆语音合成(修正原作者处理过程中的不当之处,但是非常感谢原作者,所有问题都解决了)_My的梦想已实现的博客-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数学建模】常微分方程

常微分方程 博客园解释 https://www.cnblogs.com/docnan/p/8126460.html https://www.cnblogs.com/hanxi/archive/2011/12/02/2272597.html https://www.cnblogs.com/b0ttle/p/ODEaid.html matlab求解常微分方程 https://www.cnblogs.com/xxfx/p/12460628.html https://www.cn…

使用FreeMarker生成word文件自定义每页页眉或页脚

最新工作中遇到生成word中表格时&#xff0c;要求文档中每页头部和底部都是固定格式的表格&#xff0c;但是内容不一样&#xff0c;头部信息在word中画样式的时候就可以设置为“在各页顶端以标题形式重复出现”&#xff0c;而底部就没有办法这样设置了&#xff0c;之后就想着在…

【GPT模型】遥感云大数据在灾害、水体与湿地领域中的应用

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

TypeScript 中【class类】与 【 接口 Interfaces】的联合使用解读

导读&#xff1a; 前面章节&#xff0c;我们讲到过 接口&#xff08;Interface&#xff09;可以用于对「对象的形状&#xff08;Shape&#xff09;」进行描述。 本章节主要介绍接口的另一个用途&#xff0c;对类的一部分行为进行抽象。 类配合实现接口 实现&#xff08;impleme…

为什么Mate X3手机屏幕有水也不影响操作?

我知道现在的手机大多都防水&#xff0c;但没想到连折叠屏手机Mate X3在湿水状态下都丝毫不影响操作&#xff0c;现在的华为手机防水都做到这种程度了&#xff1f; 众所周知&#xff0c;如果手机屏幕上有水珠&#xff0c;那么手机的触屏就会变得飘忽不定。 这种“飘忽不定”是…

局域网聊天软件都有哪些?几款常用的局域网聊天软件推荐

随着科技的不断发展&#xff0c;人们在日常生活和工作中越来越需要高效便捷的沟通工具。而局域网聊天软件就是一种在局域网内使用的聊天工具&#xff0c;它能够帮助用户在同一网络内的设备之间进行即时通讯&#xff0c;无需依赖于互联网连接&#xff0c;安全又可靠。下面将为大…

学无止境·MySQL⑥(数据库备份和还原)

数据库备份和还原 备份和还原练习1、创建库和表2、使用mysqldump命令备份数据库中的所有表3、备份booksDB数据库中的books表4、使用mysqldump备份booksDB和test数据库5、使用mysqldump备份服务器中的所有数据库6、使用mysql命令还原第二题导出的book表7、进入数据库使用source命…

“快速批量去除文件夹名称中多余重复文字!轻松实现文件夹改名优化,提升整理效率!“

在日常的电脑使用中&#xff0c;我们常常面临着大量的文件和文件夹需要整理&#xff0c;而其中一个常见的问题就是文件夹名称中存在重复的文字&#xff0c;让整个文件夹结构变得混乱而不易管理。为了解决这一问题&#xff0c;我们自豪地推出了全新的文件夹改名工具&#xff0c;…

华为配置LLDP基本功能

华为配置LLDP基本功能 1.什么是lldp协议 定义 LLDP(Link Layer Discovery Protocol)是IEEE 802.1ab中定义的链路层发现协议。LLDP是一种标准的二层发现方式,可以将本端设备的管理地址、设备标识、接口标识等信息组织起来,并发布给自己的邻居设备,邻居设备收到这些信息后将…

产品新升级!MODBUS/SNMP智能协议转换器

“MODBUS TCP”是一种基于 TCP协议的工业控制设备通信协议&#xff0c;其主要功能是实现现场设备的远程控制。MODBUS TCP采用远程通讯的方式&#xff0c;通过 IP网络进行数据传输&#xff0c;因此其传输速率更快、网络负载更小、灵活性更高。 “ SNMP”是一种用于网络管理的…

如何考过PMP? 备考经历分享

考PMP的目的 周围很多同事、朋友都在学习PMP课程或者已获得证书&#xff0c;在日常工作中发现有些词语已经听不懂&#xff0c;比如项目集、项目组合&#xff0c;比如PM等&#xff0c;为了提升自己也为了能在侃大山时也能参与其中脱离“一清二白”的状态&#xff0c;所以下定决…

0基础学习云计算难吗?

很多人经常会问云计算是什么&#xff1f;云计算能干什么&#xff1f;学习云计算能做什么工作&#xff1f;其实我们有很多人并不知道云计算是什么&#xff0c;小知今天来给大家讲讲学习云计算能做什么。 中国的云计算行业目前正处于快速发展阶段&#xff0c;随着互联网和数字化…

SpringBoot 异常处理机制

SpringBoot中异常处理的流程图 在SpringBoot项目中&#xff0c;如果业务逻辑发生了异常&#xff0c;则首先看发生异常的类中有没有ExceptionHandle能处理&#xff0c;如果能&#xff0c;则执行方法进行处理&#xff0c;如果没有&#xff0c;则去找全局的ControllerAdvice注解…

X2000 Linux 调试VL53L4CD驱动

由于VL53L4CD具有更高的精度&#xff0c;更低的功耗&#xff0c;所以尝试将VL53L4CD移植到X2000上进行测试。 一、下载驱动 en.VL53L4CD_LinuxDriver 二、SDK中加入驱动 1、加入源码 在\module_driver\devices下创建VL53L4CD文件夹&#xff0c;再将\en.VL53L4CD_LinuxDriver…

Cyclo(Ile-Leu),91741-17-2,环(异亮氨酸-亮氨酸)二肽,可以根据实验需求定制

&#xff08;文章资料汇总来源于&#xff1a;陕西新研博美生物科技有限公司小编MISSwu&#xff09;​ Cyclo(Ile-Leu)&#xff0c;DL-isoleucyl-leucyl anhydride&#xff0c;环(异亮氨酸-亮氨酸)二肽&#xff0c;DL异亮氨酸酰酐 产品结构式&#xff1a; 产品规格&#xff1a;…

10.2.5 【Linux】变量的有效范围

在学理方面&#xff0c;为什么环境变量的数据可以被子程序所引用呢&#xff1f;这是因为内存配置的关系&#xff01;理论上是这样的&#xff1a; 当启动一个 shell&#xff0c;操作系统会分配一记忆区块给 shell 使用&#xff0c;此内存内之变量可让子程序取用 若在父程序利用…

从User-Agent获取浏览器类型

一、User-Agent User-Agent首部包含一个特征字符串&#xff0c;用来让网络协议的对端来识别发起请求的用户代理软件的应用类型、操作系统、软件开发商以及版本号。 二、从User-Agent中获取浏览器类型 1、通过自己编写js代码识别UA字符串中的浏览器类型 function getBrowser…

MobPush 工作台操作指南:查看推送数据

推送概况查询 进入“MobPush”的"概况"模块&#xff0c;查询推送整体的概况 推送详情查询 进入“MobPush”的"推送记录"模块 点击“详情”按钮&#xff0c;查看推送详情情况

请求响应-json参数的接收

JSON参数 JSON参数&#xff1a;JSON数据键名与形参对象属性名&#xff08;即实体类中的成员变量&#xff09;相同&#xff0c;定义POJO实体类即可接收参数&#xff0c;需要使用RequestBody标识前端发送JSON格式的数据&#xff0c;要使用POST方法发送请求&#xff0c;因为JSON格…

SpringBoot 项目使用 Elasticsearch 对 Word、Pdf 等文档内容的检索

本文参考自&#xff1a;https://blog.csdn.net/Q54665642ljf/article/details/127701719 本文适用于elasticsearch入门小白&#xff0c;还请大佬能指出我的不足&#xff08;本人其实也是刚学elasticsearch没多久&#xff09; 文章目录 一、准备工作1.1 安装ES文本抽取插件1.2 …