基于wenet和模型做企业直播敏感语音屏蔽技术

本文介绍了基于Wenet语音识别工具包的实时敏感词屏蔽技术方案。该方案通过客户端缓存25秒直播内容,利用Wenet的流式识别和断句检测功能,实时检测讲师语音中的敏感词,并将对应位置的语音替换为"哔"声。文章详细阐述了Wenet的两种识别方式(流式/非流式)、三种部署方案及其性能指标,重点说明了客户端4.x的接入方案:采用流式识别+智能断句方式,在子线程处理敏感词检测,主推流流程不受影响,最大延迟不超过25秒。该技术可在直播过程中实现敏感内容的实时自动屏蔽。

 直播敏感语音,实现"哔哔"屏蔽技术。 

直播场景实际应用中的需求:在客户端直播的时候,实时检测讲师的语音内容,检测到敏感词后,自动把对应的语音内容用“哔”声代替 。

客户端缓存25s直播内容,在语音识别引擎识别到屏蔽词后,找到屏蔽词在语音缓存的位置,将语音内容替换为“哔”声的语音内容。

1. wenet简述:

Wenet是出门问问语音团队联合西工大语音实验室开源的一款面向工业落地应用的语音识别工具包,该工具用一套简洁的方案提供了语音识别从训练到部署的服务。

1.1. wenet识别方式

流式:语音以实时流的方式推入引擎;(识别结果不太准确,较快)

非流式:语音以一整段语音的方式推入引擎。(识别结果较准确,较慢)

断句检测:如果语音以流式推入引擎,则需要断句检测,原理参考:

WeNet 更新:支持 Endpoint 检测

Endpoint 检测是语音识别系统的重要组成部分,可以提高人机交互的效能和质量。它的任务是确定用户何时结束讲话,这对于实时长语音转写和语音搜索等交互式语音应用非常重要。

最近,WeNet 的更新则支持了 endpoint 的检测。有了 endpoint 检测,我们就可以愉快地进行实时长语音转写了。下面将从实现原理和应用方面介绍 endpoint 检测和实时长语音转写的使用。

①. 识别出文字之前,检测到了 5s 的静音;

②. 识别出文字之后,检测到了 2s 的静音;

③. 解码到概率较小的 final state,且检测到了 1s 的静音;

④. 解码到概率较大的 final state,且检测到了 0.5s 的静音;

⑤. 已经解码了 20s。

注意:wenet同时支持流失、非流失、以及断句检测。当数据以流失输入wenet时,wenet可在返回流式结果的同时智能断句,并返回整句的最终结果。

1.2. wenet部署方案

①. 部署在端上:win64、mac-intel64、Linux-64;

APP直接调用wenet接口(C++)-(本次demo采用)

②. 部署在服务器上:Linux-docker

APP调用websocket接口,上传音频,由服务器通过websocket返回结果。

1.3. wenet延时性能

①. 处理延时:处理10s音频不超过1s;

②. 模型带来的流式延时:不超过0.4s;

③. 断句并重打分计算:不超过0.14s。

1.4. 参考资料

https://github.com/wenet-e2e/wenet

Welcome to wenet’s documentation! — wenet documentation

https://zhuanlan.zhihu.com/p/349586567

1.5.WeNet Endpoint 实现

WeNet 中 endpoint 检测相关代码的实现在 decoder/ctc_endpoint.h 和 decoder/ctc_endpoint.cc 中。

// 遍历每一个时间步
for (int t = 0; t < ctc_log_probs.size(0); ++t) {torch::Tensor logp_t = ctc_log_probs[t];// 获取当前时间步 blank 标签的概率float blank_prob = expf(logp_t[config_.blank].item<float>());// 解码帧数加一num_frames_decoded_++;// 判断 blank 标签的概率是否大于阈值(默认 0.8)if (blank_prob > config_.blank_threshold) {// 是,则尾部 blank 标签的帧数加一num_frames_trailing_blank_++;} else {// 否,则尾部 blank 标签的帧数置零num_frames_trailing_blank_ = 0;}
}

三条规则的表示如下所示,可以手动添加更多的规则或者更改规则中的时间,以满足各种不同场景下的需求。

// rule1 times out after 5000 ms of silence, even if we decoded nothing.
CtcEndpointRule rule1;
// rule2 times out after 1000 ms of silence after decoding something.
CtcEndpointRule rule2;
// rule3 times out after the utterance is 20000 ms long, regardless of
// anything else.
CtcEndpointRule rule3;CtcEndpointConfig(): rule1(false, 5000, 0), rule2(true, 1000, 0), rule3(false, 0, 20000) {}

2. 基于保利威客户端4.x接入方案

2.1. 采用的识别方式

①.流失:数据以流失推入wenet;

②.断句:由于流失实时识别结果并不准确,且不带时间戳,无法准确定位音频。因此,使用wenet的断句功能,断句后获取整句结果;

2.2. 原理

①. 接入方式:4.x采用直接调用wenet-C++接口的方式接入;

②. 延时直播:识别方式采用流失+智能断句的方式,断句最长会导致20s延时,加上其他延时,因此,最长不超过25s。 

③. 主流程不打断:OBS的采集→编码→缓冲→推流,该流程不会进行任何阻塞。 wenet识别→敏感词检测均在子线程处理,若无法找到敏感词对应的音频数据包,则会直接丢弃。

配图企业直播客户端软件接入敏感语音屏蔽技术

 我的热门文章汇总:

  • 开通微信视频号直播需要满足哪些条件?
  • 彻底永久关闭WIN10系统的自动更新(操作步骤)
  • 视频码率、帧率、分辨率、视频标清、高清、全高清的全面介绍与参考表
  • Thinkpad电脑系列产品进入Bios设置和U盘启动(重装系统)
  • 网线水晶头接法图解详细8根线芯顺序排序图示

我的在线教育原创文章汇总:

  • Vue3框架对接保利威云点播播放器的实践(实例)
  • 视频点播web端AI智能大纲(自动生成视频内容大纲)的代码与演示
  • html5视频播放器的断点续播和记忆播放是如何做的?
  • 视频安全之视频防盗链和视频防盗录
  • 课程学习网站视频禁止拖拽快进是如何做的?

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

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

相关文章

42.MySQL视图

1.一个需求emp 表的列信息很多&#xff0c;有些信息是个人重要信息 (比如 sal, comm, mgr, hiredate)&#xff0c;如果我们希望某个用户只能查询 emp 表的 (empno、ename, job 和 deptno ) 信息&#xff0c;有什么办法&#xff1f;表的数据&#xff1a;想让用户查询到的&#x…

MinIO01-入门

零、文章目录 MinIO01-入门 1、介绍 &#xff08;1&#xff09;介绍 MinIO 是一款基于 Apache License v2.0 的开源对象存储系统&#xff0c;专为海量非结构化数据&#xff08;如图片、视频、日志文件等&#xff09;设计&#xff0c;兼容 Amazon S3 API&#xff0c;支持高性…

*Docker数据卷(Volume)核心机制剖析:持久化与共享的终极解决方案

根本问题当容器被删除时&#xff0c;其内部产生的所有文件&#xff08;包括配置文件、数据库、日志&#xff09;都会不可逆丢失。数据卷&#xff08;Volume&#xff09;通过外置存储方案彻底解决此痛点。一、数据卷与普通容器存储对比实验 场景1&#xff1a;无卷模式下的写入悲…

原型模式在C++中的实现与面向对象设计原则

引言 在软件开发中&#xff0c;原型模式是一种常用的设计模式&#xff0c;主要用于创建对象的克隆。通过原型模式&#xff0c;我们可以避免复杂的对象创建过程&#xff0c;尤其是当对象的初始化需要大量资源或复杂操作时。本文将通过一个具体的例子&#xff0c;详细介绍如何在C…

SpringCloud学习------Gateway详解

在微服务架构中&#xff0c;随着服务数量的激增&#xff0c;如何统一管理服务入口、实现请求路由、保障服务安全等问题日益突出。SpringCloud Gateway 作为 Spring 官方推出的网关组件&#xff0c;凭借其强大的功Gateway 是 Spring 官方基于 Spring、SpringBoot 和 Project Rea…

计算机网络:子网掩码在路由转发中的关键作用

在路由表中,子网掩码是一个不可或缺的组成部分,其核心作用是精确界定IP地址中“网络位”和“主机位”的边界,从而实现路由器对数据包的准确转发。以下从多个角度详细解释其必要性: 1. 区分网络位与主机位,定位目标网络 IP地址由“网络标识”(网络位)和“主机标识”(主…

14.Home-新鲜好物和人气推荐实现

新鲜好物实现1.准备模板<script setup>import HomePanel from ./HomePanel.vue</script><template><homePanel></HomePanel><!-- 下面是插槽主体内容模版<ul class"goods-list"><li v-for"item in newList" :ke…

Linux 系统重置用户密码指南

Linux 系统重置用户密码指南 在 Linux 系统运维中&#xff0c;重置用户密码&#xff08;尤其是 root 密码&#xff09;是一项核心技能。当您忘记密码时&#xff0c;可以通过进入单用户模式或恢复模式来修改密码。此方法适用于大多数 Linux 发行版&#xff0c;如 RHEL/CentOS、D…

[自动化Adapt] GUI交互(窗口/元素) | 系统配置 | 非侵入式定制化

第三章&#xff1a;GUI交互&#xff08;窗口/元素&#xff09; 各位OpenAdapt探索者&#xff0c;欢迎回来~ 在第一章&#xff1a;录制引擎中&#xff0c;我们揭示了OpenAdapt如何通过"眼睛和耳朵"捕捉所有操作细节。接着在第二章&#xff1a;数据模型中&#xff0c…

Java 模版进阶

文章目录模版通配符模版 通配符 实例 import java.util.ArrayList; import java.util.List;class Message<T> {private T message ;public T getMessage() {return message;}public void setMessage(T message) {this.message message;} } public class test {public …

统计鱼儿分布情况 Java

假设有一个池塘&#xff0c;管理员在池塘中添加随机数量的鱼类&#xff0c;为了统计鱼类的分布情况&#xff0c;他将池塘划分为8*8的二维网格&#xff0c;鱼儿随机游动&#xff0c;但是每个网格中最多容纳100条鱼&#xff0c;要求编写程序显示鱼儿分布情况&#xff0c;并计算鱼…

【HUST】计算机|大学计算机基础内容(纯科普向)+数据结构数组、树、队列【旧文搬运】

最初发布时间&#xff1a;2020-09-19 23:17:48 以前写这篇文章&#xff0c;主要是接触到一些非计算机学院的同学&#xff0c;为了交流方便我写下了这篇文章……虽然现在回过头来看写得也比较草率&#xff0c;但确实是我对电脑的基础操作的最早的认识&#xff0c;放到现在我绝对…

CRT调试堆检测:从原理到实战的资源泄漏排查指南

在C/C开发中&#xff0c;内存泄漏和资源管理不当是导致程序崩溃、性能下降的常见原因。微软提供的C运行时库&#xff08;CRT&#xff09;内置了强大的调试工具&#xff0c;能够帮助开发者在开发阶段及时发现并修复资源泄漏问题。本文将深入解析CRT调试堆的工作原理&#xff0c;…

filezilla出现connected refused的时候排查问题

问题描述: 系统是ubuntu20.04&#xff0c;使用filezilla&#xff0c;两个主机之间能够ping通&#xff0c;但是filezilla使用sftp连接的时候显示的是 FATAL ERROR: Connection refused Could connect to the server应该如何排查问题呢 这是一个非常典型的SFTP连接问题。“Connec…

FPGA 基本设计思想--乒乓操作、串并转换、流水线

乒乓操作&#xff08;Ping-Pong&#xff09;的理解&#xff1a;为什么是另一种pipeline&#xff1f;-CSDN博客 FPGA菜鸟学习笔记——2、四大设计思想 - 知乎 乒乓操作&#xff08;Ping-Pong&#xff09;-CSDN博客 乒乓操作原理与FPGA设计-CSDN博客 乒乓操作 — [野火]FPGA …

2023 年 6 月 GESP Python 二级试卷真题+答案+解析

2023 年 6 月 GESP Python 二级试卷解析 一、单选题&#xff08;每题 2 分 &#xff0c;共 30 分&#xff09; 1 、 高级语言编写的程序需要经过以下&#xff08; &#xff09;操作&#xff0c;可以生成在计算机上运行的可执行代码。 A. 编辑 B. 保存 C. 调试…

数据对齐:如何处理时间序列与空间对齐问题?

在多模态学习中&#xff0c;不同模态&#xff08;文本、语音、图像、视频、传感器数据等&#xff09;具有不同的采样率、时间步长、空间分辨率。例如&#xff0c;视频是连续帧&#xff0c;音频是高采样频率的波形&#xff0c;文本是离散符号序列。为了实现有效融合&#xff0c;…

两个任务同一个调用时间 CRON:0 0 3 * * ?,具体如何调度的,及任务如何执行的

xxLjob两个任务 pullGuanjiaSalesJob&#xff0c;不同的执行参数&#xff0c;配置了同一个 XxlJob("pullGuanjiaSalesJob")两个任务同一个调用时间 CRON&#xff1a;0 0 3 * * ?&#xff0c;具体如何调度的&#xff0c;及任务如何执行的在 XXL-JOB 中&#xff0c;当…

【基于WAF的Web安全测试:绕过Cloudflare/Aliyun防护策略】

当Cloudflare或阿里云WAF矗立在Web应用前端&#xff0c;它们如同智能护盾&#xff0c;过滤恶意流量。然而&#xff0c;真正的Web安全测试不止于验证防护存在&#xff0c;更需挑战其边界——理解并模拟攻击者如何绕过这些先进防护&#xff0c;才能暴露深藏的风险。这不是鼓励攻击…

使用YOLOv8-gpu训练自己的数据集并预测

本篇将教学使用示例代码训练自己的数据集&#xff08;train&#xff09;以及预测&#xff08;predict&#xff09;。 目录 一、代码获取 二、训练 1、添加自己的训练集 2、创建训练集设置文件 3、 修改训练代码中数据集设置文件 4、开始训练 三、预测 1、 修改图片路径…