邯郸做网站的公司哪家好中山网络公司网站

张小明 2026/1/7 23:30:02
邯郸做网站的公司哪家好,中山网络公司网站,顺企网官网下载,权威的营销单页网站文章目录前言一.声纹模型的功能二.技术实现2.1 业务侧-预处理阶段2.2 模型侧-模型处理2.2.1 技术实现细节2.2.1.1音频预处理2.2.1.2 VAD分片2.2.1.3 模型特征预测2.2.1.4聚类与日志生成2.1.2.5后处理三.结语前言 也许此刻的坚持无人喝彩#xff0c;满是汗水与疲惫#xff0c;…文章目录前言一.声纹模型的功能二.技术实现2.1 业务侧-预处理阶段2.2 模型侧-模型处理2.2.1 技术实现细节2.2.1.1音频预处理2.2.1.2 VAD分片2.2.1.3 模型特征预测2.2.1.4聚类与日志生成2.1.2.5后处理三.结语前言也许此刻的坚持无人喝彩满是汗水与疲惫可最难的终究是坚持。“心之所向素履以往。生如逆旅一苇以航。” 我们只问自由、盛放、深情、初心与勇敢无问西东。这个时代并不缺少完美的人而是缺从自己心底给出真心、正义、无畏和同情的人 。上一篇说到funASR能够完整处理音频转文本那对于一些场景需要识别说话人身份并对说话人的说话内容进行截取分析。提升沟通效率和表达准确性。本篇介绍声纹模型主要功能和实现。本项目参考 夜雨飘零 的声纹识别实现并在此基础上进行功能补充和优化完整项目可见 mxr-voiceprint-recognition-pytorch本文将整体介绍这个声纹项目的目标、功能、核心技术以及应用价值。如果你正在学习声纹识别或希望在自己的业务中落地语音身份识别这篇文章会对你有所帮助。但其中项目的readme.md讲的已足够详尽本篇不会叙述太多仅讲解大致思路和各项功能详细请自行调试代码在项目中学习效果更佳。一.声纹模型的功能声纹识别对输入的音频文件进行分析提取声纹特征并判断说话人身份。可应用于门禁验证、会议记录、呼叫中心身份确认等场景。说话人日志对长时音频或多说话人音频进行分段、聚类与识别实现说话人的自动分离和日志记录方便后续的分析与检索。可用于会议纪要、访谈整理等。声纹对比对两个音频文件提取的声纹特征进行相似度计算判断是否为同一说话人。适合于身份验证、语音匹配等应用场景。二.技术实现2.1 业务侧-预处理阶段在应用层预处理统一音频格式交付声纹大模型虽然声纹模型也会自动处理但是文件大小不一致对网络传输和存储都有一定压力。在该阶段主要进行音频格式统一16kHz、单声道去噪、归一化、静音切除特征提取MFCC、Mel Spectrogram 等我探索了Java Sound和JAVE2包最终选择JAVE2处理。以下可供参考/** * 音频文件归一化 * 使用jave2工具包,处理wav文件为统一压缩格式 16k单声道 * className WavNormalizer * author YuanJie * date 2025/12/11 16:05 */publicclassWavNormalizerUtils{privatestaticfinallongFFMPEG_TIMEOUT20;publicstaticFileconvertTo16kMono(MultipartFileinputFile)throwsException{// 1.保存 MultipartFile 到临时文件StringoriginalNameinputFile.getOriginalFilename();if(originalNamenull||originalName.isEmpty()||!originalName.toLowerCase().endsWith(.wav)){thrownewBadCommonException(Invalid input file: originalName);}FiletempInputFile.createTempFile(upload_FilenameUtils.getName(originalName),.tmp);inputFile.transferTo(tempInput);// 2.输出文件FileoutputFilenewFile(originalName);// 3.设置音频参数// AudioAttributes audio new AudioAttributes();// audio.setCodec(pcm_s16le); // PCM 16-bit little-endian// audio.setChannels(1); // 单声道// audio.setSamplingRate(16000); // 16kHz//// EncodingAttributes attrs new EncodingAttributes();// attrs.setAudioAttributes(audio);//// // 4.执行转换// Encoder encoder new Encoder();// encoder.encode(new MultimediaObject(tempInput), outputFile, attrs);// 上述可替换为 ffmpegConvert(tempInput,outputFile); 处理 上述不支持音量和降噪标准化ffmpegConvert(tempInput,outputFile);// 5.删除临时输入文件tempInput.delete();returnoutputFile;}/** * 场景 推荐滤镜 * 空调噪声、办公室 afftdn * 风噪、车内 anlm * 麦克风底噪 afftdn * 电话回声 高通/带通 afftdn * 混杂噪声多人讲话 anlm 或 AI 模型 * 编码 PCM Signed 16-bit * 端序 Little-endian * 采样率 16000 Hz * 声道 1单声道 * 封装 WAV * * loudnorm EBU R128 响度标准滤镜 * 响度标准化 综合响度-16 LUFS * 真实峰值限制 1.5音爆限制 * 响度动态范围 11 LU */SneakyThrowsprivatestaticvoidffmpegConvert(Fileinput,Fileout){// FFmpeg 命令统一音量 16k 单声道 s16leListStringcmdList.of(ffmpeg,-hide_banner,-y,-i,input.getAbsolutePath(),-af,anlms8:r10:p0.8, loudnormI-16:TP-1.5:LRA11,-ar,16000,-ac,1,-acodec,pcm_s16le,out.getAbsolutePath());ProcessBuilderpbnewProcessBuilder(cmd);Processprocesspb.start();booleanokprocess.waitFor(FFMPEG_TIMEOUT,TimeUnit.SECONDS);if(!ok||process.exitValue()!0){thrownewRuntimeException(ffmpeg normalization failed.);}}}2.2 模型侧-模型处理我已在项目中提供模型web接口。可以参考web接口传输数据。后续可能会补充ws传输。声纹识别Speaker Identification流程大致为1.对音频进行归一化和预处理2.提取声纹特征向量3.与数据库中已注册的声纹向量进行匹配4.输出最可能的说话人说话人日志Speaker Diarization它的核心任务是将一段长音频拆分成多个说话人的片段并标注出“谁在什么时候说了什么”。它的流程大致为先做 Voice Activity DetectionVAD然后对每段音频提取向量再使用聚类算法本项目主要使用拉普拉斯矩阵的谱聚类方法区分说话人最后生成可阅读的日志声纹对比Speaker Verification给模型两个音频它可以判断这两段音频是不是同一个人说的本质上是计算两个声纹向量的相似度常用余弦相似度。2.2.1 技术实现细节本节主要讲比较复杂的说话人分离2.2.1.1音频预处理主要采用yeaudio.audio库为了提高模型健壮性项目对原始音频做了多种标准化处理统一采样率16kHz单声道Mono去噪如 anlm音量归一化如 loudnorm静音裁剪限幅与波形清洗2.2.1.2 VAD分片该小节也没什么好讲好的就是使用vad模型检测人声。语音具有明显的结构特点共振峰Formant声道衰减结构清浊音差异Voicing高频 fricatives 特征能量分布在 300hz–3400hz但不是均匀的等使用VAD模型更容易判断。2.2.1.3 模型特征预测声纹模型需要将音频转换为特征向量。常用特征包括MelSpectrogram为梅尔频谱FbankSpectrogram为语谱图MFCC梅尔频谱倒谱系数等等。这些特征比原始波形更能体现个体特有的声道特性。对VAD处理的有效片段载入cam等多说话人分离模型。转化为特征矩阵供后续聚类分离。声纹系统中前置模块是# 默认配置了FBank 滤波器组提取特征向量为啥选这个因为你可以参考readme.md的测试数据。self._audio_featurizerAudioFeaturizer(...)然后就是1.加载音频 统一采样率 统一响度 统一采样率如 16kHz dB 归一化 ndarray 转 float32 保留干净波形 input_dataself._load_audio(audio_data)audios_data1.append(input_data.samples)2.padding 对齐batchsorted(audios_data1,keylambdaa:a.shape[0],reverseTrue)max_audio_lengthbatch[0].shape[0]inputsnp.zeros((input_size,max_audio_length),dtypenp.float32)找出长度最长的音频按它的长度创建一个空矩阵 (batch_size, max_length)把短音频放进去多出来的部分用 0 补齐.类似于报文帧帮助区分有效帧和填充帧.但是为啥不用变长头因为这是要特征提取转化为统一矩阵啊喂# 告诉模型真实长度隐藏的 mask 信息input_lens_ratio.append(seq_length/max_audio_length)3.声学特征提取audio_featureself._audio_featurizer(inputs,input_lens_ratio)这一行就是 分离模型真正工作的地方将 wav→ 特征矩阵如 FBank处理 padding mask保证输出对齐、时长一致生成给 backbone 模型可接受的输入实现 原始变长音频 → 多帧声学特征T × D → 对齐后的特征批量4.声纹模型批量预测audio_feature 已经是统一形状 (batch, time, dim)声纹模型CAMPPlus / ResNet34 / ECAPA可以直接前向计算每条音频输出一个 192-d / 256-d / 512-d 的 embedding最终返回features:ndarray[batch_size,embedding_dim]2.2.1.4聚类与日志生成经过上述音频转特征值后即可聚类了。对每个语音片段生成声纹向量使用特定算法(拉普拉斯k-means等)进行聚类自动标注每段的说话人id项目中实现的 SpectralCluster 类基于非归一化拉普拉斯矩阵与特征间隙Eigengap技术能够在未知说话人数量的条件下自动推断聚类数量并获得更稳定的说话人分割效果。总体而言进行以下日志分离流程VAD有效片段提取→ 先构造相似度矩阵 → 拉普拉斯矩阵 → 求特征向量嵌入空间然后对这些低维谱嵌入做最终聚类。1.相似度矩阵staticmethoddefget_sim_mat(X):returnsklearn.metrics.pairwise.cosine_similarity(X,X)是为了构建 声纹片段之间的两两相似度矩阵可以简单理解为单位向量余弦值的计算用于后续的p_pruning修剪Laplacian拉普拉斯矩阵谱嵌入spectral embeddingKMeans 聚类2.P-Pruning 相似度修剪# 根据阈值pval修剪相似度矩阵Adefp_pruning(self,A):# 保护性调整当样本数 N 很小时将最小保留数限定为 6ifA.shape[0]*self.pval6:pval6./A.shape[0]else:pvalself.pval# 将较小的相似度强制设为 0。仅保留每行 最高的部分相似度。防止弱关系导致错误连边n_elemsint((1-pval)*A.shape[0])# 关联矩阵中的每一行中的前n_elems个最小值下标foriinrange(A.shape[0]):low_indexesnp.argsort(A[i,:])low_indexeslow_indexes[0:n_elems]# 用0替换较小的相似度值A[i,low_indexes]0returnA输入 A 是一个 相似度矩阵通常由 cosine_similarity(X,X) 得到形状为 N×N。然后目对相似度矩阵做 稀疏化pruning每一行只保留最相似的若干列把其它较小的相似度置为 0。这样可以把原来稠密的图每对样本都有边变成稀疏图有利于谱聚类的稳定性和去噪。3. 拉普拉斯矩阵Laplacian计算# 计算对称相似度矩阵M的拉普拉斯矩阵staticmethoddefget_laplacian(M):M[np.diag_indices(M.shape[0])]0Dnp.sum(np.abs(M),axis1)Dnp.diag(D)# 度矩阵LD-M# 非归一化拉普拉斯returnL我们构建图 G顶点每个音频片段边两个片段的相似度拉普拉斯矩阵具有图论意义通过 L 的特征向量可以获得更健壮的“低维空间聚类表示”。4. 特征间隙Eigengap自动估计聚类数量# 计算拉普拉斯矩阵L的谱嵌入并根据特征间隙或指定的oracle_num确定聚类数量defget_spec_embs(self,L,k_oracleNone):lambdas,eig_vecsscipy.linalg.eigh(L)ifk_oracleisnotNone:num_of_spkk_oracleelse:lambda_gap_listself.get_eigen_gaps(lambdas[self.min_num_spks-1:self.max_num_spks1])num_of_spknp.argmax(lambda_gap_list)self.min_num_spks embeig_vecs[:,:num_of_spk]returnemb,num_of_spk当不指定 oracle_num即不知道说话人数时计算特征值序列 λ --寻找 最大间隙eigengap--推断说话人数量这是谱聚类的核心优势可以自动决定 k 值而不像 KMeans 必须提前指定 k。很多场景我们都不知道一段音频有多少人说话。5.KMeans 对谱嵌入空间聚类经过上一轮特征聚类估计数量我们可以使用k-means聚类。在低维嵌入空间如 1550 维做 KMeans1.低维空间结构清晰 2.类簇分布更接近球状 3.KMeans 的缺陷被极大弱化。这也是谱聚类比直接 KMeans 准确得多的原因。其他算法性能反而会下降例如DBSCAN 偏向空间密度判断谱嵌入后的点往往密度均匀难以找到簇边界层次聚类在维度稍大时不稳定复杂度高GMM 会受到初始参数敏感效果不稳定。因此 谱聚类 K-Means 被认为是天然配套组合。K-Means 在高维小样本上数值稳定、计算快。我们之前是有做VAD的。2.1.2.5后处理也就是把处理结果转成一定的json格式返回。包括标签校正、片段合并、重叠区域分配和平滑处理。三.结语建议多看看项目这也就为了让你理解流程。这篇文章我有点摆了累了。特别的readme.md中已详细说明docker跨平台部署方案你可一键启动。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

域名时间与网站优化百度网站建设策划书范文

Linly-Talker在Google Cloud TPU环境运行尝试 在AI驱动的数字人技术正从实验室走向大规模落地的今天,一个核心挑战摆在开发者面前:如何让集成了语言理解、语音交互与面部动画的复杂系统,在保证高质量输出的同时实现低延迟、高并发的实时响应&…

张小明 2025/12/22 2:38:49 网站建设

网站开发 教学目标广东新闻联播今天

基于数据智能算法的小麦产量预测研究 1. 数据智能算法中的 GP 模型构建 在数据智能算法里,GP 模型的构建有一套特定流程: 1. 随机创建初始种群 :也就是随机生成计算机程序。 2. 执行具有最佳适应度值的程序 :挑选出适应度最优的程序来执行。 3. 生成新的计算机程…

张小明 2025/12/22 2:38:47 网站建设

如何用dw做旅游网站目录做网站建设哪家公司好

基于PaddleOCR的中文识别项目搭建:推荐使用conda与清华镜像源 在企业推进数字化转型的过程中,文档自动化处理已成为提升效率的关键一环。尤其是面对大量非结构化中文文本——如发票、合同、身份证件等,如何快速、准确地提取其中的文字信息&am…

张小明 2025/12/22 2:38:45 网站建设

微网站建设费用预算微模板如何建微网站

11个Project项目管理模板:让复杂项目变得简单高效 【免费下载链接】Project软件实用模板MPP文件11个场景模板 本仓库提供了一个名为“Project软件实用模板(MPP文件) 11个场景模板.zip”的资源文件下载。该文件包含了11个不同场景下的Project软件模板,适用…

张小明 2025/12/29 0:00:24 网站建设

网站开发流程哈尔滨网站建设还不如

企业级PaaS平台租户隔离深度解析:构建安全可靠的多团队协作环境 【免费下载链接】tsuru Open source and extensible Platform as a Service (PaaS). 项目地址: https://gitcode.com/gh_mirrors/ts/tsuru 在当今云原生技术快速发展的背景下,租户隔…

张小明 2025/12/28 14:43:14 网站建设

网站品牌推广设计net域名 著名网站

还在为心爱歌曲在不同平台间切换而烦恼吗?这款基于Vue.js开发的第三方web端音乐播放器,通过智能整合网易云音乐和QQ音乐两大平台资源,让您在一个界面中畅听所有歌曲,彻底告别版权限制的困扰。 【免费下载链接】NeteaseMusic Netea…

张小明 2026/1/6 6:36:42 网站建设