编写程序,统计办公室多人交谈,噪音时长,评估噪音对专注力,情绪的负面影响分值。
2026/6/8 20:51:31 网站建设 项目流程

一、实际应用场景描述(真实可落地)

在某智能健康管理课程中,一个典型场景是:

开放式办公区,多名员工同时交谈,产生持续背景噪声。

HR 与管理者希望量化:

- 噪声持续时间

- 对专注力的干扰程度

- 对员工情绪的潜在负面影响

本程序通过音频流分析,实现:

- ✅ 实时检测是否有人声(多人交谈)

- ✅ 统计噪声持续时长

- ✅ 基于时长与强度评估专注力下降分值

- ✅ 基于心理学常用模型估算情绪负面影响分值

二、引入痛点(工程视角)

痛点 技术含义

无法量化“吵不吵” 主观感受 ≠ 可度量数据

传统分贝仪只看能量 忽略“人声 vs 机械声”差异

没有历史趋势 无法做健康干预

难以与专注力挂钩 缺少评估模型

👉 本质是:音频信号 → 语义特征 → 健康指标

三、核心逻辑讲解(非 AI 黑盒)

1️⃣ 音频采集

- 使用

"sounddevice" 采集麦克风 PCM 数据

- 采样率:16000 Hz(语音识别标准)

2️⃣ 语音存在检测(VAD)

- 使用 WebRTC VAD

- 判断当前帧是否包含人声

3️⃣ 噪声时长统计

- 连续人声帧 → 累计时长

- 静音阈值打断计数

4️⃣ 专注力影响评分(工程模型)

专注力影响 = min(100, 噪声时长(秒) × 权重)

5️⃣ 情绪负面影响评分

参考心理声学简化模型:

情绪影响 = min(100, 噪声时长 × 0.3 + 强度因子)

四、项目结构

office_noise_monitor/

├── main.py # 主程序

├── audio_capture.py # 音频采集模块

├── vad_detector.py # 人声检测模块

├── evaluator.py # 专注力 & 情绪评估

├── config.py # 参数配置

├── README.md # 使用说明

└── knowledge_cards.md # 核心知识点卡片

五、核心代码(模块化 + 清晰注释)

config.py

# 基础配置参数

SAMPLE_RATE = 16000 # 采样率

FRAME_DURATION_MS = 30 # 每帧时长

VAD_AGGRESSIVENESS = 2 # VAD 灵敏度(0~3)

NOISE_THRESHOLD_SEC = 1.0 # 视为有效噪声的最小持续时长

audio_capture.py

import sounddevice as sd

import numpy as np

from config import SAMPLE_RATE

def audio_stream(callback):

"""

启动音频流

:param callback: 每帧音频回调函数

"""

with sd.InputStream(

samplerate=SAMPLE_RATE,

channels=1,

dtype="int16",

blocksize=int(SAMPLE_RATE * 0.03),

callback=callback

):

sd.sleep(60 * 60 * 1000) # 运行 1 小时示例

vad_detector.py

import webrtcvad

from config import FRAME_DURATION_MS, VAD_AGGRESSIVENESS

class VoiceActivityDetector:

def __init__(self):

self.vad = webrtcvad.Vad(VAD_AGGRESSIVENESS)

def is_speech(self, frame):

"""

判断当前帧是否为人声

"""

return self.vad.is_speech(frame, 16000)

evaluator.py

from config import NOISE_THRESHOLD_SEC

class NoiseEvaluator:

def __init__(self):

self.speech_start = None

self.total_noise_sec = 0

def update(self, is_speech, frame_duration_sec):

if is_speech and self.speech_start is None:

self.speech_start = frame_duration_sec

elif not is_speech and self.speech_start is not None:

duration = frame_duration_sec - self.speech_start

if duration >= NOISE_THRESHOLD_SEC:

self.total_noise_sec += duration

self.speech_start = None

def focus_impact_score(self):

# 简化模型:每分钟噪声扣 5 分

return min(100, int(self.total_noise_sec / 60 * 5))

def emotion_impact_score(self):

# 简化心理声学模型

return min(100, int(self.total_noise_sec * 0.3))

main.py

from audio_capture import audio_stream

from vad_detector import VoiceActivityDetector

from evaluator import NoiseEvaluator

vad = VoiceActivityDetector()

evaluator = NoiseEvaluator()

def callback(indata, frames, time, status):

frame = bytes(indata)

is_speech = vad.is_speech(frame)

evaluator.update(is_speech, 0.03)

audio_stream(callback)

print("噪声总时长:", evaluator.total_noise_sec)

print("专注力影响:", evaluator.focus_impact_score())

print("情绪影响:", evaluator.emotion_impact_score())

六、README.md

# Office Noise Monitor

## 简介

用于统计办公室多人交谈噪声时长,

并评估其对专注力与情绪的负面影响。

## 依赖安装

pip install sounddevice webrtcvad numpy

## 使用方式

python main.py

## 输出示例

噪声总时长: 540.2 秒

专注力影响: 45

情绪影响: 32

七、核心知识点卡片(去营销化)

知识点 说明

WebRTC VAD 轻量级人声检测算法

PCM 音频 原始音频采样数据

采样率 每秒采样次数,影响精度

帧处理 实时系统的核心思想

指标建模 工程评估 ≠ 医学诊断

模块化设计 解耦采集 / 检测 / 评估

八、总结(工程师视角)

✅ 本方案不依赖云端模型

✅ 完全本地运行,符合隐私合规

✅ 模型可替换(机器学习 / 深度学习)

✅ 适合作为智能健康管理课程的教学级案例

利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询