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

语音识别——根据声波能量、VAD 和 频谱分析周围是否有人说话

语音活动检测(Voice Activity Detection,简称VAD)。简单来说,VAD就是用来判断一段音频里有没有人说话的技术。在实时语音识别的场景里,这个技术特别重要,因为它决定了什么时候把采集到的音频数据扔进大模型里处理。

但问题来了:怎么精准判断“最佳时机”呢?用如果固定时间间隔的方法,问题就大了——间隔太短,模型会频繁启动,浪费算力,还抓不住完整的一句话;间隔太长,文字输出就会拖拖拉拉,用户体验直接崩掉。

为了解决这个难题,大家常用webrtcvad库里的VAD_MODE方法。它通过分析音频的波动特征,智能判断有没有人说话,然后触发语音识别流程。这个方法在安静环境下表现不错,但实际测试发现,它在复杂环境里(比如白噪音很大或者特别安静的场景)灵敏度不够,根本做不到真正的自适应识别。

所以,需要换个思路!把声波能量检测、VAD和频谱分析这三兄弟结合起来,通过验证多重机制,精准判断音频里有没有有效语音活动。这样不仅能大幅提升语音信号捕捉的准确性,还能把背景噪音过滤掉,确保输出的文字又快又准。

下面是基于这三种技术的语音检测系统代码实现,能实时判断音频里有没有语音活动。一步一步拆开看:

1. 参数配置

  • AUDIO_RATE:音频采样率(16000 Hz),决定了音频的频率分辨率。

  • CHUNK_SIZE:每次处理的音频块大小(480 采样点),对应 30 毫秒的音频数据。

  • VAD_MODE:VAD 模式(0-3),数值越小越保守,用于控制语音活动检测的灵敏度。

# 参数配置
AUDIO_RATE = 16000       # 采样率:16000(支持8000, 16000, 32000或48000)
CHUNK_SIZE = 480         # 每块大小(30ms,保证为10/20/30ms的倍数)
VAD_MODE = 1             # VAD模式(0-3,数值越小越保守)

2. 初始化 VAD

  • 使用 webrtcvad 库的 Vad 类,初始化语音活动检测器。

# 初始化VAD
vad = webrtcvad.Vad(VAD_MODE)

3. SpeechDetector 类

这是代码的核心部分,封装了语音检测的逻辑。

(1) 初始化
  • calibration_seconds:校准背景噪音所需时间(默认 2 秒)。

  • chunk_duration_ms:每块音频的时长(默认 30 毫秒)。

  • calibrated:标记是否完成背景噪音校准。

  • amplitude_threshold:背景噪音的自适应阈值。

  • speech_state:当前状态(语音活动或非语音活动)。

  • consecutive_speechconsecutive_silence:连续语音帧和静音帧的计数器。

  • required_speech_framesrequired_silence_frames:用于状态转换的阈值(例如,连续 3 帧语音确认进入语音状态)。

(2) 校准背景噪音
  • calibrate 方法

    • 录制固定时长的背景噪音(默认 2 秒),计算音频的平均幅值和标准差。

    • 设置自适应阈值为 均值 + 2×标准差,用于后续的能量检测。

    • 校准完成后,calibrated 标记为 True

(3) 频谱分析
  • analyze_spectrum 方法

    • 对音频块应用 汉宁窗 减少频谱泄漏。

    • 计算 FFT(快速傅里叶变换)得到频谱。

    • 统计频谱中超过均值 1.5 倍的局部峰值数量。

    • 如果峰值数量大于等于 3,则认为该音频块具有语音特征。

(4) 综合判断
  • is_speech 方法

    • 能量检测:通过幅值均值与阈值比较,过滤低能量数据。

    • VAD 检测:使用 webrtcvad 判断是否为语音活动。

    • 频谱检测:通过频谱分析进一步验证语音特性。

    • 只有当 能量检测、VAD 和频谱分析 三者同时满足时,才认为当前音频块为语音。

(5) 状态平滑
  • process_chunk 方法

    • 对每一块音频数据进行综合判断。

    • 使用 连续帧策略 避免短时噪音导致的误判:

      • 如果连续检测到语音活动(required_speech_frames 帧),则确认进入语音状态。

      • 如果连续检测到静音(required_silence_frames 帧),则确认退出语音状态。

 


class SpeechDetector:def __init__(self, calibration_seconds=2, chunk_duration_ms=30):"""calibration_seconds: 校准背景噪音所需时间(秒)chunk_duration_ms: 每块时长(毫秒)"""self.calibration_seconds = calibration_secondsself.chunk_duration_ms = chunk_duration_msself.calibrated = Falseself.amplitude_threshold = None# 连续帧判决参数(降低短时噪音误判)self.speech_state = False         # 当前状态:True为语音,False为无语音self.consecutive_speech = 0       # 连续语音帧计数self.consecutive_silence = 0      # 连续静音帧计数self.required_speech_frames = 3   # 连续3帧语音后确认进入语音状态(约90ms)self.required_silence_frames = 5*5  # 750ms 连续5帧静音后退出语音状态(约150ms)def calibrate(self, stream):"""校准背景噪音:录制固定时长音频,计算平均幅值与标准差,从而设置自适应阈值"""print("开始校准背景噪音,请保持安静...")amplitudes = []num_frames = int(self.calibration_seconds * (1000 / self.chunk_duration_ms))for _ in range(num_frames):audio_chunk = stream.read(CHUNK_SIZE, exception_on_overflow=False)audio_data = np.frombuffer(audio_chunk, dtype=np.int16)amplitudes.append(np.abs(audio_data).mean())mean_noise = np.mean(amplitudes)std_noise = np.std(amplitudes)# 阈值设置为均值加2倍标准差self.amplitude_threshold = mean_noise + 2 * std_noiseprint(f"校准完成:噪音均值={mean_noise:.2f},标准差={std_noise:.2f},设置阈值={self.amplitude_threshold:.2f}")self.calibrated = Truedef analyze_spectrum(self, audio_chunk):"""通过频谱分析检测语音特性:1. 对音频块应用汉宁窗后计算 FFT2. 统计局部峰值数量(峰值必须超过均值的1.5倍)3. 当峰值数量大于等于设定阈值时,认为该块具有语音特征"""audio_data = np.frombuffer(audio_chunk, dtype=np.int16)if len(audio_data) == 0:return False# 使用汉宁窗减少FFT泄露window = np.hanning(len(audio_data))windowed_data = audio_data * window# FFT计算得到频谱(只需正频率部分)spectrum = np.abs(np.fft.rfft(windowed_data))# 使用均值作为参考,统计超过均值1.5倍的局部峰值数量spectral_mean = np.mean(spectrum)peak_count = 0for i in range(1, len(spectrum) - 1):if spectrum[i] > spectrum[i - 1] and spectrum[i] > spectrum[i + 1] \and spectrum[i] > spectral_mean * 1.5:peak_count += 1# 参数阈值:这里设定至少需要3个峰值(可根据实际情况调整)return peak_count >= 3def is_speech(self, audio_chunk):"""综合判断:先通过能量预处理(阈值)过滤低能量数据,再利用VAD和频谱分析判断语音。两者结合能有效降低噪音导致的误判。"""# 使用背景校准得到的阈值(若未校准则取较低默认值)amplitude_threshold = self.amplitude_threshold if self.amplitude_threshold is not None else 500# 能量检测audio_data = np.frombuffer(audio_chunk, dtype=np.int16)amplitude = np.abs(audio_data).mean()if amplitude < amplitude_threshold:return False# VAD检测vad_result = vad.is_speech(audio_chunk, AUDIO_RATE)# 频谱检测spectral_result = self.analyze_spectrum(audio_chunk)# 仅当两种检测均为True时,认为当前块为语音return vad_result and spectral_resultdef process_chunk(self, audio_chunk):"""对每一块数据进行处理:综合能量检测、VAD、频谱分析,并采用连续帧策略实现状态平滑。"""is_speech_chunk = self.is_speech(audio_chunk)# 连续帧计数策略if is_speech_chunk:self.consecutive_speech += 1self.consecutive_silence = 0else:self.consecutive_silence += 1self.consecutive_speech = 0# 状态转换逻辑if not self.speech_state and self.consecutive_speech >= self.required_speech_frames:self.speech_state = Trueprint("Detected Speech")elif self.speech_state and self.consecutive_silence >= self.required_silence_frames:self.speech_state = Falseprint("No speech")

4. 主程序

  • 初始化音频流:使用 pyaudio 打开麦克风输入流。

  • 校准背景噪音:在程序启动时调用 calibrate 方法。

  • 实时监听:进入循环,逐块处理音频数据,检测语音活动。

  • 退出机制:通过键盘中断(Ctrl+C)停止程序。

    p = pyaudio.PyAudio()stream = p.open(format=pyaudio.paInt16,channels=1,rate=AUDIO_RATE,input=True,frames_per_buffer=CHUNK_SIZE)detector = SpeechDetector()# 校准背景噪音(建议在程序启动时进行)detector.calibrate(stream)print("开始监听,请开始说话...(按Ctrl+C停止)")try:while True:audio_chunk = stream.read(CHUNK_SIZE, exception_on_overflow=False)detector.process_chunk(audio_chunk)except KeyboardInterrupt:print("停止监听")finally:stream.stop_stream()stream.close()p.terminate()

 完整代码

import pyaudio
import webrtcvad
import numpy as np# 参数配置
AUDIO_RATE = 16000       # 采样率:16000(支持8000, 16000, 32000或48000)
CHUNK_SIZE = 480         # 每块大小(30ms,保证为10/20/30ms的倍数)
VAD_MODE = 1             # VAD模式(0-3,数值越小越保守)# 初始化VAD
vad = webrtcvad.Vad(VAD_MODE)class SpeechDetector:def __init__(self, calibration_seconds=2, chunk_duration_ms=30):"""calibration_seconds: 校准背景噪音所需时间(秒)chunk_duration_ms: 每块时长(毫秒)"""self.calibration_seconds = calibration_secondsself.chunk_duration_ms = chunk_duration_msself.calibrated = Falseself.amplitude_threshold = None# 连续帧判决参数(降低短时噪音误判)self.speech_state = False         # 当前状态:True为语音,False为无语音self.consecutive_speech = 0       # 连续语音帧计数self.consecutive_silence = 0      # 连续静音帧计数self.required_speech_frames = 3   # 连续3帧语音后确认进入语音状态(约90ms)self.required_silence_frames = 5*5  # 750ms 连续5帧静音后退出语音状态(约150ms)def calibrate(self, stream):"""校准背景噪音:录制固定时长音频,计算平均幅值与标准差,从而设置自适应阈值"""print("开始校准背景噪音,请保持安静...")amplitudes = []num_frames = int(self.calibration_seconds * (1000 / self.chunk_duration_ms))for _ in range(num_frames):audio_chunk = stream.read(CHUNK_SIZE, exception_on_overflow=False)audio_data = np.frombuffer(audio_chunk, dtype=np.int16)amplitudes.append(np.abs(audio_data).mean())mean_noise = np.mean(amplitudes)std_noise = np.std(amplitudes)# 阈值设置为均值加2倍标准差self.amplitude_threshold = mean_noise + 2 * std_noiseprint(f"校准完成:噪音均值={mean_noise:.2f},标准差={std_noise:.2f},设置阈值={self.amplitude_threshold:.2f}")self.calibrated = Truedef analyze_spectrum(self, audio_chunk):"""通过频谱分析检测语音特性:1. 对音频块应用汉宁窗后计算 FFT2. 统计局部峰值数量(峰值必须超过均值的1.5倍)3. 当峰值数量大于等于设定阈值时,认为该块具有语音特征"""audio_data = np.frombuffer(audio_chunk, dtype=np.int16)if len(audio_data) == 0:return False# 使用汉宁窗减少FFT泄露window = np.hanning(len(audio_data))windowed_data = audio_data * window# FFT计算得到频谱(只需正频率部分)spectrum = np.abs(np.fft.rfft(windowed_data))# 使用均值作为参考,统计超过均值1.5倍的局部峰值数量spectral_mean = np.mean(spectrum)peak_count = 0for i in range(1, len(spectrum) - 1):if spectrum[i] > spectrum[i - 1] and spectrum[i] > spectrum[i + 1] \and spectrum[i] > spectral_mean * 1.5:peak_count += 1# 参数阈值:这里设定至少需要3个峰值(可根据实际情况调整)return peak_count >= 3def is_speech(self, audio_chunk):"""综合判断:先通过能量预处理(阈值)过滤低能量数据,再利用VAD和频谱分析判断语音。两者结合能有效降低噪音导致的误判。"""# 使用背景校准得到的阈值(若未校准则取较低默认值)amplitude_threshold = self.amplitude_threshold if self.amplitude_threshold is not None else 500# 能量检测audio_data = np.frombuffer(audio_chunk, dtype=np.int16)amplitude = np.abs(audio_data).mean()if amplitude < amplitude_threshold:return False# VAD检测vad_result = vad.is_speech(audio_chunk, AUDIO_RATE)# 频谱检测spectral_result = self.analyze_spectrum(audio_chunk)# 仅当两种检测均为True时,认为当前块为语音return vad_result and spectral_resultdef process_chunk(self, audio_chunk):"""对每一块数据进行处理:综合能量检测、VAD、频谱分析,并采用连续帧策略实现状态平滑。"""is_speech_chunk = self.is_speech(audio_chunk)# 连续帧计数策略if is_speech_chunk:self.consecutive_speech += 1self.consecutive_silence = 0else:self.consecutive_silence += 1self.consecutive_speech = 0# 状态转换逻辑if not self.speech_state and self.consecutive_speech >= self.required_speech_frames:self.speech_state = Trueprint("Detected Speech")elif self.speech_state and self.consecutive_silence >= self.required_silence_frames:self.speech_state = Falseprint("No speech")def main():p = pyaudio.PyAudio()stream = p.open(format=pyaudio.paInt16,channels=1,rate=AUDIO_RATE,input=True,frames_per_buffer=CHUNK_SIZE)detector = SpeechDetector()# 校准背景噪音(建议在程序启动时进行)detector.calibrate(stream)print("开始监听,请开始说话...(按Ctrl+C停止)")try:while True:audio_chunk = stream.read(CHUNK_SIZE, exception_on_overflow=False)detector.process_chunk(audio_chunk)except KeyboardInterrupt:print("停止监听")finally:stream.stop_stream()stream.close()p.terminate()if __name__ == "__main__":main()

相关文章:

语音识别——根据声波能量、VAD 和 频谱分析周围是否有人说话

语音活动检测&#xff08;Voice Activity Detection&#xff0c;简称VAD&#xff09;。简单来说&#xff0c;VAD就是用来判断一段音频里有没有人说话的技术。在实时语音识别的场景里&#xff0c;这个技术特别重要&#xff0c;因为它决定了什么时候把采集到的音频数据扔进大模型…...

C++算法优化实战:破解性能瓶颈,提升程序效率

C算法优化实战&#xff1a;破解性能瓶颈&#xff0c;提升程序效率 在现代软件开发中&#xff0c;算法优化是提升程序性能的关键手段之一。无论是在高频交易系统、实时游戏引擎&#xff0c;还是大数据处理平台&#xff0c;算法的高效性直接关系到整体系统的性能与响应速度。C作…...

阿里滑块 231 231纯算 水果滑块 拼图 1688滑块 某宝 大麦滑块 阿里231 验证码

声明 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; # 欢迎交流 wjxch1004...

vs code Cline 编程接入Claude 3.7的经济方案,且保持原生接口能力

在当今快速发展的科技时代&#xff0c;自动化编程成为提高工作效率的重要手段。Cline AI自动编程工具&#xff0c;凭借其强大的智能算法&#xff0c;能够快速生成高质量的代码&#xff0c;帮助开发者节省大量的时间和精力。从简单的脚本到复杂的应用程序&#xff0c;Cline都能轻…...

kubectl命令补全以及oc命令补全

kubectl命令补全 1.安装bash-completion 如果你用的是Bash(默认情况下是)&#xff0c;先安装补全功能支持包 sudo apt update sudo apt install bash-completion -y2.为kubectl 启用补全功能 会话中临时&#xff1a; source <(kubectl completion bash)持久化配置&#x…...

css解决边框四个角有颜色

效果 html <div class"gradient-corner">2021年</div>css background:/* 左上角横线 */linear-gradient(90deg, rgb(5, 150, 247) 9px, transparent 0) 0 0,/* 左上角竖线 */linear-gradient(0deg, rgb(5, 150, 247) 9px, transparent 0) 0 0,/* 右上…...

快速入手K8s+Docker+KubeSphere+DevOps

引用&#xff1a;云原生Java架构师的第一课K8sDockerKubeSphereDevOps_哔哩哔哩_bilibili 学习K8sDockerKubeSphereDevOps的可以学习该视频...

Spark-SQL核心编程

DataFrame 创建 DataFrame 在 Spark SQL 中 SparkSession 是创建 DataFrame 和执行 SQL 的入口&#xff0c;创建 DataFrame 有三种方式&#xff1a;通过 Spark 的数据源进行创建&#xff1b;从一个存在的 RDD 进行转换&#xff1b;还可以从 Hive Table 进行查询返回。 从…...

Go 1.24 新方法:编写性能测试用例方法 testing.B.Loop 介绍

Go 开发者在使用 testing包编写基准测试用例时&#xff0c;如果不注意&#xff0c;可能会遇到各种陷阱。这些陷阱&#xff0c;导致基准测试结果不准确。Go1.24 版本引入了一种新的基准测试编写方式&#xff0c;它同样易用&#xff0c;并且可以帮助规避编写基准测试时的一些坑。…...

【神经网络结构的组成】深入理解 转置卷积与转置卷积核

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;《深度学习理论直觉三十讲》_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 …...

GpuGeek:重构AI算力基础设施,赋能产业智能升级

在数字经济与实体经济深度融合的今天&#xff0c;人工智能已成为推动产业变革的核心驱动力。作为AI技术落地的关键支撑&#xff0c;算力基础设施正经历从"资源供给"向"服务赋能"的范式转变。GpuGeek凭借创新的技术架构和运营模式&#xff0c;重新定义了AI算…...

(2025亲测可用)Chatbox多端一键配置Claude/GPT/DeepSeek-网页端配置

1. 资源准备 API Key&#xff1a;此项配置填写在一步API官网创建API令牌&#xff0c;一键直达API令牌创建页面创建API令牌步骤请参考API Key的获取和使用API Host&#xff1a;此项配置填写https://yibuapi.com/v1查看支持的模型请参考这篇教程模型在线查询 2. ChatBox网页版配…...

质变科技发布自主数据分析MCP Server

2025年4月9日&#xff0c;质变科技正式发布Relyt AI MCP&#xff08;Model Context Protocol&#xff09;&#xff0c;结合Relyt AI 在自主数据分析领域的前沿积累与MCP的开放连接能力&#xff0c;我们为用户带来了一个更智能、更灵活的数据交互生态系统。这一发布不仅拓展了Re…...

【17】Strongswan bus详解2

add_listener&#xff1a; &#xff08;1&#xff09;初始化一个entry&#xff0c;并将要添加的listener赋值entry。 &#xff08;2&#xff09;添加到bus的listeners链表的尾部。 remove_listener&#xff1a; &#xff08;1&#xff09;遍历listeners&#xff0c;通过内存位置…...

【Windows】系统安全移除移动存储设备指南:告别「设备被占用」弹窗

Windows系统安全移除移动存储设备指南&#xff1a;告别「设备被占用」弹窗 解决移动硬盘和U盘正在被占用无法弹出 一、问题背景 使用Windows系统时&#xff0c;经常遇到移动硬盘/U盘弹出失败提示「设备正在使用中」&#xff0c;即使已关闭所有可见程序。本文将系统梳理已验证…...

DeepSeek 与开源:肥沃土壤孕育 AI 硕果

当 DeepSeek 以低成本推理、多模态能力惊艳全球时&#xff0c;人们惊叹于国产AI技术的「爆发力」&#xff0c;却鲜少有人追问&#xff1a;这份爆发力的根基何在&#xff1f; 答案&#xff0c;藏在中国开源生态二十余年的积淀中。 从倪光南院士呼吁「以开源打破垄断」&#xf…...

[从零开始学数据库] 基本SQL

注意我们的主机就是我们的Mysql数据库服务器 这里我们可以用多个库 SQL分类(核心是字段的CRUD)![](https://i-blog.csdnimg.cn/img_convert/0432d8db050082a49258ba8a606056c7.png) ![](https://i-blog.csdnimg.cn/img_convert/bdf5421c2b83e22beca12da8ca89b654.png) 重点是我…...

uniapp开发android原生插件-java版本

一、uniapp官方文档 uni原生插件文档 二、开发流程 1、检测本地uniapp的版本号 2、根据版本号&#xff0c;下载uni提供的对应android的sdk对应demo 下载地址&#xff1a;Android 离线SDK - 正式版 | uni小程序SDK 下载文件后&#xff0c;复制出UniPlugin-Hello-AS&#xff…...

git在IDEA中使用技巧

git在IDEA中使用技巧 merge和rebase 参考&#xff1a;IDEA小技巧-Git的使用 git回滚、强推、代码找回 参考&#xff1a;https://www.bilibili.com/video/BV1Wa411a7Ek?spm_id_from333.788.videopod.sections&vd_source2f73252e51731cad48853e9c70337d8e cherry pick …...

DeepSeek 接入 Excel 完整教程

一、前期准备 1.1 获取 DeepSeek API 密钥 注册 DeepSeek 平台 访问 DeepSeek 官方网站&#xff08;或指定的 API 服务平台&#xff0c;如硅基流动等&#xff09;。若尚未注册&#xff0c;按照平台指引创建新账号并完成登录。 创建 API 密钥 进入用户控制面板&#xff0c;找到…...

【项目管理】第15章 项目风险管理-- 知识点整理

项目管理-相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应:第6章-第19章 第6章 项目管理概论 4分第13章 项目资源管理 3-4分第7章 项目…...

如何将自己的项目推送到GitHub上面去

将项目推送到GitHub的流程总结 以下是将本地项目推送到GitHub仓库的完整流程&#xff1a; 1. 初始化Git仓库&#xff08;如果尚未初始化&#xff09; cd 项目目录 git init2. 配置远程仓库 # 添加远程仓库地址 git remote add origin https://github.com/用户名/仓库名.git…...

C/C++基础

C开发环境 纯语言开发要求&#xff1a;CIDE。 极简C/C 语法规则 仅记原始规则&#xff0c;把握编程的本质&#xff0c;不做孔乙己&#xff0c;要做说干就干的平头哥。 原始的规则&#xff1a; 各“语法单位”&#xff08;组成部分&#xff09;使用任意个&#xff08;至少1个…...

Qt炫酷仪表盘

Qt学习优化的一款汽车仪表控件,根据github上面开源的进行优化,主要使用QPainter实现的一款炫酷仪表盘,其中的渐变效果比较有感觉 实现结果 仪表盘 实现源码 h文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPixmap> #include <QTimer&…...

云渗透一(云租户渗透⼊⻔)

云平台介绍 阿⾥云 阿⾥云创⽴于 2009 年,服务着制造、⾦融、政务、交通、医疗、电信、能源等众多领域的领军企业,包 括中国联通、12306 、中⽯化、中⽯油、⻜利浦、华⼤基因等⼤型企业客户,以及微博、知乎、锤⼦科技 等明星互联⽹公司。 应⽤程序访问令牌 - T1527 云实例…...

R绘图|6种NMDS(非度量多维分析)绘图保姆级模板——NMDS从原理到绘图,看师兄这篇教程就够了

感谢西农听雨同学对本文提供的大力支持&#xff01; 一、引言 非度量多维尺度分析&#xff08;NMDS&#xff09;是一种用来简化复杂数据的工具&#xff0c;特别适合处理那些难以直接理解的高维数据&#xff08;微生物群落数据&#xff09;。它的主要目的是把数据“压缩”到更低…...

spark-SQL核心编程

1. Spark-SQL简介 起源与发展&#xff1a;Spark-SQL前身为Shark&#xff0c;因对Hive依赖制约Spark发展而被弃用。它汲取Shark优点重新开发&#xff0c;在数据兼容、性能优化和组件扩展方面表现出色。 特点&#xff1a;易整合&#xff0c;统一数据访问&#xff0c;兼容Hive&…...

使用MCP服务通过自然语言操作数据库(vscode+cline版本)

使用MCP服务操纵数据库(vscodecline版本) 本文主要介绍&#xff0c;在vscode中使用cline插件调用deepseek模型&#xff0c;通过MCP服务器 使用自然语言去操作指定数据库。本文使用的是以己经创建号的珠海航展数据库。 理解MCP服务&#xff1a; MCP&#xff08;Model Context…...

.NET Core DI(依赖注入)的生命周期及应用场景

在.NET中&#xff0c;依赖注入&#xff08;DI&#xff0c;Dependency Injection&#xff09;是一种设计模式&#xff0c;它通过将依赖关系注入到类中&#xff0c;而不是让类自己创建依赖项&#xff0c;来降低类之间的耦合度。这使得代码更加模块化、灵活和易于测试。在.NET中&a…...

VSCode写java时常用的快捷键

首先得先安好java插件 1、获取返回值 这里是和idea一样的快捷键的&#xff0c;都是xxxx.var 比如现在我new一个对象 就输入 new MbDo().var // 点击回车即可变成下面的// MbDo mbDo new MbDo()//以此类推get方法也可获取 mbDo.getMc().var // 点击回车即可变成下面的 // St…...

Java微服务流量控制与保护技术全解析:负载均衡、线程隔离与三大限流算法

在微服务架构中&#xff0c;流量控制与系统保护是保障服务高可用的核心要素。本文将深入剖析负载均衡原理、线程隔离机制&#xff0c;并通过Java代码实例详解滑动窗口、漏桶、令牌桶三大限流算法&#xff0c;帮助开发者构建健壮的分布式系统。 一、负载均衡核心原理与实践 1.1 …...

Java 企业级应用:SOA 与微服务的对比与选择

企业级应用开发中&#xff0c;架构设计是决定系统可扩展性、可维护性和性能的关键因素。SOA&#xff08;面向服务的架构&#xff09;和微服务架构是两种主流的架构模式&#xff0c;它们各自有着独特的和设计理念适用场景。本文将深入探讨 SOA 和微服务架构的对比&#xff0c;并…...

Nacos深度剖析与实践应用 -1

&#x1f4f9; Nacos背景 在现在数字化快速发展的时代&#x1f684;&#xff0c;微服务架构已成为构建大型分布式系统的主流架构模式。随着微服务数量的不断增加&#xff0c;服务之间的通信、配置管理以及服务的高可用性等问题变得愈发复杂。Nacos 作为阿里巴巴开源的一个动态服…...

WinForm真入门(16)——LinkLabel 控件详解

以下是 WinForm 中 LinkLabel 控件的基本概念、核心属性、事件及典型应用案例的总结&#xff1a; 一、基本概念‌ LinkLabel 是 WinForm 中用于显示超链接文本的控件&#xff0c;继承自 Label&#xff0c;支持单链接或多链接区域。用户点击链接时可触发自定义行为&#xff0…...

功能丰富的PDF处理免费软件推荐

软件介绍 今天给大家介绍一款超棒的PDF工具箱&#xff0c;它处理PDF文档的能力超强&#xff0c;而且是完全免费使用的&#xff0c;没有任何限制。 TinyTools&#xff08;PC&#xff09;这款软件&#xff0c;下载完成后即可直接打开使用。在使用过程中&#xff0c;操作完毕后&a…...

【MySQL高级】事务,存储引擎,索引(一)

Mysql高级 DQL查询语句 反引号 模糊查询避免%出现在开头,会造成索引失效 order by排序先后 表名列名都需要用${}&#xff0c;他们不能带’’ 去重统计数量 null的运算 分组函数会自动忽略null&#xff0c;不用对null进行处理 截取子串substr&#xff08;字段&#xff0c;下标…...

React 之 Redux 第三十二节 Redux 常用API及HOOKS,以及Redux Toolkit核心API使用详解

一、4.X版本中核心 API 和用途 1. createStore(reducer, [preloadedState], [enhancer]) 用途: 创建 Redux Store&#xff08;数据仓库&#xff09; 参数: reducer: 状态更新函数 preloadedState: 初始状态&#xff08;可选&#xff09; enhancer: 中间件增强器&#xff08;如…...

react tailwindcss最简单的开始

参考教程&#xff1a; Install Tailwind CSS with Vite - TailwindCSS中文文档 | TailwindCSS中文网https://www.tailwindcss.cn/docs/guides/vite操作过程&#xff1a; Microsoft Windows [版本 10.0.26100.3476] (c) Microsoft Corporation。保留所有权利。D:\gitee\tailwi…...

波束形成(BF)从算法仿真到工程源码实现-第九节-延迟相减波束形成(delay sub)

一、概述 本节对delay sub算法进行仿真。更多资料和代码可以进入https://t.zsxq.com/qgmoN &#xff0c;同时欢迎大家提出宝贵的建议&#xff0c;以共同探讨学习。 二、代码仿真 import numpy as np import soundfile as sf import scipy import matplotlib.pyplot as pltfft…...

系统假死问题排查

系统假死定义 应用进程存在&#xff0c;但是无法正常提供服务&#xff08;请求没有响应&#xff0c;或者响应超时&#xff09;。 系统假死原因 主要分为两大类&#xff1a;连接无法建立、请求无法处理&#xff0c;如下图所示&#xff1a; 系统假死的原因还是比较多的&…...

图像处理有哪些核心技术?技术发展现状如何?

在数字化信息爆炸的时代&#xff0c;文档图像预处理技术正悄然改变着我们处理文字信息的方式。无论是手持拍摄的收据、扫描仪中的身份证&#xff0c;还是工业机器人采集的复杂文档&#xff0c;预处理技术都在背后默默提升着OCR&#xff08;光学字符识别&#xff09;系统的性能。…...

解决在linux下运行rust/tauri项目出现窗口有内容,但是渲染出来成纯黑问题

起因 最近折腾了一下rust/tauri程序开发&#xff0c;据说这玩意性能非常牛皮就玩了一下&#xff0c;但是我运行打包一直出现一个奇怪问题&#xff0c;窗口能正常打开&#xff0c;但是是纯黑的什么内容都没有&#xff0c;鼠标移上去又发现指针会变换&#xff08;看起来是内容又…...

计算机网络:流量控制与可靠传输机制

目录 基本概念 流量控制&#xff1a;别噎着啦&#xff01; 可靠传输&#xff1a;快递必达服务 传输差错&#xff1a;现实中的意外 滑动窗口 基本概念 换句话说&#xff1a;批量发货排队验收 停止-等待协议 SW&#xff08;发1份等1份&#xff09; 超时重传&#xff1a;…...

vue2改变el-message字体、图标尺寸样式(vue2,element-ui)

前言 最近接手一个项目&#xff0c;vue2elementui的,产品觉得message的字体太小了&#xff0c;展示起来看不清&#xff0c;所以需求就是把message的字体和图标变大&#xff0c;实现路径如下&#xff1a; 找到自己的main.scss文件&#xff0c;并且加上对应内容&#xff1a; .e…...

【笔记ing】AI大模型-05单层感知机与多层感知机

单层感知机&#xff0c;是一种最简单的人工神经网络 输入层input layer&#xff0c;输入的样本特征 输出层output layer&#xff0c;输出的预测结果 权值W(w0,w1,w2,...,wn)^T&#xff0c;感知机的权值参数&#xff0c;其中的w0叫做偏置&#xff0c;也称截距&#xff0c;类似…...

分布式热点网络

核心设计理念&#xff1a; 在自然灾害&#xff08;地震、洪水、台风&#xff09;、极端环境&#xff08;无人区&#xff09;及网络管制&#xff08;欠费停机&#xff09;等场景下&#xff0c;传统中心化网络易因核心节点失效导致全局瘫痪。本方案提出构建去中心化设备网络&…...

为 docker 拉取镜像配置代理

为 Docker 配置代理&#xff0c;有 两个层面 的操作&#xff1a;(1) Docker 守护进程&#xff08;用于拉取镜像等操作&#xff09;&#xff0c;(2) Docker 容器内部&#xff08;容器内应用的网络流量&#xff09;。 我们这篇文章着重于前者&#xff0c;以下是详细步骤&#xff…...

人工智能与云计算:技术融合与实践

1. 引言 人工智能(AI)和云计算是当今科技领域最具变革性的两项技术。AI通过模拟人类智能解决问题,而云计算则提供了弹性可扩展的计算资源。两者的结合创造了前所未有的可能性,使企业能够以更低的成本部署复杂的AI解决方案。 本文将探讨AI与云计算的技术融合,包括核心概念、…...

GIT的一些操作

git仓库迁移&#xff0c;包括所有分支和标签 git clone --mirror http://git./test-frontend.git test-frontend 克隆项目到 test-frontend文件夹下&#xff0c;--mirror 表示所有分支和标签 cd test-frontend 切到目录下 git remote add bd http://git./new-frontend.git …...

大模型——Crawl4AI入门指南

大模型——Crawl4AI入门指南 本快速入门指南介绍了Crawl4AI,涵盖了基本用法、先进功能(例如分块和提取策略)以及异步编程。用户将学习如何实现各种爬虫技术,包括截图、JSON提取和动态内容爬取。 1. 什么是Crawl4AI? Crawl4AI 是一个强大的异步网络爬虫库,旨在简化信息…...