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

Kaldi的简单介绍和基本使用说明

Kaldi的简单介绍和基本使用说明

    • 前言
    • 一、ASR简介
      • 1.语音识别系统
        • 特征提取:
        • 声学模型
        • 发音词典
        • 语言模型
        • 语音解码
      • 2. ASR项目
    • 二、Kaldi简介
    • 三、Kaldi项目的结构
    • 四、Kaldi的安装
      • 1. 安装依赖的几个系统开发库
      • 2. 安装依赖的第三方工具库
      • 3. 编译Kaldi代码
        • 配置Kaldi
        • 编译Kaldi
    • 五、Kaldi的使用
      • 1. 训练模型
        • 模型训练前的准备工作
        • 训练模型
        • 模型训练过程(run.sh)概述
      • 2. 搭建语音识别系统

前言

Kaldi是目前最流行的ASR(自动语音识别技术)开源项目之一,已被众多商用的语言识别系统使用。自从2019年Kaldi最主要的开发维护者,被称为Kaldi之父的Daniel Povey加入小米,出任小米集团语音首席科学家后,更加提升了小米的智能语音产品,并且小米也承诺会继续坚持自己纯粹、极致的开源文化,继续不断地加大对Kaldi的投入,持续为Kaldi社区做贡献。
虽然近些年随着神经网络技术的广泛应用,端到端的语音识别技术也随之兴起流行了起来,但也并不意味着Kaldi就要被淘汰了。目前比较流行的端到端开源项目espnet也融合了kaldi的数据处理工具,而且Daniel已经在小米组建团队研发新一代Kaldi(支持端到端),并且已经成功开发,正式发布了。

新一代kaodi项目的相关链接:
1. 核心算法库k2 
(https://github.com/k2-fsa/k2)
2. 通用语音数据处理工具包Lhotse
(https://github.com/lhotse-speech/lhotse)
3. 语音识别完整解决方案Icefall
(https://github.com/k2-fsa/icefall)
有兴趣的朋友可以去看看。

Daniel认为,从现有端到端语音识别模型的流行和准确率的逐步提升,到PyTorch、TensorFlow等易用的深度学习工具包的普及,开发新一代Kaldi已势如破竹。但新一代Kaldi的目标不仅仅是赶上或者稍微领先这些语音识别库,而是要根本地改变语音识别的实现方式。

新一代Kaldi已经面世,并且生命力强劲,但下面要介绍的还是传统的基于HMM的语音识别和老的Kaldi项目。

一、ASR简介

ASR(Automatic Speech Recognition)自动语音识别技术,是一种将人的语音转换为文本的技术。ASR是属于自然语言处理(NLP,Natural Language Processing) 的一个应用领域,而输入法(Input Method)、机器翻译(Machine translation)、语音合成(Speech synthesis)等技术也属于NLP的范畴。站在NLP的角度看,这些技术之间有很多相通性,学好一个,对其他的理解和掌握也有帮助。

1.语音识别系统

语音识别,顾名思义,是要把人的声音转化成文本,目标是在给定声音的前提下找到最有可能的文本序列。语音识别系统的结构可以用图1.1表示:

在这里插入图片描述

                               图 1.1 语音识别系统结构图

从图1.1中可以看出,语音识别系统总共有模型训练语音识别两个过程,包含了特征提取声学模型发音词典语言模型语音解码五个部分。

  • 其中模型训练是语音识别系统的核心工作,单这个过程就包含了图中的全部五个部分(模型训练完成后会用这个模型给语音库中的测试语音解码,然后打分,用误码率的指标来评估模型的识别率)。
  • 语音识别的过程和给模型打分的过程差不多,基本可以认为就是把测试语音文件换成了实际输入的音频。

下面来简单说明一下上面提到的五个部分:

特征提取:

 不管是语音库中的音频文件还是通过mic输入的音频都是声学信号。声学信号只是根据时间变化的震动波的数字化数据。单从波形看输入的音频根本就没有完全相同的,每个音频都差别很大。但是,根据我们的实践,我们能识别出不同音频的内容,很清楚相同内容的音频之间有相同的特征,所以我们要把这些能分辨的特征从声学参数上体现出来,这就是这里要提到的**声学特征提取**。**声学特征提取**不管是从**时域、频域转换**还是**频谱分析**都牵涉到很多数学、信号处理等学科的专业知识,没有基础的话很难看明白,所以我们可以先了解这里面用到的技术方法名称,感兴趣的可以下去深入学习(包括之后的各部分都是这样)。目前语音识别系统常用的声学特征有:**梅尔频率倒谱系数(MFCC)、感知线性预测(PLP)、Fbank(Filter-bank)** 等。其中MFCC是相对用的比较多的,Fbank是不做DCT(离散余弦变换)的MFCC。一般经过MFCC等的特征提取后还要经过**CMVN**(Cepstral Mean and Variance Normalization,倒谱均值方差归一化)处理,以确保各个特征参数形式一致,特征参数形式不一致就不好比较,在检索匹配特征时会很麻烦。

声学模型

 有了声学特征后就要对这些特征进行建模,建模后就相当于一个音频可以用一个函数或公式来描述了,这样想要的结果就通过运算来得到,所以你会发现每一种ASR系统都会用到线性代数库工具。声学模型早期多使用**DTW(Dynamic Time Warping,动态时间规整)**,现在多使用**HMM(Hidden Markov Model,隐马尔可夫模型)**。声学模型训练常使用**GMM(Gaussian mixture model,高斯混合模型)**,随着神经网络算法的兴起**DNN(Deep Neural Networks,深度神经网络)**慢慢成了主流。不过GMM也没有完全废弃,一般的声学模型训练过程还是要先进行**单音素(mono-phone)**的**GMM**训练,接着是**三音素(Triphone)**的**GMM**训练,之后是在此基础之上的**三音素DNN**训练。三音素的GMM训练和DNN训练一般都会迭代好多次,虽然每次迭代后的模型都可以使用,但是一般迭代的次数越多模型越理想。

发音词典

一般是字或词 和 其发言音素的对照表文件,一般形如:

    SIL sil<SPOKEN_NOISE> sil啊 aa a1啊 aa a2啊 aa a4啊 aa a5啊啊啊 aa a2 aa a2 aa a2啊啊啊 aa a5 aa a5 aa a5阿 aa a1阿 ee e1阿尔 aa a1 ee er3阿根廷 aa a1 g en1 t ing2阿九 aa a1 j iu3... ...... ...坐诊 z uo4 zh en3坐庄 z uo4 zh uang1坐姿 z uo4 z iy1座充 z uo4 ch ong1座驾 z uo4 j ia4

的文本文件。这个文件相对容易制作和获取,只是要特别注意的是,原始发音词典中有一些同音的字词,这个在建立发音词典模型时要特别处理。

语言模型

是从语言学或者说是语法的角度来处理的,不过这里的语言模型并不是通过显式的规定语法规则而是通过统计模型来建模的。比较常用的是用N-gram语言模型。
N-gram模型由于其简单有效,在语音识别中得到了广泛的应用。其目标为计算字符串ω作为一个句子出现的概率P(ω)。解码时会查找匹配出现概率最高的词序组合。
语言模型一般是使用N-gram工具对各种书籍、网页、报刊、新闻等资源的文本信息进行训练的,一般资源越多越好训练出的模型越理想。

语音解码

前面训练出的声学模型、发音词典模型、语言模型基本都可以认为是图的数据结构,解码的本质就是在图的网络中寻找最优路径。

为了加速解码识别效率又引入了WFST(Weighted Finite State Transducer,带权重的有限状态转换器)解码机制,这样可以把动态知识源提取编译好,形成静态网络,在解码时直接调用。从输入HMM状态序列,直接得到词序列及其相关得分。
现在的解码基本上都是基于WFST的,所以前面训练声学模型、发音词典模型、语言模型的时候也都是基于WFST构建的。基于WFST的模型的构建过程称为HCLG过程,也就是用H、C、L、G分别表示上述HMM模型、三音子模型、字典和语言模型的WFST形式。

在这里插入图片描述
整个过程会生产相应的H.fst、C.fst、L.fst、G.fst:

  • G.fst对应语言模型,用来描述词与词之间组合的可能性。
  • L.fst对应发音词典,实现单音子到词的转换。
  • C.fst描述音素上下文关系的转换,一般是三音子到单音子的转换。
  • H.fst表示HMM的转换关系。

最终这4个fst会合并成HCLG.fst的WFST。

一般HCLG网络构建的流程如下:
在这里插入图片描述
上面的过程是个静态的解码过程,由于静态网络已经把搜索空间全部展开,它只需要根据节点间的转移权重计算声学概率和累计概率即可,因此解码速度非常快。
用的比较多静态解码的有:

  • 基于WFST的Viterbi静态解码
  • 基于WFST的Lattice静态解码
    其中Viterbi解码识别只保留一条最优路径,若要保存多种候选识别结果,就需要Lattice(因为不能保证viterbi给的最优路径就是真正的对的路径,错误的路径一样可能成为viterbi算法跑出来的最优路径)。

基于静态图HCLG解码的一些问题:

  • 静态图HCLG自身占用空间大,难以使用大的语言模型,其在解码运行过程中占用内存也大,难以在移动端直接使用HCLG。
  • 静态图HCLG构建过程速度慢,消耗内存高。

就相应的有动态解码:
on-the-fly Composition;
Rescoring(常规Rescoring、on-the-fly Rescoring)。

  • on-the-fly Composition动态解码思路是把HCLG分开成HCL和G,称之为HCL/G。构图时分别构建HCL和G,分别构建的HCL和G。因为不是完全展开的图,这两个图的大小远比其展开的静态图HCLG小,这样就节省了空间。另一方面无需再进行HCL和G的Compose这一过程,而这一步恰恰是静态图HCLG构建过程中最为耗时的一步,所以又节省了构图时间。在解码时,分别加载HCL和G,然后根据解码动态的对HCL和G进行按需动态Compose,而无需完全Compose展开。
    虽然在节省了构图时间和图的空间,但是动态图HCL/G要在解码时动态的做Compose,也就加大了解码时的计算量,所以解码速度会相对降低。
  • Rescoring,其思路是在构建时使用小的LM1构建G1,使用G1构建静态图HCLG1,然后使用小的LM1和大的LM2构建G2(G2中LM的weight为LM2的weight减去LM1的weight)。解码时根据HCLG1和G2的使用方式,又可以做进一步细分:
    1)常规Rescoring:利用HCLG1先全部解码,生成lattice或者nbest,然后在G2上做lattice和nbest的Rescoring。
    2)on-the-fly Rescoring:使用HCLG1做解码,在解码过程中,每当解码出word时,立即再加上G2中的LM weight,所以称之为on-the-fly Rescoring。Kaldi中的BigLM Decoder即为on-the-fly Rescoring。

实际应用中常常搭建ASR online服务器,供需要语音识别的终端访问,一般服务器资源都比较丰富,所以可以不用担心构图的时间和静态图的大小,而且访问量大,解码效率更为重要,所以基于WFST的Lattice静态解码更为常用。
至于移动终端直接部署ASR的需求,有很多专门的嵌入式离线语音识别方案更为实用。

2. ASR项目

ASR比较流行的项目有早期的HTK、多年来的Kaldi和近年的netesp。
HTK是非常成熟的项目,相关工具、文档等资料都比较完善,而且至今仍在被使用。
Kaldi继承了HTK的很多优点,又做了很多改善,虽然已被广泛使用但是官方资料不够完善。
netesp是端到端语音识别技术中比较流行的一个,发展迅速,广受欢迎。

虽然端到端语音识别是未来语音识别系统非常有前途的发展方向,netesp也很火热,但这里还是选择了Kaldi,Kaldi作为一个优秀的传统语音识别项目,涵盖了语音识别的完整过程,对理解和掌握语音识别有很大帮助,并且其开放的精神,模块化、工具化的特点、降低耦合性,方便用户使用的理念很吸引人。另外Kaldi使用c++开发,不仅主项目开源而且项目使用到的第三方库也都是开源的或者有开源的选项,这样不仅可以方便深入学习Kaodi的实现,而且还可以根据需要来修改扩展,方便为各个平台上移植部署。
至于Kaldi的官方资料不够完善的问题,HTK的丰富资料也都是可以拿来参考(很多技术理论是相同的,而且Kaldi也提供了兼容HTK项目的工具),而且Dan Povey的个人主页 上也有很多资料,众多的Kaldi参与者和使用者也做出了很多贡献。

二、Kaldi简介

关于Kaldi的介绍在官方文档(或者翻译的中文文档)中有更多的描述,这里就不完全照着写了。

  • Kaldi是一个用C + +编写的语音识别工具包,在Apache License v2.0(最自由的开源协议)下授权使用。Kaldi旨在供语音识别研究人员使用(而非普通用户)。

  • Kaldi的目标和HTK类似,它提供了现代和灵活的代码,使用C++实现,容易修改和扩展。

  • Kaldi使用OpenFST作为WFST工具,直接把OpenFST的源码作为一个库编译了进来。(而不是脚本的方式集成)。

  • Kaldi提供了广泛的线性代数支持,包括封装了标准BLAS和LAPACK库的矩阵库,默认使用Intel的MKL(Math Kernel Library),也支持openblas等开源库。

  • Kaldi依赖的如SPHERE音频文件转换工具(sph2pipe)、scoring工具(sctk)、N-gram语言模型工具(srilm或irstlm)等工具和库也都是直接使用源码来构建。

  • 尽量避免把简单问题复杂化
    Kaldi提供的算法会尽量的简单通用,提功能的每个工具只完成特定的功能。

  • 各个模块尽量松耦合。这就意味着一个头文件需要include的头文件尽可能少。比如矩阵库,它只依赖于下面的子目录而完全不依赖其它部分,因此它可以独立于Kaldi的其它部分被使用(比如把它当成一个普通的和Kaldi完全没有关系的矩阵库使用)。

  • 完整的recipe
    Kaldi对于很多常见语音数据集(主要是LDC的数据,当然也有一些其它开源数据集)的模型训练都提供完整的recipe,从而可以完整的复现整个过程。

  • Kaldi只维护最新的版本,所以用户应该定期更新到最新的master分支。

三、Kaldi项目的结构

Kaldi的项目可以在https://github.com/kaldi-asr/kaldi.git下载
或者使用命令

git clone https://github.com/kaldi-asr/kaldi.git kaldi --origin upstream
cd kaldi
git pull

通过git pull命令可以更新项目并修复一些bug。
进入项目的根目录,可以看到下面这些文件和目录

ls
cmake/
docker/
egs/
tools/
misc/
scripts/
src/
windows/
COPYING
CMakeLists.txt
INSTALL
README.md
一级目录内容
egsKaldi的实例,包含了语音识别,语种识别,声纹识别,关键字识别等。
misc包含了一些 pdf,以及相关 docker,htk 等资源。
scripts只用来存放 Rnnlm,以及相应的运行脚本。
src存放 Kaldi 的源代码,包括GMM,Ivector,Nnet等一系列的传统语音识别算法。
tools主要存放 Kaldi 依赖库的安装脚本。
windows在 Windows 平台运行所必须的脚本以及相关的执行程序。

其中,tools、src、egs这三个目录是比较重要的。

  • tools目录下面全部都是Kaldi依赖的包。其中主要有:
工具内容
OpenFst加权有限状态转换器(FST)的库。
IRSTLM一种统计语言建模工具包。可以将任何Arpa格式的语言模型转换为FST。
SRILM一种统计语言建模工具包。它是比IRSTLM更好,更完整的语言建模工具包。
sph2pipe一款处理SPHERE_formatted数字音频文件的软件,它可以将LDC的sph格式的文件转换成其它格式。
sclite这是NIST SCTK打分工具的一部分,用于生成符合NIST评测规范的统计文件。
CUB是NVIDIA官方提供的CUDA核函数开发库,是目前Kaldi编译的必选工具
ATLAS线性代数库。
CLAPACK线性代数库。这仅在没有ATLAS且使用CLAPACK进行编译的系统上有用。
OpenBLAS这是ATLAS或CLAPACK的替代方案。
MKLIntel 的 数学核心库,作为默认的线性代数库
  • egs目录下的很多实例就是前面提到的语音数据集的完整的recipe,下面列出几个常用的实例,更详细的可以访问这里和官网

    实例描述
    Aishell此目录为中文语音识别和声纹识别相关例子。
    Aishell2此目录主要为中文语音识别例子,但是针对 Aishell 在脚本方面更加规整。
    rm英语语音识别例子,包含了如何进行迁移学习。
    thchs30普通话语音识别例子。
    wsjwsj 英文语音识别例子。
  • src 目录为 Kaldi 的源码目录,在这个目录中,有两类文件夹,一类是算法原目录,一类为算法组合生成bin(可执行程序)目录,下面随便列举几个,想深入学习的可以访问这里和官网。

目录功能
base基础目录,主要包括与 Kaldi 项目相关的基础宏定义、类型定义等。
bin基础 bin 目录,主要是包括基础的执行程序。例如,查看 tree 信息、矩阵拷贝等基础操作。
cudamatrix矩阵计算相关 GPU 计算
matrix矩阵计算相关 CPU 计算
hmm隐马尔可夫算法的代码
feat特征提取算法目录
featbin特征提取可执行目录
gmmGMM 算法
gmmbinGMM 算法可执行文件目录
ivectorivector 算法基础目录
ivectorbinivector 算法的可执行目录,以及基于能量的 vad 执行目录。
lat网格生成基础算法目录
latbin网格生成算法的可执行文件目录
nnet3nnet3 相关基础算法实现目录
nnet3binnnet3 相关实现算法的可执行文件目录
onlineonline1 相关解码算法的实现目录
onlinebinonline1 相关解码器算法的可执行目录
online2online2 相关解码器算法的实现目录
online2binonline2 相关解码器算法的可执行目录

四、Kaldi的安装

Kaldi不是一个终端用户软件,没有安装包。安装Kaldi指的是编译Kaldi代码,以及准备一些必要的工具和运行环境。
由于Kaldi的示例都是使用shell脚本的,并且其I/O大量依赖管道,因此最佳的运行环境是UNIX类系统。这里以Ubuntu为例。

1. 安装依赖的几个系统开发库

在编译Kaldi之前,先要检查和安装Kaldi依赖的几个系统开发库,这些库有很多(g++、LLVM、Clang、zlib、python、gawk、perl、wget、git、libtool等),可以暂时不用知道有哪些,只需进入Kaldi下面的tools目录执行extras/check_dependencies.sh脚本来检查依赖的库是否已经安装,没有的话会给出提示,之后根据提示把缺少的库安装下就好了。

cd kaldi/tools/
extras/check_dependencies.sh

特别要注意的是Kaldi的线性代数库默认是IntelMKL,没有安装的话会给出提醒,如果想使用其他其他线性代数库的话(比如ATLAS或OpenBLAS)可以忽略。

2. 安装依赖的第三方工具库

进入kaldi/tools目录,执行make
cd kaldi/tools/
make

这样如果成功的话ATLAS headers、OpenFst、SCTK 、sph2pipe、CUB都会被自动下载编译安装,如果github能访问的话,基本都能顺利安装,如果不能访问可以把从这个地方下载好的压缩包放到tools目录下,然后对照更改下tools/Makefile中相应库的版本号,之后再执行make就可以了。
tools/Makefile中相应库的版本号位置如下:

# SHELL += -xCXX ?= g++
CC ?= gcc        # used for sph2pipe
# CXX = clang++  # Uncomment these lines...
# CC = clang     # ...to build with Clang.WGET ?= wgetOPENFST_VERSION ?= 1.7.2
CUB_VERSION ?= 1.8.0
# No '?=', since there exists only one version of sph2pipe.
SPH2PIPE_VERSION = 2.5
# SCTK official repo does not have version tags. Here's the mapping:
# 2.4.9 = 659bc36; 2.4.10 = d914e1b; 2.4.11 = 20159b5.
SCTK_GITHASH = 2.4.12

安装语音模型工具

cd kaldi/tools/
extras/install_irstlm.sh 
extras/install_srilm.sh
extras/install_kaldi_lm.sh

IRSTLM / SRILM / Kaldi_lm 这是三个不同的语言模型工具,不同的示例使用不同的工具。
其中安装SRILM有两点需要注意

  • 第一、SRILM是商业软件,不是免费的,需要到SRILM网站上注册、接受许可协议才能下载,并且要重命名为srilm.tgz放到tools目录下。

  • 第二、SRILM的安装依赖lbfgs库,这个库的安装方式为

    cd kaldi/tools/
    extras/install_liblbfgs.sh
    

    SRILM等源码包我已经下载好放在了这里需要的话可以直接下载使用。

安装线性代数库
OpenBLAS / MKL / ATLAS / CLAPACK 任选一个就行,

  • 其中MKL是默认使用的 非常庞大且不开源,另外安装完Intel MKL后,不管是安装还是使用kaldi都要先在当前终端下以source方式执行MKL安装目录下的setvars.sh。

  • ATLAS与OpenBLAS是开源的,性能基本接近MKL,其中OpenBLAS会比ATLAS运行效率更高些。

  • CLAPACK 是 在LAPACK的基础上,增加了c的调用方式,而LAPACK底层是调用的BLAS代码库。BLAS是一个早期很经典的一个库,他定义了后续线性代数库的API接口规范,但是太过老旧,没有针对架构进行优化,效率比较慢。
    OpenBLAS和MKL的安装方式如下:

    cd kaldi/tools/
    extras/install_openblas.sh
    extras/install_mkl.sh
    

    安装CUDA
    执行神经网络时要使用GPU进行运算,Kaldi的GPU计算部分使用了NVIDIA的CUDA框架。
    除了CUDA框架的工具CUDA Toolkit外还需要用到CUDA的dnn工具cuDNN,这些工具都可在NVIDIA官网上下载CUDA Toolkit、cuDNN。
    Kaldi通常支持最新的版本,在安装过程中需要root权限,每一步都使用默认设置,按照提示一步步执行就好。

安装好后查看CUDA的安装位置

ls -l /usr/local/cuda
lrwxrwxrwx 1 root root 22 118 11:59 /usr/local/cuda -> /etc/alternatives/cuda/
ls -l /etc/alternatives/cuda
lrwxrwxrwx 1 root root 20 118 11:59 /etc/alternatives/cuda -> /usr/local/cuda-11.7/

查看CUDA 编译工具nvcc的版本

/usr/local/cuda/bin/nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Jun__8_16:49:14_PDT_2022
Cuda compilation tools, release 11.7, V11.7.99
Build cuda_11.7.r11.7/compiler.31442593_0

需要注意的是CUDA的工具不会自动添加到环境变量中,使用时需要自己添加。

将 /usr/local/cuda/bin 加入 PATH 环境变量
将 /usr/local/cuda/lib64 加入 LD_LIBRARY_PATH 环境变量

3. 编译Kaldi代码

Kaldi的源代码使用gnu的autotools构建系统,可以根据配置自动生成相应平台的编译文件,
下面x86平台的PC机为例。

配置Kaldi

autotools构建系统是使用configure命令来配置的,关键配置如下:

cd kaldi/src./configure --help--static              # 静态编译,会得到静态库,生成文件比较大,便于移植,默认不使用--shared              # 动态编译,会得到动态库和比较小的可执行文件,不便移植,默认不使用--double-precision    # 双浮点精度,默认不使用# CUDA相关设置--use-cuda            # 使用CUDA,默认使用,如果只用CPU运算,则不启用--cudatk-dir=DIR      # CUDA安装位置,默认是/usr/local/cuda--cuda-arch=FLAGS     # CUDA架构的相关参数,不配置就使用默认参数,详情可以查看:# https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html# 特别要注意的是要指定当前显卡的架构的版本代号,否则默认是用最新架构,这样可能会有问题,# 其参数的格式为 --cuda-arch=-arch=sm_xy ,xy是两个数字分别代表第几代和子版本# OpenFst 相关设置--static-fst          # 使用静态OpenFst库,默认不使用--fst-root=DIR        # OpenFst 安装位置,默认是../tools/openfst/# 线性代数库相关设置--mathlib=LIB         # 指定数学库,可选MKL(默认)、OPENBLAS、ATLAS、CLAPACK。--static-math         # 指定静态数学库,默认不使用--atlas-root=DIR      # ATLAS 安装位置,默认是../tools/ATLAS/--openblas-root=DIR   # OpenBLAS 安装位置,默认是../tools/openblas/--clapack-root=DIR    # CLAPACK 安装位置--mkl-root=DIR        # MKL 安装位置--mkl-libdir=DIR      # MKL库安装位置

使用默认数学库MKL、动态编译、不使用 gpu 的配置命令

./configure --shared --use-cuda=no 

使用 gpu 则配置去掉 --use-cuda=no 并 加上

--use-cuda --cudatk-dir=/usr/local/cuda/ --cuda-arch=-arch=sm_62

使用数学库使用OpenBLAS 则加上

 --mathlib=OPENBLAS --openblas-root=../tools/openblas/

推荐的完整配置命令为

./configure --shared --use-cuda --cudatk-dir=/usr/local/cuda/ --cuda-arch=-arch=sm_62 --mathlib=OPENBLAS --openblas-root=../tools/openblas/

编译Kaldi

配置成功后终端上就会给出Kaldi的编译命令

make depend -j 8
make -j 8

编译的时间比较长,请耐心等待,
上面的命令执行成功后Kaldi就算安装成功了。

五、Kaldi的使用

Kaldi安装成功后,接下来就可以使用egs下面的示例或者参照这些示例来训练模型,搭建语音识别系统了。
使用自己的语音库,来训练模型需要编写整理不少文件和脚本,还是比较复杂的,这里就不深入说明,只以希尔贝壳的开源语音库Aishell为例来说明怎么使用。

Aishell的recipe已经在kaldi/egs/目录下存在了,基本就是最新的,可以直接使用。

1. 训练模型

进入Aishell的recipe目录

cd kaldi/egs/aishell/
ls 
s5/
v1/        
README.txt

查看README.txt文件

cat README.txt
... ...
s5: a speech recognition recipe
v1: a speaker recognition recipe
... ...

我们知道
s5是语音识别的recipe,
v1是说话人识别的recipe,
这里使用s5就行。

ls s5
drwx------ 10      4096  923 10:01 ./
drwx------  4      4096  922 21:36 ../
drwx------  2      4096  818 17:00 conf/
drwx------  4      4096  818 17:00 local/
lrwxrwxrwx  1        62  818 17:00 steps -> ../wsj/s5/steps/
lrwxrwxrwx  1        62  818 17:00 utils -> ../wsj/s5/utils/
-rw-rw-r--  1      1018  818 17:00 cmd.sh
-rw-r--r--  1       421  818 17:00 path.sh
-rw-rw-r--  1      1514  818 17:00 RESULTS
-rw-r--r--  1      6025  818 17:00 run.sh

s5下的目录中

  • steps 和 utils 是指向egs/wsj示例下的相应目录,这两个文件夹下包含了好多通用脚本,被所有的示例共用。
    • steps 中的是各个训练阶段的子脚本,如特征提取、GMM训练、dnn训练、解码等。
    • utils 中的脚本是更细小的工具,用于协助处理, 如任务管理、文件夹整理、临时文件删除、数据复制和验证等。
  • local 目录下的是处理当前示例数据的脚本、识别测试的脚本、以及出GMM训练之外的其他训练步骤的脚本。这些脚本调用了大量steps和utils目录下的脚本。
  • conf 目录下保存了一些如特征提取和识别解码的配置文件。
  • path.sh 定义了训练脚本中所使用的环境变量的位置,包括kaldi编译输出的位置、kaldi/tools下各个工具的位置、steps和utils脚本的位置等。
  • cmd.sh 定义了训练任务的提交方式。相关命令使用run.pl就是单机执行,使用queue.pl就是任务管理服务器集群的任务提交方式。常用的集群系统有SGE、PBS、SLURM,默认使用SGE,但个人建议使用SLURM是开源免费的,其维护积极,资料全,而且很多大型商用服务器都在使用,表现出色。当然只有一台电脑就直接使用run.pl就行了。
  • run.sh 是顶层运行脚本,集成了从资源下载、数据准备、特征提取到模型训练和测试的全部脚本,并给出了获取统计结果的方法。直接运行run.sh就可以得到训练测试好的模型。
  • RESULTS 是结果列表文件,给出了run.sh中每一步训练的模型在测试集上的效果。

模型训练前的准备工作

  • 首先要准备一台有NVIDIA高性能独立显卡的电脑,否则 dnn 的 nnet3 或 chain 训练无法完成。

  • Aishell的语音库在数据准备的脚本中会自动下载,不过语音库数据有十几个GB,可以事先在Aishell官网,或者在openslr(本人测试发现openslr中的资源的下载链接中,欧洲的最好)下载好data_aishell.tgz 和resource_aishell.tgz 。放在同一个目录下,然后修改run.sh中data路径为此目录,即可。

    #data=/export/a05/xna/data
    data=Aishell的语音库所在目录
    data_url=www.openslr.org/resources/33
    
  • 修改cmd.sh ,因为我们是单机运行,所以需要将相关的queue.pl都改成run.pl(run.pl后面的–mem参数没有意义)。

    #export train_cmd="queue.pl --mem 2G"
    #export decode_cmd="queue.pl --mem 4G"
    #export mkgraph_cmd="queue.pl --mem 8G"
    export train_cmd="run.pl"
    export decode_cmd="run.pl"
    export mkgraph_cmd="run.pl"
    
  • 修改path.sh,保证KALDI_ROOT的路径是当前kaldi项目的根目录(src和tools的上级目录),其他的不需要改。

    export KALDI_ROOT=`pwd`/../../..        #修改这里的值,如果是kaldi/egs/下的示例则不需要修改
    [ -f $KALDI_ROOT/tools/env.sh ] && . $KALDI_ROOT/tools/env.sh
    export PATH=$PWD/utils/:$KALDI_ROOT/tools/openfst/bin:$PWD:$PATH
    [ ! -f $KALDI_ROOT/tools/config/common_path.sh ] && echo >&2 "The standard file $KALDI_ROOT/tools/config/common_path.sh is not present -> Exit!" && exit 1
    . $KALDI_ROOT/tools/config/common_path.sh
    export LC_ALL=C
    export PYTHONUNBUFFERED=1
    
  • 确认 GPU 的运算环境

    1. 检查cuda toolkit环境

      nvcc --version
      如果出现
      Command 'nvcc' not found, but can be installed with:
      apt install nvidia-cuda-toolkit
      说明cuda-toolkit没有安装或这没有配置环境变量
      

如果cuda-toolkit已经安装需要执行
export PATH=$PATH:/usr/local/cuda/bin

配置成功后可以看到
nvcc --version
nvcc: NVIDIA ® Cuda compiler driver
Copyright © 2005-2022 NVIDIA Corporation
Built on Wed_Jun__8_16:49:14_PDT_2022
Cuda compilation tools, release 11.7, V11.7.99
Build cuda_11.7.r11.7/compiler.31442593_0

 2. 修改GPU模式为独占式运行模式(dnn训练时非常消耗显卡存储资源,如果同时执行多个训练任务,显卡资源会很快枯竭。)```shellsudo nvidia-smi -c 3Set compute mode to EXCLUSIVE_PROCESS for GPU 00000000:01:00.0.
All done.
  1. 修改local/chain/run_tdnn.sh和local/nnet3/run_tdnn.sh,把--use-gpu=true 设置成 –use-gpu=wait,没有则不修改。 (理由同上)

    if [ $stage -le 8 ]; then
    if [[ $(hostname -f) == *.clsp.jhu.edu ]] && [ ! -d $dir/egs/storage ]; then
    utils/create_split_dir.pl \/export/b0{5,6,7,8}/$USER/kaldi-data/egs/aishell-$(date +'%m_%d_%H_%M')/s5/$dir/egs/storage $dir/egs/storage
    fisteps/nnet3/train_dnn.py --stage=$train_stage \
    --cmd="$decode_cmd" \
    --feat.online-ivector-dir exp/nnet3/ivectors_${train_set} \
    --feat.cmvn-opts="--norm-means=false --norm-vars=false" \
    --trainer.num-epochs $num_epochs \
    --trainer.optimization.num-jobs-initial $num_jobs_initial \
    --trainer.optimization.num-jobs-final $num_jobs_final \
    --trainer.optimization.initial-effective-lrate $initial_effective_lrate \
    --trainer.optimization.final-effective-lrate $final_effective_lrate \
    --egs.dir "$common_egs_dir" \
    --cleanup.remove-egs $remove_egs \
    --cleanup.preserve-model-interval 500 \
    --use-gpu wait \                                    ## 修改这里 把 true 改为 wait
    --feat-dir=data/${train_set}_hires \
    --ali-dir $ali_dir \
    --lang data/lang \
    --reporting.email="$reporting_email" \
    --dir=$dir  || exit 1;
    fi
    

    至此准备工作就基本完成了。

    训练模型

    准备工作完成后给run.sh加上可执行权限,然后直接执行静待完成即可。(训练时间会非常长,可能要好多天)

    chmod a+x run.sh
    ./run.sh
    

模型训练过程(run.sh)概述

#!/usr/bin/env bash# Copyright 2017 Beijing Shell Shell Tech. Co. Ltd. (Authors: Hui Bu)
#           2017 Jiayu Du
#           2017 Xingyu Na
#           2017 Bengu Wu
#           2017 Hao Zheng
# Apache 2.0# This is a shell script, but it's recommended that you run the commands one by
# one by copying and pasting into the shell.
# Caution: some of the graph creation steps use quite a bit of memory, so you
# should run this on a machine that has sufficient memory.data=/export/a05/xna/data
data_url=www.openslr.org/resources/33. ./cmd.sh############# 下载语音库数据 #############
local/download_and_untar.sh $data $data_url data_aishell || exit 1;
local/download_and_untar.sh $data $data_url resource_aishell || exit 1;############# 预处理发音词典 #############
# Lexicon Preparation,
local/aishell_prepare_dict.sh $data/resource_aishell || exit 1;############# 声学训练的数据准备 ############
# Data Preparation,
local/aishell_data_prep.sh $data/data_aishell/wav $data/data_aishell/transcript || exit 1;############# 准备并训练语言模型 ############
# Phone Sets, questions, L compilation
utils/prepare_lang.sh --position-dependent-phones false data/local/dict \"<SPOKEN_NOISE>" data/local/lang data/lang || exit 1;# LM training
local/aishell_train_lms.sh || exit 1;# G compilation, check LG composition
utils/format_lm.sh data/lang data/local/lm/3gram-mincount/lm_unpruned.gz \data/local/dict/lexicon.txt data/lang_test || exit 1;############# 提取语音库中的音频特征 ###########
# Now make MFCC plus pitch features.
# mfccdir should be some place with a largish disk where you
# want to store MFCC features.
mfccdir=mfcc
for x in train dev test; dosteps/make_mfcc_pitch.sh --cmd "$train_cmd" --nj 10 data/$x exp/make_mfcc/$x $mfccdir || exit 1;steps/compute_cmvn_stats.sh data/$x exp/make_mfcc/$x $mfccdir || exit 1;utils/fix_data_dir.sh data/$x || exit 1;
done############### 训练单音素 GMM-HMM模型 ############
# Train a monophone model on delta features.
steps/train_mono.sh --cmd "$train_cmd" --nj 10 \data/train data/lang exp/mono || exit 1;############### 解码,测试 训练出的单音素 GMM-HMM模型,并评估打分 #############
############ 解码前要构建状态图 ###########
# Decode with the monophone model.
utils/mkgraph.sh data/lang_test exp/mono exp/mono/graph || exit 1;
steps/decode.sh --cmd "$decode_cmd" --config conf/decode.config --nj 10 \exp/mono/graph data/dev exp/mono/decode_dev
steps/decode.sh --cmd "$decode_cmd" --config conf/decode.config --nj 10 \exp/mono/graph data/test exp/mono/decode_test############### 在单音素 GMM-HMM模型 的基础上 训练三音素 GMM-HMM模型 ###############
########### 开始训练前要先将上一次训练出的模型进行gmm对齐 ###########
# Get alignments from monophone system.
steps/align_si.sh --cmd "$train_cmd" --nj 10 \data/train data/lang exp/mono exp/mono_ali || exit 1;# Train the first triphone pass model tri1 on delta + delta-delta features.
steps/train_deltas.sh --cmd "$train_cmd" \2500 20000 data/train data/lang exp/mono_ali exp/tri1 || exit 1;############### 解码,测试 训练出的三音素 GMM-HMM模型,并评估打分 #############
############ 同样解码前要构建状态图 ###########
# decode tri1
utils/mkgraph.sh data/lang_test exp/tri1 exp/tri1/graph || exit 1;
steps/decode.sh --cmd "$decode_cmd" --config conf/decode.config --nj 10 \exp/tri1/graph data/dev exp/tri1/decode_dev
steps/decode.sh --cmd "$decode_cmd" --config conf/decode.config --nj 10 \exp/tri1/graph data/test exp/tri1/decode_test
... ...
... ...
# align tri4a with fMLLR
steps/align_fmllr.sh  --cmd "$train_cmd" --nj 10 \data/train data/lang exp/tri4a exp/tri4a_ali# Train tri5a, which is LDA+MLLT+SAT
# Building a larger SAT system. You can see the num-leaves is 3500 and tot-gauss is 100000steps/train_sat.sh --cmd "$train_cmd" \3500 100000 data/train data/lang exp/tri4a_ali exp/tri5a || exit 1;# decode tri5a
utils/mkgraph.sh data/lang_test exp/tri5a exp/tri5a/graph || exit 1;
steps/decode_fmllr.sh --cmd "$decode_cmd" --nj 10 --config conf/decode.config \exp/tri5a/graph data/dev exp/tri5a/decode_dev || exit 1;
steps/decode_fmllr.sh --cmd "$decode_cmd" --nj 10 --config conf/decode.config \exp/tri5a/graph data/test exp/tri5a/decode_test || exit 1;############### 到此为止 三音素 GMM-HMM模型 训练 共进行了 5 次迭代 ############################## 在最后一个三音素 GMM-HMM模型 tri5a 的基础上 训练三音素 NNET3-HMM模型 ###############
########### 同样 在开始nnet3训练前要先将tri5a的模型进行对齐 ###########
# align tri5a with fMLLR
steps/align_fmllr.sh --cmd "$train_cmd" --nj 10 \data/train data/lang exp/tri5a exp/tri5a_ali || exit 1;# nnet3
local/nnet3/run_tdnn.sh############### 在三音素 NNET3-HMM模型的基础上 训练三音素 NNET3-CHAIN-HMM模型 ###############
# chain
local/chain/run_tdnn.sh############### 打印每个训练的模型的测试打分结果(即WER,word error rate)###############
# getting results (see RESULTS file)
for x in exp/*/decode_test; do [ -d $x ] && grep WER $x/cer_* | utils/best_wer.sh; done 2>/dev/null
for x in exp/*/*/decode_test; do [ -d $x ] && grep WER $x/cer_* | utils/best_wer.sh; done 2>/dev/nullexit 0;

上面的训练过程中前面的语音库准备、发音词典处理,声学训练的数据准备、语言模型数据的准备是个很繁杂细致的工作,是最需要使用者做的工作,虽然后面的模型训练、测试等工作也很多,但是因为有很多实现好的工具和脚本,最难的部分不需要自己来做,反而轻松很多。

2. 搭建语音识别系统

语音识别就是将人说话的音频数据 提取特征 然后使用已训练好的模型来进行解码,得到说话的文本内容。
所以,语音识别系统就包括了音频数据的获取、音频特征提取、语音识别模型的导入和配置、使用模型解码音频。

下面使用上面训练出的 nnet3-chain模型 和 kaldi的online2-tcp-nnet3-decode-faster工具来演示:

  1. 准备解码所需的配置文件

    steps/online/nnet3/prepare_online_decoding.sh \--add-pitch true \            #aishell训练时提取的特征加入了pitch(音高)特征,所以这里也要加上data/lang_chain \            #存储了chain模型解码网络图中的G.fst和L.fst文件以及词汇表words.txt文件exp/nnet3/extractor \    #有关特征提取器的一些文件exp/chain/tdnn_1a_sp \        #chain模型的存放路径nnet_online                #生成的解码配置文件存放路径
    

    解码配置文件生成后要检查修改nnet_online/conf/mfcc.conf为

    --use-energy=false   # only non-default option.
    --sample-frequency=16000
    ######下面4行参数和mfcc_hire有关########
    --num-mel-bins=40     # similar to Google's setup.                        
    --num-ceps=40     # there is no dimensionality reduction.            
    --low-freq=40    # low cutoff frequency for mel bins                    
    --high-freq=-200 # high cutoff frequently,relative to Nyquist of 8000 (=3800)
    

    因为默认生成的特征类型是MFCC,而aishell训练nnet和chain模型输入的是更高维度的MFCC,叫mfcc_hire(hire是high resolution单词的缩写),所以这个地方要把mfcc_hire的参数加上,否则解码时会报维度不匹配的错误。

  2. 运行nnet3在线语音识别服务器online2-tcp-nnet3-decode-faster,监听tcp传输的实时音频数据,并返回解码结果

    online2-tcp-nnet3-decode-faster --samp-freq=16000 \--frames-per-chunk=20 --extra-left-context-initial=0 \--frame-subsampling-factor=3 \--config=nnet_online/conf/online.conf \        #解码配置文件的主文件--min-active=200 --max-active=7000 --beam=15.0 \--lattice-beam=6.0 --acoustic-scale=1.0 、--port-num=5050 \            # tcp服务监听端口nnet_online/final.mdl \            # chain模型文件exp/chain/tdnn_1a_sp/graph/HCLG.fst \            # chain解码图文件data/lang_chain/words.txt            # chain词汇表文件
    
  3. 传输音频数据给online2-tcp-nnet3-decode-faster获取解码结果

    #发送一个音频文件audio.wav给语音识别服务器
    sox audio.wav -t raw -c 1 -b 16 -r 8k -e signed-integer - | nc -N localhost 5050
    #通过MIC录音并事实传输给语音识别服务器
    rec -r 8k -e signed-integer -c 1 -b 16 -t raw -q - | nc -N localhost 5050
    

通过上面3步,一个简单的语音识别系统就算完成了。

实际应用中有很多人用gstreamer来搭建kaldi在线语音识别系统。
其中还用到了kaldi-gstreamer-server、 gst-kaldi-nnet2-online gstreamer插件
感兴趣的朋友可以自己研究下。

参考资料
《Kaldi语音识别实践》—— 陈果果,都家宇,那兴宇,张俊博著
《基于声调信息的拉萨方言声学建模方法研究》—— 李建
Kaldi官方文档
Daniel Povey 的个人网站
OpenSLR—Open Speech and Language Resources
Kaldi官方文档的部分中文翻译和整理- 李想
AI大道理的语音识别(ASR)专栏
AI大道理的语音框架(Kaldi)专栏
Kaldi的HCLG构图过程可视化

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

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

小程序css 如何引用图片,微信小程序实例:如何引入外部js的文件(图文)

本篇文章给大家带来的内容是关于微信小程序实例&#xff1a;如何引入外部js的文件(图文)&#xff0c;有需求的冤家可能参考一下&#xff0c;宿愿对你有所协助。如何引入一个外部的js文件&#xff0c;既utils文件夹的用处&#xff0c;其实步骤很简略&#xff1a;1&#xff1a;预…...

第一次面试

说一下自己学习过的技术 html&#xff0c;css&#xff0c;js&#xff0c;es6&#xff0c;react&#xff0c;vue&#xff0c;了解node对html5的了解,语义化标签 语义化标签 nav、header、footer、aside、section、article 音频&#xff0c;视频标签 audio、video DOM操作的查询 …...

Android 点九图机制讲解及在聊天气泡中的应用,Android开发需要学什么

执行成功实例 jundeMacBook-Pro:一期气泡 junxu$ ./aapt c -S /Users/junxu/Desktop/一期气泡/气泡需求整理 -C /Users/junxu/Desktop/一期气泡/output Crunching PNG Files in source dir: /Users/junxu/Desktop/一期气泡/气泡需求整理 To destination dir: /Users/junxu/De…...

URL转换成IP的过程

【程序人生 编者按】对于互联网&#xff0c;人们总是高谈阔论&#xff0c;却很少有人愿意去了解电脑、手机、电视这些设备到底是如何被“连接”起来的。本文通过“我”&#xff0c;一个普通的网络请求的视角&#xff0c;给大家介绍下“我”的工作流程是如何的。人们动动手指&am…...

剑指OFFER系列之48----最长不含重复字符的子字符串

剑指OFFER题目描述&#xff1a;请从字符串中找出一个最长的不包含重复字符串的的子字符串&#xff0c;计算该最长子字符串的长度。 #include<iostream> #include<string> #include<vector> #include<map> #include<algorithm> #include<climi…...

参加本周日苏州站RT-Thread培训注意事项

各位小伙伴们好&#xff0c;苏州站RT-Thread培训将会在11月03日&#xff08;本周日)于苏州吴中区苏州市职业大学图书馆1楼报告厅举行。本次培训的主题是&#xff1a;基于RT-Thread的网络收音机参加培训注意事项&#xff1a;1.时间&#xff1a;9&#xff1a;30——17&#xff1a…...

小觅摄像头SDK文件

在网上找了半天没找着&#xff0c;github貌似也上不去。以下是在本地拷贝出来的&#xff0c;也能用。 下载地址&#xff1a; 链接: https://pan.baidu.com/s/1zubMafy_htuqJVSnZVmhcg 提取码: wnv5...

LCD段码液晶屏驱动方法介绍

LCD段码屏的驱动基本原理是&#xff1a;具备偶极矩的lcd段码屏针状分子结构在另加电场的施加下其排序情况产生变化&#xff0c;促使根据液晶显示器件的光被调配&#xff0c;进而展现明与暗或透光与不透的表明实际效果。液晶显示器件中的每一个表明清晰度都需要独立被电场操纵&a…...

JavaScript之Ajax(一篇入门Ajax就够了)

一、概念 1.什么是Ajax Ajax&#xff08;Asynchronous Javascript And XML&#xff09;&#xff0c;即是异步的JavaScript和XML&#xff0c;Ajax其实就是浏览器与服务器之间的一种异步通信方式 异步的JavaScript 它可以异步地向服务器发送请求&#xff0c;在等待响应的过程…...

zynq操作系统 : Linux下LHB155304测试用例

前言 第一种情况的改进和第三种情况&#xff0c;都可以在应用层来做   比如我们可以设置快速读写模式fastmode&#xff0c;在应用层调用这个函数open时&#xff0c;配置寄存器屏蔽掉其他子地址的中断&#xff0c;直接源头上减少信号量&#xff0c;提升操作系统处理效率&#…...

linux使用绝对路径依次进入用户目录,linux中用户的主目录~

&#xff5e;在Linux中代表用户主目录对一般用户&#xff0c;&#xff5e;表示/home/(用户名)对于root用户&#xff0c;&#xff5e;表示/root如果要查看&#xff5e;的真实面貌&#xff0c;可以先进入&#xff5e;目录&#xff0c;然后用pwd -P命令查看&#xff5e;的绝对路径…...

112路径总和

刚开始没注意必须是根节点到叶节点&#xff0c;所以必须多一个是不是叶节点的判定&#xff0c;程序整体用递归实现。 #include<iostream> #include<queue> #include<vector> using namespace std; struct TreeNode {int val;TreeNode *left;TreeNode *right…...

Apache配置项说明

/usr/local/httpd/conf/httpd.conf 详情 &#xff08;1&#xff09;&#xff1a;全局配置参数&#xff1a;作用于整个Web服务 ServerRoot&#xff1a;&#xff08;指定服务目录&#xff09;目录&#xff0c;在http.conf 中配置文件时&#xff0c;如果使用的相对路径&#xff0…...

噪音测试标准:行业标准

中华人民共和国机械行业标准三相异步电动机技术条件 JB/T 7565.1-2004隔爆型三相异步电动机技术条件 第1部分 JBT 8674-2007 高压隔爆型电动机技术条件 JB T 8680-2008 三相异步电动机技术条件 机座号 举例说明&#xff1a;Y160M-4 Y&#xff1a;表示异步电动机 160&#xf…...

EN 14967:防水沥青防潮层—CE认证

防水沥青防潮层CE认证&#xff08;欧盟强制认证&#xff09;&#xff0d;简介 在欧盟市场“CE”标志属强制性认证标志&#xff0c;以表明产品符合欧盟《技术协调与标准化新方法》指令的基本要求。这是欧盟法律对产品提出的一种强制性要求。 在防水沥青防潮层上加贴CE标志不但可…...

关于SpringMvc中Controller层自动注入出现空指针

关于SpringMvc中Controller层自动注入出现的错误 这个错误困扰我很久了 之前一直没得到解决 今天静下心来梳理了一遍springmvc的运行流程&#xff0c;终于找到了错误的原因 如何解决&#xff1f;&#xff1f; 既然empService未能初始化 首先想到的是它是否已经放入Spring容器中…...

Computer Organization and Architecture 10th - William Stallings

「Computer Organization an…illiam Stallings.pdf」https://www.aliyundrive.com/s/aetR75kjuJD 提取码: h338 点击链接保存&#xff0c;或者复制本段内容&#xff0c;打开「阿里云盘」APP &#xff0c;无需下载极速在线查看&#xff0c;视频原画倍速播放。...

IPv攻击态势概览

执行摘要 未来的时代里&#xff0c;数字化和全球化将深入到世界各地每一个角落&#xff0c;人人受惠。基于 IPv6的下一代 互联网&#xff0c;4.将成为支撑前沿技术和产业快速发展的基石。2017 年 11 月&#xff0c;中共中央办公厅和国务院办公厅联合印发了《推进互联网 协议第…...

spark 数据倾斜调优

数据倾斜应该算是一个比较麻烦的问题&#xff0c;笔者也是刚刚开始学习相关的调优&#xff0c;将看到的比较全面、清晰的几种解决方案整合了一下&#xff0c;并加上了一些理解与心得&#xff0c;供参考&#xff01; 首先&#xff0c;需要对spark执行计划有一定的基础与理解&am…...

[react] 怎样将多个组件嵌入到一个组件中?

[react] 怎样将多个组件嵌入到一个组件中&#xff1f; import A from /* 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题...

VM上装linux系统无法拷贝文件问题

#下面命令自动挂载vm上的文件夹到linux 的/mnt/hgfs文件夹下 vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other命令执行完重新打开该文件夹即可看到文件...

bat批处理常用命令

bat 批处理 一、批处理中常用命令: @命令 :加在每个命令行的最前面,表示运行时不显示这一行的命令行。eg: @echo off // 不显示后续命令行及当前命令行atat 05:30 shutdown -s -f 表示5:30分自动关机attrib 设置文件属性ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H …...

诺基亚S60第二版与第三版的系统技术区别

首先介绍下各版的代表机型&#xff0c;让大家稍微回顾一下&#xff1a; 诺基亚S60第一版 代表机型&#xff1a;7650.3650 诺基亚S60第二版 Symbian OS v7.0s S60 2nd Edition &#xff1a;6600 Symbian OS 7.0s S60 2nd Edition Feature Park 1&#xff1a;3230、6260、6620…...

lombok相关

一、简述 lombok是一款在Java开发中简洁化代码的插件工具。使用lombok注解&#xff0c;目的就在于不用再去写一些反复的代码&#xff08;如Getter&#xff0c;Setter&#xff0c;Constructor等&#xff09;。 首先&#xff0c;用到的几个注解&#xff1a; Setter 和 GetterD…...

这么多的h5小游戏,你知道哪一类才适合自己的品牌吗?

随着智能手机的不断发展&#xff0c;手游变成了大家休闲娱乐项目&#xff0c;例如Tom游戏、金豆游戏等h5小游戏凭借着不断的创新受人们喜欢&#xff0c;H5游戏营销成为了商家品牌竞争的筹码。如此多的游戏&#xff0c;怎么选择才适合自己的H5小游戏品牌呢&#xff1f; TOM H5小…...

嵌入式学习笔记--网络打流补充笔记

前一段时间写了一篇关于打流的简单笔记&#xff0c;包含脚本的简单编写&#xff0c;见 一次打流过程的优化反思&#xff08;iperf3的灵活运用&#xff09;_sixtome-CSDN博客_iperf3 打流 这几天在实际应用中&#xff0c;发现还是有不少的瑕疵&#xff0c;根据实际情况又进行了…...

canvas绘制左右来回移动,触碰边缘返回的小黑方块~

完整代码如下&#xff1a; <!doctype html> <html lang"en"><head><meta charset"UTF-8"><title>Document</title><style>canvas{background:#f2f2f2;}</style><script></script></head&…...

[附源码]Python计算机毕业设计Django基于web的羽毛球管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…...

设计 repeatOnLifecycle API 背后的故事

通过本文您将会了解到 Lifecycle.repeatOnLifecycle API 背后的设计决策&#xff0c;以及为什么我们会移除此前添加到 lifecycle-runtime-ktx 库 2.4.0 版本首个 alpha 版中的几个辅助函数。 纵观全文&#xff0c;您将了解到在某些场景中使用特定协程 API 的危险程度、为 API …...

Pandas中常用的魔法命令与Linux命令

import numpy as np import time as time1、运行外部python文件&#xff08;默认是当前目录&#xff0c;最好加上绝对路径&#xff09; %run helloworld.py2、运行代码计时 # 统计单次运行时间 %time 2**10CPU times: user 5 s, sys: 2 s, total: 7 s Wall time: 13.1 s 1024…...

linux如何设置环境变量

Linux的环境变量 一、Linux的变量种类 按变量的生存周期来划分&#xff0c;Linux变量可分为两类&#xff1a;1、永久的&#xff1a;需要修改配置文件&#xff0c;变量永久生效。2、临时的&#xff1a;使用export命令声明即可&#xff0c;变量在关闭shell时失效。二、设置变量的…...

vue2不同版本下如何分环境打包

目录 前言 vue2版本&#xff08;基于webpack&#xff09;的动态ip及端口分环境打包 1、在public目录下&#xff0c;新建static文件夹&#xff0c;在static文件夹下再新建config.js文件 2、在config.js文件中编写对应的分别打包环境 3、把config.js在index.html中引入 4、…...

李彦宏为何推出百度大数据引擎?大数据引擎可以干什么?

在昨天&#xff08;4月24日&#xff09;的百度技术开放日上&#xff0c;李彦宏现身并推出了百度大数据引擎。这在百度&#xff0c;表明对相关产品最高的重视了。 这个发布是什么意思呢&#xff1f;简单地讲&#xff0c;大数据引擎将百度在大数据的数据、能力和技术开放给行业&…...

Windows网络与通信程序设计实验一:基于TCP的C/S通信仿真

文章目录Windows网络与通信程序设计实验一&#xff1a;基于TCP的C/S通信仿真1. 实验要求&#xff1a;1.1 实验目的介绍&#xff1a;1.2 实验相关提示&#xff1a;2. 实验环境准备&#xff1a;3. 实验步骤和具体代码理解&#xff1a;3.1 以下是服务器端的代码&#xff1a;3.2 以…...

java 前后端分离_到底什么是前后端分离?

前后端分离的"前"特指浏览器端(或客户端)。Java服务器端初学者最容易引起误解的一个概念就是: JSP是前端技术。JSP一定一定一定要知道全称&#xff1a;Java Server Page。是运行在服务器端JVM之上Servlet容器里的&#xff0c;只是执行的结果是HTML&#xff0c;响应给…...

tsconfig.json配置说明

有详细的官方说明文档 https://www.tslang.cn/docs/handbook/compiler-options.html...

java毕业设计采购系统mybatis+源码+调试部署+系统+数据库+lw

java毕业设计采购系统mybatis源码调试部署系统数据库lw java毕业设计采购系统mybatis源码调试部署系统数据库lw本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 开发软件&#xff1a;idea eclipse 前端技术&#xff1a;Layui、HTML、C…...

字节跳动薪酬体系曝光,我承认我酸了

如何像字节跳动一样能够做好薪酬体系?在有限的预算下&#xff0c;如何更合理的支配薪酬、有效的激励核心骨干员工? 这个问题恐怕七八年工作经验的HR也不一定答得上。 由此可见&#xff0c;字节跳动待遇在行业内可以说相当高&#xff0c;高薪资意味着高门槛&#xff0c;很多…...

torch.max讲解-- 指定维度下,数值最大位置设为1其他为0

x是输入张量 dim指定维度 max表示取最大值 import torchif __name__ __main__:x torch.randn([1, 3, 4, 4]).cuda()mask (x x.max(dim1, keepdimTrue)[0]).to(dtypetorch.int32)result torch.mul(mask, x)print(x)print(mask)print(result)效果&#xff1a; tensor([[[[-…...

Python中完整的机器学习数据科学课程

学习每个机器学习模型背后的数学&#xff0c;然后用Python实现它 你会学到: 开发机器学习模型 创建机器学习模型的模板 学习每个机器学习模型背后的数学 要求: Python或任何编程语言的基础 时长:8h 15m |视频:. MP4&#xff0c;1280720 30 fps |音频:AAC&#xff0c;44.1 kHz…...

交通仿真软件测试自学,交通仿真及常用的仿真软件简介

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼TransCADTransCAD是世界第一个也是唯一的一个将地理信息系统(GIS)设计运用在交通领域&#xff0c;储存、显示、管理、分析交通数据的软件。TransCAD 结合地理信息系统GIS和交通建模能力于一体&#xff0c;提供了一个独立的集成平台…...

sql语句多表连查

连表查寻有多种形式&#xff0c;其中如果是开发人员的话用的最多的应该是join on 所以我今天就拿join on 来举个例子 首先我先创建五张表 好了表已经创建好了 那么就使用join on 查询就好了 下面是sql语句 就是利用表与表之间的关联字段去查询 下面是查询结果...

UE4 文件加密

记录&#xff1a; 文件的加密和解密代码&#xff1a; FString aa "This is a test";uint8* Blob1; //we declere uint8 pointeruint32 Size1; //for size calculationSize1 aa.Len();Size1 Size1 (FAES::AESBlockSize - (Size1 % FAES::AESBlockSize));Blob1 …...

蓝桥杯:数的计算倍减序列

蓝桥杯&#xff1a;倍减序列 问题描述   一个以正整数k开始的倍减序列&#xff0c;是一个不定长的有序的正整数序列&#xff0c;它的第一个元素为k&#xff0c;第二个元素不大于第一个元素的一半&#xff0c;第三个元素不大于第二个元素的一半&#xff0c;依此类推。   例…...

动态分析Android App之动态调试

这个系列一共有五篇左右&#xff0c;内容主要介绍如何在Java层动态分析和调试Android App&#xff0c;和网上其他教程相比&#xff0c;内容更充实&#xff0c;体系更健全&#xff0c;深入而浅出。 闻道有先后&#xff0c;术业有专攻&#xff0c;希望能给刚入门Android逆向的同侪…...

红帽linux开启vnc服务器,红帽Linux上使用VNC

1.安装好红帽Linux系统后,键入下面的命令来检查vnc服务器是否已经安装在系统中rpm -q vnc-server2.要把vnc配置成一项系统服务&#xff0c;把你的用户名称加入到下面的配置文件中&#xff1a;vi /etc/sysconfig/vncserversVNCSERVERS"1:root"3.在启动vnc服务之前&…...

数学建模论文书写总结

数学建模论文 简单扼要&#xff0c;层次分明 书写论文前搞明白&#xff1a; 1、 论文需要回答哪几个问题&#xff1f;&#xff08;哪个方面需要建模&#xff09; 2、 问题以怎样的方式回答&#xff1f;&#xff08;结果如何呈现&#xff09; 3、 每个问题列出哪些关键数据…...

nginx学习日记

nginx介绍 nginx是一个http和web反向代理的服务器&#xff0c;处理并发性能十分强大&#xff0c;最高可达50000个并发连接数&#xff0c; 特点&#xff1a;占用内存小&#xff0c;并发能力高&#xff0c; 正向代理 nginx不仅可以做反向代理&#xff0c;也可以用作正向代理来…...

php获取m3u8的地址,如何获取各大平台的播放地址(获得优酷的m3u8播放地址)为例...

1.打开safari2.在顶部(黑色小苹果)旁边&#xff0c;点击safari。3.打开里面的 偏好设置。4.在高级 中 找到 “在菜单栏中显示开发菜单” 并打勾。5.关闭窗口后&#xff0c;可以发现safari 顶部 会出现一个 “开发” 选项。6.使用safari打开一个直播网站。7.在 “开发” 选项中 …...

python中pca算法_Python使用三种方法实现PCA算法

主成分分析(PCA) vs 多元判别式分析(MDA)PCA和MDA都是线性变换的方法&#xff0c;二者关系密切。在PCA中&#xff0c;我们寻找数据集中最大化方差的成分&#xff0c;在MDA中&#xff0c;我们对类间最大散布的方向更感兴趣。一句话&#xff0c;通过PCA&#xff0c;我们将整个数据…...

【Vue+java+阿里云oss】服务端签名后直传,文件下载(私有bucket),详细步骤及前后端代码(二)

服务端签名后直传见上一篇博客&#xff1a;【Vuejava阿里云oss】服务端签名后直传&#xff0c;文件下载&#xff08;私有bucket&#xff09;&#xff0c;详细步骤及前后端代码&#xff08;一&#xff09; 经过上篇博客的操作&#xff0c;我们应该可以将文件成功上传到阿里云os…...

【C/C++基础进阶系列】实战记录 -- Visual Studio 2019 创建 Cmake 项目并远程 Linux 调试

【C/C基础进阶系列】实战记录 -- Visual Studio 2019 创建 Cmake 项目并远程 Linux 调试 【1】远程 Linux 系统相关环境搭建 安装新版本的 Cmake 1. 获取 Cmake 源码 wget https://github.com/Kitware/CMake/releases/download/v3.19.8/cmake-3.19.8.tar.gz2. 解压 tar -zxvf…...

ID生成器介绍及著名的五大开源ID生成器的使用UUID,snowflake

ID在我们日常开发中使用的非常频繁&#xff0c;几乎只要是在开发就会天天打交道&#xff0c;但是你知道吗&#xff0c;ID学问大的很呢&#xff0c;怎么就大了呢&#xff0c;有多大呢&#xff1f;咳咳~~ 没开车啊&#xff0c;注意正常&#xff0c;好&#xff0c;接下来我们开始…...

Go modules工程

工作目录 在开始Go Modules工程前&#xff0c;我们需要介绍下GOPATH工程, 它虽然不怎么好用&#xff0c;但是他是你1.11版本之前的唯一选择 GOPATH 工程 在Go 1.1 ~ 1.11 (2013/05 ~ 2018/08), 都是使用GoPATH工程结构, 直到现在依然有很多老的项目依然使用这种方式 特征 安装…...

谷露软件连续第三年通过ISO27001信息安全管理体系认证

ISO27001一直被公认为是最严格的国际安全控制实施与管理标准。近日&#xff0c;谷露软件连续第三年成功通过ISO27001信息安全管理体系认证年审&#xff0c;持续验证了谷露可靠的信息安全监管与防护能力&#xff0c;也进一步体现了谷露全力保障用户信息资产的决心。截止目前&…...

13.request-session,验证码

使用session使得请求变成一个对象 注意登录页面隐藏的参数 爬取古诗文登录页面 import requests from bs4 import BeautifulSoup""" 页面隐藏内容 __VIEWSTATE: Cm3EoJnfUOdqhItuiW2nxIsumGqsBQJ/0awnS9J/ZtYzavsrkqR0Bvqi7NiTPLaW6bL4nP7cfP83DKAho5jTvhCv5O…...

Apache的网页和安全优化

Apache小结一、Apache网页优化1.1 网页压缩1&#xff09;网页压缩的理论步骤2&#xff09;网页压缩的具体实操步骤&#xff08;图文&#xff09;1.2 网页缓存1&#xff09;网页缓存 的理论步骤2&#xff09;网页缓存 的具体实操步骤&#xff08;图文&#xff09;二、Apache安全…...

光学设计 像质评价

文章目录点列图的分析方法ray fan分析MTF曲线opd分析点列图的分析方法 点列图的原理是显示光学系统在IMA面上的成像。换句话说&#xff0c;它就是通过计算&#xff0c;把一系列物方的点通过光学系统以后&#xff0c;成像在IMA面上的情况给实际绘制出来。 为了表现方便&#xf…...

小狼-利用redis实现过期图片的清理/阿里云OSS上传清理过期图片

1.将用户所有上传的图片存储到Redis&#xff0c;存储一个列表AllList 2.将用户每次上传的图片存储一个24小时后过期的值&#xff0c;并且添加到AllList中&#xff0c;当用户确定上传该图片后&#xff0c;将本图片从AllList中移除&#xff0c;表明该图片不用删除 3.定时&#…...

C和C++使用malloc和new申请一维和二维动态内存

C语言malloc方法申请一维和二维内存 #include<string.h> #include<stdio.h> //通过调用函数方式申请二维内存 int** malloc2D(int rows,int cols){int** ptrarray(int**)malloc(sizeof(int)*rows);if(ptrarrayNULL) return NULL;for(int i0;i<rows;i){ptrarray…...

js模拟点击事件

标题 var e document.createEvent("MouseEvents");e.initEvent("click", true, true);document.getElementById("clickme").dispatchEvent(e); //只要id 就好...

click me? no

解题思路&#xff1a;看到index.php&#xff0c;可能是文件包含漏洞&#xff0c;于是我去网上找了一下文件包含漏洞构造url&#xff0c;查看文件内容 http://114.67.246.176:15492/index.php?filephp://filter/readconvert.base64-encode/resourceindex.php得到一串代码 我用…...

VM3009:212 Component pages/index/index does not have a method handleClick to handle event tap.

使用taro开发小程序时&#xff0c;里边的事件处理。 原本我这样写&#xff08;阅读文档不仔细&#xff09;&#xff1a; <Button onClick"handleClick">确定</Button> 一直报错&#xff1a; 于是改成这种写法&#xff1a; <Button onClick{() >…...

BugkuCTF-WEB-flag在index里

这道题打开题目链接之后&#xff0c;页面只显示了一个名为“click me&#xff1f;no”的超链接&#xff0c;点开它。 点开之后可以发现页面变成的如图所示的样子&#xff0c;注意网页的url&#xff0c;根据url基本可以判断&#xff0c;这道题目属于文件包含类漏洞。 现在已知是…...

onclick事件改变元素的背景颜色

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>onclick事件</title><script type"text/javascript" src"$function.js"></script> </head> <body>…...

kotterKnife+dagger2+otto+okhttp+picasso+retrofit+rxjava示例项目,使用kotlin编写。

kotterKnifedagger2ottookhttppicassoretrofitrxjava示例项目&#xff0c;使用kotlin编写。 链接&#xff1a;https://github.com/zengzhihao/Tngou-kotlin 欢迎star qq交流群&#xff1a;185083261...

CocosCreater RichText的使用(点击事件处理)

RichText 使用说明详细官方文档&#xff1a;https://docs.cocos.com/creator/manual/zh/components/richtext.html?hrichtext RichText 组件用来显示一段带有不同样式效果的文字&#xff0c;你可以通过一些简单的 BBCode 标签来设置文字的样式。 目前支持的样式有&#xff1…...

jquery 调用 click 事件 的 三种 方式

jquery 调用 click 事件 的 三种 方式 第一种方式&#xff1a; $(document).ready(function(){ $("#clickme").click(function(){ alert("Hello World click"); }); 第二种方式&#xff1a; $(#clickmebind).bind("click", function(){ …...

【CTF题】使用文件包含漏洞读取网页代码

【CTF题】使用文件包含漏洞读取网页代码 按照我的理解文件包含漏洞是指网页后端php&#xff08;或其他&#xff09;代码中使用了include等文件包含语句&#xff0c;而且所包含的文件由变量控制&#xff0c;恰恰此变量又能通过GET或POST等方式进行修改所造成的。 1.直接包含内有…...

简单的使用python的tk模块创建图形界面

import tkinterdef insert_point():var e.get()t.insert("insert",var) # 将var中的内容插入到光标位置def insert_end():var e.get()t.insert("end",var) # 将var中的内容插入到该文本框的末尾# 设置窗口 window tkinter.Tk() window.geometry("…...

【解决】document.getelementbyid(XX).click失效

var carddocument.getElementById(login-link); if(document.createEvent){ var ev document.createEvent(HTMLEvents); ev.initEvent(click, false, true); card.dispatchEvent(ev); } else card.click();...

JAVA实验七 图形用户界面的设计与实现

一、实验目的 1&#xff0e;掌握图形界面设计。 2&#xff0e;掌握常用GUI控制组件及其事件处理。 二、实验内容 1&#xff0e;编程包含一个标签和一个按钮&#xff0c;单击按钮时&#xff0c;标签的内容在"你好"和"再见"之间切换。 2.设计一个窗口&…...

click是哪个键 wheel_Click是什么意思?键盘上的Click键在哪里?

Click是什么意思?还有它的读音、??答&#xff1a;click在电脑中通常译为&#xff1a;点击. 也就是点击进入黄金屋Clickwraps?答&#xff1a;“点击生效”的意思范例&#xff1a;生效的许可协议 Clickwrap licenses开封生效的许可协议 shrinkwrap licenses点击生效的合同 Cl…...

knockout click点击事件及事件源解释

绑定click点击事件示例 <body>youve clicked<span data-bind"text:number"></span><button data-bind"click:count">Click Me</button> </body> <script type"text/javascript">var viewModel{numbe…...

【JAVA】图形用户界面练习

试设计一窗口&#xff0c;内含一个按钮。开始运行时&#xff0c;按钮显示“Click Me”字样&#xff0c;当按钮按下时&#xff0c;按钮显示为“Click Me Again”字样&#xff0c;再按一次&#xff0c;则按钮显示“Click Me”字样&#xff0c;依次循环。import javax.swing.*;imp…...

1、ipywidgets

ipywidgets ipywidgets可以用于在jupyter notebook当中进行界面设计&#xff0c;以及一些简单的交互式控件操作。 官方文档有详细介绍&#xff0c;本文主要将常用的部件进行了演示&#xff0c;如需详细研究&#xff0c;请移步官方文档ipywidgets 一、安装 pip install ipyw…...

python创建按钮command怎么用_python图形界面tk 1.4 按钮(Button)

创建按钮和设置它们的文本属性#!/usr/bin/env python# -*- coding: utf-8 -*-import tkinter as tkfrom tkinter import ttkwin tk.Tk()win.title("Python GUI") # 添加标题aLabel ttk.Label(win, text"A Label") # 创建一个标签, text&#xff1a;显示标…...

滑动翻页效果实现和移动端click事件问题

前述 本文很短~ 主要是为了总结和讲述移动端click和js事件机制导致的一个问题。 &#xff08;&#xff1a;咳咳&#xff0c;其实几句话就能写完的还要水一篇文章&#xff0c;不愧是我… 正文 最近做了一个小活动&#xff0c;里面要用到一个效果&#xff1a;滑动翻页。大概是这…...

Java 练习题

编写一个 Application 并定义一个异常类&#xff0c;要求完成如下操作。定义一个 money 类&#xff0c;包括&#xff1a; 存款余额&#xff1a;成员变量 yu&#xff1b; 存款操作&#xff1a;方法 putMoney(double money) 取款操作&#xff1a;方法 getMoney(double money) …...

HTML渲染问题

链接&#xff1a;https://www.nowcoder.com/questionTerminal/da4115e308c948169a9a73e50d09a3e7 来源&#xff1a;牛客网 今天看到一个题目&#xff1a; 现有如下html结构“ <ul><li>click me</li><li>click me</li><li>click me<…...

axios.defaults.baseURL的三种配置方法

axios.defaults.baseURL的三种配置方法目录概述需求&#xff1a;设计思路实现思路分析1.少2.2.动态获取请求地址3.3.采用配置文件参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,m…...

DARE YOU CLICK ME???(你敢点我吗???)

别点&#xff0c;你会上当的 的的的&#xff0c; 洛谷团队...

试设计一个窗口,内含一个按钮。开始运行时,按钮显示“Click Me”字样,当按钮按下时,按钮显示为“Click Me Again”字样,再按一次,则按钮显示“Click Me”字样,依此循环。

试设计一个窗口&#xff0c;内含一个按钮。开始运行时&#xff0c;按钮显示“Click Me”字样&#xff0c;当按钮按下时&#xff0c;按钮显示为“Click Me Again”字样&#xff0c;再按一次&#xff0c;则按钮显示“Click Me”字样&#xff0c;依此循环。 package haha2; import…...

C#--Winform第三方控件资源汇总

最近在用C#Winform做一个关于GNSS作业仿真的软件&#xff0c;这次界面想做的和别人写的WPF一样炫酷些&#xff0c;然而自定义控件太麻烦&#xff0c;于是就到网络搜索轮子哥造好的轮子&#xff0c;随着编程世界的开源化和中国程序员的崛起&#xff0c;有越来越多的优秀作品被开…...

ClickME 隐私策略

1. 游戏“ClickME”&#xff08;下称游戏&#xff09;将会在您的本地文件中记录您获得的最高分数&#xff0c;这些分数仅用于在游戏中展示。 2. 您在游戏中获得的分数不会被收集和发布&#xff0c;除非您自己使用共享功能将之共享。 3. 游戏不会收集您的任何其他信息。...

iOS学习第一篇(ClickMe)01

2019独角兽企业重金招聘Python工程师标准>>> 入手macbook pro有一周的时间,感觉还不错.入手Mac不学习iOS开发完全是暴殄天物.Mac好用,个人用了之后,就再也不想使用linux和Windows了.好了,进入正题. 学习OBJC有四天的时间,准确的说十几个小时,对于有C/C背景的程序员,…...

Z参数的物理意义

Z11&#xff1a;端口2开路时&#xff0c;端口1的输入阻抗 Z12&#xff1a;端口1开路时&#xff0c;反向转移阻抗 Z21&#xff1a;端口2开路时&#xff0c;正向转移阻抗 Z22&#xff1a;端口1开路时&#xff0c;端口2的输出阻抗...

z590和z490的区别 哪个好

Z590-I 采用了 LGA 1200 插槽&#xff0c;支持 10 代和 11 代酷睿&#xff1b;82 相供电&#xff1b;支持 DDR4-5333 内存&#xff1b;配备双 M.2 插槽&#xff0c;其中一个支持 PCIe 4.0&#xff0c;显卡插槽也升级到 PCIe 4.0 *16。 主板选z590还是z490这些点很重要看过你就懂…...

天邑TY1208-Z刷机详细教程(免费 免拆)

一 、准备工作 准备一个u盘&#xff0c;下载当贝桌面apk和当贝市场到u盘中并且重命名为dangbei1.apk和dangbei2.apk 将u盘插入机顶盒的usb接口中&#xff0c;拔掉网线&#xff0c;启动机顶盒&#xff0c;点击机顶盒遥控器的设置&#xff0c;查看网络设置开启wifi按钮打开WiFi…...

z-libirary登录入口_z-libirary在线检测可用检测

z-libirary在线检测很容易就能获取到最新的地址z-libirary登录入口是一个图书类的网站&#xff0c;网站中有着大量的书籍&#xff0c;当出现官网打不开的情况一般是网络不佳造成的&#xff0c;更换一个新的网络在重新打开就好了。 z-libirary登录入口&#xff08;缩写为z-lib&…...

Z-Wave 700应用程序框架第一章 - Z-Wave协议概述

Z-Wave 700应用程序框架第一章 – Z-Wave协议概述Z-Wave 700应用程序框架第二章 – Z-Wave远程协议概述 Z-Wave 700应用程序框架第三章 – Z-Wave架构 Z-Wave协议是一种低带宽半双工协议&#xff0c;设计用于低成本控制网络中可靠的无线通信。该协议的主要目的是实现短消息的可…...

ZigBee Z-Stack 4.02 基本网络参数设置

【配套源码、文档、软件、硬件等资源&#xff0c;请移步技术交流群&#xff1a;拿破仑Matter/ZigBee&#xff08;263671349&#xff09;】 一、Device Types&#xff08;设备类型&#xff09; 在ZigBee网络中存在三种逻辑设备类型&#xff1a;Coordinator(协调器)、Router(路由…...

Delay Penalty for RNN-T and CTC

1. 背景 之前介绍了如何在 RNN-T 流式模型上应用时延正则&#xff0c;以及在 Conformer 和 LSTM 上的实验结果。 本期公众号重点带大家回顾下具体的思路&#xff0c;以及如何类似地在 CTC 流式模型上应用时延正则。 有些内容可能有所重复&#xff0c;读者可适当跳过。2. Dela…...

Docker安装和镜像加速

Docker的基本组成 镜像&#xff08;image&#xff09;Docker镜像就好比是一个目标&#xff0c;或者而说是模板&#xff0c;可以通过这个模板来创建容器服务&#xff0c;可以通过这个镜像创建多个容器&#xff0c;可以参考Java类和对象的相关。容器&#xff08;container&#x…...

硬件加速原理

DXVA是视频硬件加速的统称&#xff0c;不仅仅是视频数据解码(包括H261&#xff0c;MPEG1&#xff0c;MPEG2,H263,MPEG4), 还有Alphablending, Pictureresampling等。但对于播放时CPU利用率影响最大的&#xff0c;则是视频解码&#xff0c;尤其是HDTV的解码。对于低端系统来说&a…...

【Eureka】【源码+图解】【八】Eureka客户端的服务获取

【Eureka】【源码图解】【七】Eureka的下线功能 目录7. 获取服务7.1 初始化HeartBeat的task7.2 将task进一步包装成定时timerTask7.3 定时时间到&#xff0c;执行timeTask7.4 task获得线程资源&#xff0c;执行refreshRegistry()7.5 服务端接受请求7.6 获取Applications7. 获取…...

解密AI芯片的加速原理

网上对AI芯片的剖析实在太少&#xff0c;这里对一些论文和大佬的研究做一个总结&#xff0c;希望对读者有所帮助。AI 芯片的诞生讲到半导体&#xff0c;不得不从摩尔定律说起。从Intel创始人戈登摩尔提出摩尔定律到现在已经53年了。过去的53年中&#xff0c;半导体行业一直受着…...

Registry工作原理与镜像加速器

1.PUSH镜像 用户发送请求到index来下载镜像。 index 响应返回三个相关部分信息:该镜像位于的registry该镜像包括所有层的校验以授权目的Token用户通过响应中返回的Token和registry沟通,registry全权负责镜像,它存储基本的镜像和继承的层。registry现在要与index证实该token是…...

mybatis string转date

需求是进行列表查询&#xff0c;传如的参数是string&#xff0c;数据库的类型是timestamp&#xff08;对应java的date&#xff09; mybatis 中做一下处理&#xff1a; <if test"createBeginTime ! null and createBeginTime ! ">and create_time <![CDATA…...

mysql过滤查询结果,IF的使用

effect_start_date 生效开始时间&#xff0c;effect_end_date&#xff1a;生效截止时间。传入日期&#xff0c;查出在生效范围内的数据&#xff0c;如果是生效开始时间或者生效截止时间空的话&#xff0c;则去掉相应的比较条件&#xff1a; sql: SELECTmatch_flight_noFROMt_sh…...

Java Date 详解

Java Date 详解 1.java.sql.Date与java.util.Date比较① java.sql.Date 只有日期,没有时间② java.util.Date 时间日期都具备③ ResultSet.getDate(columnInt)取得的值是java.sql.Date类型,只有日期,没有时间,就算转换为java.util.Date同样没有时间④ java.sql.Timestamp 时间日…...

JS Date格式化为yyyy-MM-dd类字符串

方法一 转载 https://www.2cto.com/kf/201205/131240.html Date.prototype.format function(format) {var o {"M" : this.getMonth()1, //month"d" : this.getDate(), //day"h" : this.getHours(), //hour"m" : this.getMinut…...

vue new Date() 获取当前时间

日常工作笔记链接&#xff1a; http://fjfblog.com 1.new Date() 获取当前时间 created: function() {var aData new Date();console.log(aData) //Wed Aug 21 2019 10:00:58 GMT0800 (中国标准时间)this.value aData.getFullYear() "-" (aData.getMonth() 1) &…...

Date和String的互相转换(各种格式)

Java时间格式转换大全 import java.text.*; import java.util.Calendar; public class VeDate { /** * 获取现在时间 * * return 返回时间类型 yyyy-MM-dd HH:mm:ss */ public static Date getNowDate() { Date currentTime new Date(); SimpleDateFormat formatte…...

String、date转换和date日期比较大小

String转Date 例子&#xff1a; String dates "2017-03 02";SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM F");try {Date date sdf.parse(dates);System.out.println("日期的字符串&#xff1a;"date.toString());System.out.print…...

date 日期加一天

date 日期加一天 if(!params.get("aftercreatedate").equals("")){SimpleDateFormat snew SimpleDateFormat("yyyy-MM-dd");Date datenew Date();try{dates.parse((String)params.get("aftercreatedate")); //取时间}catch (ParseExce…...

date 时间作比较 时间时分秒显示

// today exitTime:0 // today < exitTime:<0 // today > exitTime:>0Date exitTime exitLog.getLastModifiedTime();int i today.compareTo(exitTime);if(i>0){long diffTime today.getTime() - exitTime.getTime();long day diffTime/(24...

java date赋空值,如何将java.util.date初始化为空

I need your help in initializing a java.util.Date variable to empty. As I am running the page and it is showing nullpointerexception if I didnt select any date.The code is:private java.util.Date date2;I tried to make that variable empty, but it didnt work...

js中获取时间new Date()详细介绍

1、var myDate new Date(); Date() 返回当日的日期和时间。 getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。 getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。 getMonth() 从 Date 对象返回月份 (0 ~ 11)。 getFullYear() 从 Date 对象以四位数字返回年份。 …...

实现javascript Date加减功能

function dateAddORSub(interval, type, number, myDate) {/** 功能:实现Date加减功能.* 参数:interval,字符串表达式&#xff0c;表示要添加的时间间隔.* 参数:number,数值表达式&#xff0c;表示要添加的时间间隔的个数.* 参数:type,加减类型.* 参数:myDate:格式&#xff1a;…...

java中关于Date的用法

先讲一讲Date中parse和format的用法&#xff1a; 看例子&#xff1a; public static void main(String[] args) {DateFormat dfatnew SimpleDateFormat("yyyyMMdd");try {Date datedfat.parse(new Date().toString());System.out.println(date.toString());}catch (…...

oracle if not exist,使用IF NOT EXISTS创建数据表

如果简单的使用如下sql语句可能会返回失败&#xff0c;失败的原因极有可能是已经存在这张数据表了。create table sales3 ( id NUMERIC,sale_date datetime not null)PARTITION by range(TO_DAYS(sale_date))(PARTITION sales20140301 values less than(TO_DAYS(2014-03-01)),…...

java timestamp 转date_如何在Java中将TimeStamp转换为Date?

问题在java中获取计数后如何将timeStamp转换为date&#xff1f;我目前的代码如下&#xff1a;public class GetCurrentDateTime {public int data() {int count 0;java.sql.Timestamp timeStamp new Timestamp(System.currentTimeMillis());java.sql.Date date new java.sql…...

Android Date时间工具类

需求&#xff1a; 安卓常用的时间工具类&#xff0c;长时间转换、星期判断、时间延后n天、提前n天、得到当前分、小时、时间差等 代码&#xff1a; package com.hsq.pos.util;import java.text.ParseException; import java.text.ParsePosition; import java.text.SimpleDat…...

javascript Date format(js日期格式化)

原文地址&#xff1a;https://www.cnblogs.com/zhangpengshou/archive/2012/07/19/2599053.html 方法一&#xff1a; // 对Date的扩展&#xff0c;将 Date 转化为指定格式的String // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符&#xff0c; // 年(…...

Date类型时间加一天

String etime request.getParameter("eTime"); SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd"); if(etime!null && !etime.equals("")){Date date sdf.parse(etime);Calendar cal Calendar.getInstance();cal.setTime(d...

js中date日期的使用总结

赋某日期为日期类型new Date(myYear,myMonth,myDate);//当myDate为0时&#xff0c;返回当前月份的上月末日期 当前日期 now new Date() 设置日期分钟为0 now.setMinutes(0) 设置当前日期秒为1 now.setSeconds(1&#xff09; 当前日期为本周的第几天,星期三返回3 nowDayOfWeek …...

Java Date日期比较

Java 日期比较 在开发过程中&#xff0c;我们可能会遇到选择日期&#xff0c;作为筛选条件&#xff0c;有个开始时间&#xff0c;和截止时间&#xff0c;但是在处理相关的逻辑的过程中&#xff0c;我们还是需要去判断&#xff0c;开始时间不能比截止时间大&#xff0c;自己在开…...

DATEDIF函数:

它是Excel隐藏函数&#xff0c;其在帮助和插入公式里面没有。 返回两个日期之间的年\月\日间隔数。常使用DATEDIF函数计算两日期之差 语法&#xff1a;DATEDIF(start_date,end_date,unit) Start_date 为一个日期&#xff0c;它代表时间段内的第一个日期或起始日期。(起始日期必…...

Date类常用方法总结

文章目录Date类两种Date类的区别和联系过时方法java.util.Date构造方法常用方法java.sql.Date构造方法常用方法Date类 Java中Date类型有两种&#xff1a;java.util包下的Date类&#xff0c;java.sql包下的Date类 两种Date类的区别和联系 java.util.Date为java.sql.Date类的父…...

京东水印主图测试教程 教你提升点击转化率

在运营京东店铺过程中,产品主图对于运营来说非常重要。因为产品主图很大程度上直接影响产品的转化率,如果你的店铺搜索流量不理想,就要抓紧时间测试产品主图了。 而搜索产品主图AB测试的核心就是让你的多套主图可以在搜索结果中展现,根据主图进行分流,这样我们就可以清楚…...

店宝宝:京东星主播能解决明星带货痛点吗?

近日,据媒体报道,京东宣布创作歌手苏醒以“京东星主播”的身份正式入住京东直播。“京东星主播”是京东专门为明星带货塑造的新的品牌,同时也是前不久京东启动的“双百计划”的一部分。 此前京东在直播带货业务有针对性的推出了“双百计划”。这个计划主要目的是引入百余位明星…...

弘辽科技:2020大学生开网店创业淘宝成最受青睐平台?

弘辽科技通过教育部的统计数据了解到&#xff0c;2020年全国普通高校毕业生874万人&#xff0c;较去年增加40万人。而《中国大学生创业报告》显示&#xff0c;2019年有超75%的受访在校大学生具有创业意愿。由于今年就业形势特殊&#xff0c;教育部也鼓励高校毕业生自主创业&…...

成都星志远:现在开拼多多网店靠谱吗?

在拼多多上面开通了网店之后&#xff0c;卖家们肯定也需要先去了解一下开拼多多网店是否是一件靠谱的事情&#xff0c;另外也要想办法去降低开拼多多网店的成本&#xff0c;成都星志远小编马上给各位支支招。 我们先来看一下背景。拼多多上市至今&#xff0c;市值已达240亿美元…...

京东小白如何快速掌握运营技巧

对于小白来说&#xff0c;运营一家店铺并非易事&#xff0c;更何况现在平台的规则是越来越多。小joy整理了一些小tips&#xff0c;就是为了帮助这些小白运营能够快速地掌握京东的运营技巧&#xff0c;那到底应该怎么做呢&#xff1f; 首先要了解京东电商团队的基础架构&#x…...

公众号自定义菜单跳转至小程序的指定页面(京东购物为例)的实现方法,小程序内跳转同理。

最近有个需求&#xff1a;在我们自己公众平台上的自定义菜单上&#xff0c;跳转至我们平台自己的小程序和京东的官方小程序上面。类似下图 京东跟其他的一些小程序还不太一样。记录一下解决方案。 跳转至其他小程序前提是你这个公众号需要关联你要跳转的小程序。有些小伙伴不太…...

京东直赔出现漏洞:多个网店卖家被坑

“秒杀”这个词经常网购的朋友一定不陌生。网络商家为促销而组织的网上限时抢购活动&#xff0c;由于商品价格低廉&#xff0c;往往一上架就被抢购一空&#xff0c;有时只用一秒钟。在一些网购网站上&#xff0c;秒杀专区是人气最高的地方&#xff0c;为了瞬间聚集人气&#xf…...

做小程序平台比开网店更挣钱吗?

从发展前景上看 目前&#xff0c;国内的电商渠道不断发展&#xff0c;淘宝、京东电商渠道是最早一波&#xff0c;随后拼多多、社区团购等不同方式的电商逐渐崛起&#xff0c;各大渠道的流量已见下降&#xff0c;流量和用户的增加已逐渐到天花板。 2020年微信日活跃用户已超越…...

Fear of the Dark @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

JMM 内存模型

多任务和高并发的内存交互 多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏&#xff0c;使用每秒事务处理数&#xff08;Transactions Per Second&#xff0c;TPS&#xff09;这个指标比较能说明问题&#xff0c;它代表着一秒内服务…...

JDJ杂志最新的java报表产品排行

注&#xff1a;本文源代码点此下载 楼上提的是非常专业的问题。致敬! 确实大部分excel式的产品都有这方面的问题。但是 [urlhttp://www.runqian.com.cn/rqrpt/rqwebreport.htm]润乾报表[/url] 这方面解决得很出色: 1.单元格的报表工具,就是公式多 楼上说的问题确实是对开发人员…...

Sparkling Text Effects @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

Java for Linux @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

Sorting Multidimensional Arrays @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

Java Security @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

Cisco Networking Simplified @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

Nokia 9210 Communicator @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

AtCoder Beginner Contest 287(A~E)

比赛名称&#xff1a;UNIQUE VISION Programming Contest 2023 New Year (AtCoder Beginner Contest 287) 比赛链接&#xff1a;AtCoder Beginner Contest 287 目录 A - Majority B - Postal Card C - Path Graph? D - Match or Not E - Karuta A - Majority 问字…...

RoboHelp Office 2000 @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

Less More @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

Black Duck Software @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

Discovering Distributed Objects @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

Oracle JServer Scalability and Performance @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

Using The Jtable @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

JDJ Interview: Kim Polese @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

Extending ColdFusion @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

Encoded Streams @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

NeXTensio2 @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

Looming Danger @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

Favorite ComboBox @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

编译的html帮助文件JDJ,学习Jenkins(二)

持续集成之③:将代码自动部署至测试环境一&#xff1a;本文在上一篇文章的基础之上继续进行操做&#xff0c;上一篇实现了从git获取代码并进行代码测试&#xff0c;本文将在上一篇的基础之上实现将代码部署至测试环境。1.1&#xff1a;新建一个项目叫web-demo-deploy用于代码发…...

编译的html帮助文件JDJ,DD-WRT固件的刷新方法

并不一定被认为是刷新固件唯一的标准方式&#xff0c;除非您被明确告知您必须使用这一方式(比如在您所拥有型号的刷新说明中)通常情况下您只需使用基于图形界面(GUI)的刷新方式&#xff1a;GUI方式适用于任何标准情况&#xff0c;请参照相关部分以获得详细信息使用网页界面刷写…...

项目的jdj和本地的jdk版本不一致

今天学习SpringBoot时启动项目时遇到这个问题Exception in thread "main" java.lang.UnsupportedClassVersionError: com/example/SpringBootSampleHelloworldApplication : Unsupported major.minor version 52.0 原因是项目的jdj和本地的jdk版本不一致导致的修改方…...

The Location API @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

JMaskField @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

JSpinner @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

JWizard @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

JComponentTree @ JDJ

<script type"text/javascript"></script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type"text/javascript"></script>...

Apache Spark 机器学习 特征转换 1

分词器&#xff08;Tokenizer&#xff09; 分词是一个处理过程&#xff0c;其将文本句子分割成一系列独立的单词词汇集合&#xff0c;Spark提供Tokenizer分词器类&#xff0c;其提供的功能是使用分隔符的方式处理文本句子的特征转换&#xff0c;Spark提供RegexTokenizer分词器…...

二叉树的度数和节点数的关系

度数 节点数的关系度数节点数-12*n2n1 n2 n1 n0 - 1n2 n0 -1 转载于:https://www.cnblogs.com/HITSZ/p/7825319.html...

树的节点数与度数的关系

若对于树来说&#xff0c;度为m的节点数为N(m)。 二叉树中&#xff0c;有N(0)N(2)1对于所有的树&#xff0c;有节点总数总度数1...

计算无向图结点度数

#include<stdio.h> int main() {int n, a[100][100], i, j, du;printf("顶点个数&#xff1a;");scanf("%d", &n); //n为顶点个数, deg为度for(i0;i<n;i){for(j0;j<n;j){scanf("%d", &a[i][j]);}}for(i0;i<n;i){du0; …...

Latex显示角度与度数

Latex显示角度使用\angle&#xff0c;例如\angle ABC显示为∠ABC\angle ABC∠ABC。   Latex显示度数使用\circ&#xff0c;例如90^{\circ}显示为90∘90^{\circ}90∘。...

有向图顶点的度数计算

有向图顶点的度数计算题目信息测试样例解答题目信息 求有向图所有顶点的出度与入度。 输入&#xff1a; 第一行为正整数N&#xff08;0<N<100&#xff09;&#xff0c;代表图中点的个数。 接下来N行&#xff0c;每行有N个数据&#xff0c;每个数据以空格分隔&#xff0c…...

matlab怎么表述度数,MATLAB基础(一):简介及数值数据特点与常用数学函数

前言&#xff1a;这学期已经忙得要死了&#xff0c;还作死报了数学建模&#xff0c;关键是选了数学建模选修课&#xff0c;还要写作业&#xff0c;那就学习一下MATLAB吧&#xff0c;算是了解一下擅长数值计算或者说科学计算的编程语言本系列博客记录MATLAB学习过程&#xff0c;…...

二叉树 度数和阶数的定义与区别

度&#xff08;Degree&#xff09; 的来自维基百科 Tree (data structure) 的定义 Degree For a given node, its number of children. A leaf is necessarily degree zero. The degree of a tree is the degree of its root.Degree of tree The degree of the root. 阶&#x…...

C++构造树(基于层次序列以及各节点度数)

#include<iostream> #include<stdlib.h> #include<stack>#define Max_Size 100 using namespace std;typedef struct treenode {char data;treenode *first;treenode *neighbor; }*Node;//初始化 void Init(Node *&root,char *data_c,int n) {for (int …...

构成无向简单图的度数序列条件_给定下列序列,哪一个可构成无向简单图的结点度数序列...

给定下列序列&#xff0c;哪一个可构成无向简单图的结点度数序列答&#xff1a;(1,1,2,2,2)马克思、恩格斯首次系统阐述唯物史观的著作是答&#xff1a;《德意志意识形态》以下关于操作系统的叙述中,错误的是答&#xff1a;Mac OS属于单任务系统对客观事物进行判断时,倾向于利用…...

B树的度数 阶数区别与联系

最近在复习数据结构的时候看到了B树的两种定义&#xff0c;一种是算法导论中的度数说&#xff1b;另一种是维基百科的阶数说。 在此记录一下&#xff1a; 度数&#xff1a;在树中&#xff0c;每个节点的子节点&#xff08;子树&#xff09;的个数就称为该节点的度&#xff08…...

有什么软件可以测试近视的度数,在家怎样测试视力度数,手机微信视力检测

上班看电脑、下班看手机&#xff0c;常与电子产品打交道的我们&#xff0c;可能因用眼过度、不良的用眼习惯对眼睛造成巨大伤害&#xff0c;比如视力下降。提到眼科检查&#xff0c;除了在学校做过体检测过视力&#xff0c;你有多久没对自己的视力进行检测了&#xff1f;去医院…...

Windows下gitee的注册和代码提交(图文并茂)

前言 对于我们的程序源来说&#xff0c;我们写的代码保存下来是很有必要的&#xff0c;是为了我们以后方便找到我们的代码&#xff0c;让我们的代码不被丢失。 我们上一篇文章&#xff0c;将了Linux系统下我们的三板斧的指令(点开这个就可以看在Linux下的操作)&#xff0c;这时…...

X 电容和Y电容

X电容和Y电容属于安规电容&#xff0c;安规电容指在电容失效后&#xff0c;不会导致点击&#xff0c;不会危及人身安全的电容。 X电容跨接在电力线两线&#xff08;L-N&#xff09;之间&#xff0c;一般选用金属薄膜电容&#xff0c;抑制差模干扰&#xff1b;Y电容分别跨接在电…...

Y电容和X电容

Y电容是分别跨接在交流输入线L - PE和N - PE之间的电容&#xff0c;就像英文字母Y&#xff0c;所以取名Y电容。(如图&#xff1a;CY1&#xff0c;CY2) 它和X电容都是安规电容&#xff0c;即电容失效后&#xff0c;不会导致电击&#xff0c;不危及人身安全。区别在X电容跨接在L&…...

转x电容和y电容的区别

X电容与Y电容的区别&#xff1a; X和Y电容都是安全电容&#xff0c;区别是X电容接在输入线两端用来消除差模干扰&#xff0c;Y电容接在输入线和地线之间&#xff0c;用来消除共模干扰&#xff1b; X电容采用塑封的方形高压CBB电容&#xff0c;CBB电容不但有更好的电气性能&…...

X电容Y电容如何选择与使用

X电容Y电容如何选择与使用X电容Y 电容&#xff0c;通常称为安规电容&#xff0c;是按照IEC 60384-14:2005进行认证的电容&#xff0c;如何正确的选择和使用X&#xff0c;Y电容才能够符合安规要求&#xff0c;改善产品的EMC性能&#xff1f;本文将从X&#xff0c;Y电容的基本特性…...

2种特殊电容:X电容和Y电容,

整理&#xff1a;黄工 素材来源&#xff1a;面包板社区 电容是电子电路中最常见的一种元器件&#xff0c;今天为大家分享2种特殊电容&#xff1a;X电容和Y电容。 一、安规电容 安规电容之所以称之为安规&#xff0c;它是指用于这样的场合&#xff1a;即电容器失效后&#xff…...

模拟电子_安规X电容和Y电容的区别与作用

模拟电子_安规X电容和Y电容的区别与作用 作者&#xff1a;jason-wrj 分类&#xff1a;模拟电子技术 标签&#xff1a;硬件电路&#xff0c;电子技术&#xff0c;模拟电子技术 更多&#xff1a;www.dioit.com——迪欧IT——嵌入式电子智能技术 一、安规电容的作用 安规电容…...

乾元通多卡聚合通信设备保障生态环境监测网络

针对目前城市大气环境监测网格化建设&#xff0c;推出的新一代城市网格化大气环境监测系统&#xff0c;可以实现城市区域环境多维一体化监测管理&#xff0c;该设备主要用于监测大气环境中的PM10、TSP、PM2.5等颗粒物浓度&#xff0c;还可以实现环境监控&#xff0c;测噪音、大…...

X电容(差模电容)和Y电容(共模电容)简介

性质&#xff1a;X电容和Y电容多应用于开关电源当中,都属于安规电容。安规电容是指用于这样的场合&#xff0c;即电容器失效后&#xff0c;不会导致电击&#xff0c;不危及人身安全。 X电容&#xff1a; 外观容值&#xff1a;多是黄色、方形&#xff0c;uF级别的电容。 作用&a…...

Unity学习笔记--实现一个简单的序列化反序列化工具

前言 最近需要实现一个序列化反序列化工具&#xff0c;由于数据不是很复杂&#xff0c;所以自己实现一个简单的工具 设计 首先得有一个数据类&#xff0c;比如PlayerDataPlayerData里面存储具体需要存储的数据类&#xff0c;比如需要存储Player身上一些碰撞体的数据&#xf…...