You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将YOLO输出作为其他程序的输入 实现未戴口罩语音提醒功能

口罩检测语音提示功能实现指南

1 提取YOLOv5检测结果

你已经完成自定义模型训练,只需修改官方detect.py的后处理逻辑即可拿到目标类别结果:
在遍历检测结果的代码段中,匹配without_mask对应的类别ID(假设你标注时with_mask为0、without_mask为1,可根据自己的数据集配置调整),代码示例:

# 位于detect.py的推理结果遍历逻辑中
CONF_THRESHOLD = 0.7 # 自行调整置信度阈值,避免误检
for *xyxy, conf, cls in reversed(det):
    class_id = int(cls)
    if class_id == 1 and conf > CONF_THRESHOLD:
        # 当前帧检测到未佩戴口罩目标
        current_frame_has_no_mask = True

2 添加防抖防重复触发逻辑

为了避免单帧误检导致的误播报,建议添加连续帧检测校验和播报冷却机制:

import time
# 全局变量维护状态
no_mask_frame_count = 0
FRAME_TRIGGER_THRESHOLD = 3 # 连续3帧检测到才触发
ALERT_COOLDOWN = 15 # 两次播报最小间隔15秒
last_alert_timestamp = 0

if current_frame_has_no_mask:
    no_mask_frame_count += 1
else:
    no_mask_frame_count = 0

# 判定是否需要触发播报
current_time = time.time()
if no_mask_frame_count >= FRAME_TRIGGER_THRESHOLD and (current_time - last_alert_timestamp) > ALERT_COOLDOWN:
    need_alert = True
    last_alert_timestamp = current_time
    no_mask_frame_count = 0 # 触发后重置计数

3 集成语音播报模块

根据运行环境选择对应方案即可:

  • Windows本地运行:直接调用系统SAPI接口,无需额外下载语音资源
import win32com.client
speaker = win32com.client.Dispatch("SAPI.SpVoice")
if need_alert:
    speaker.Speak("请佩戴口罩")
  • 跨平台运行(Windows/Linux/macOS):使用pyttsx3本地语音库,执行pip install pyttsx3安装后调用即可
import pyttsx3
engine = pyttsx3.init()
if need_alert:
    engine.say("请佩戴口罩")
    engine.runAndWait()
  • 需要自定义提示音:提前录制好mp3格式的提示音频,用playsound库播放,执行pip install playsound安装后调用
from playsound import playsound
if need_alert:
    playsound("your_custom_alert.mp3")

4 联调优化注意事项

  • 实时推理场景建议将语音播报逻辑放在子线程执行,避免阻塞YOLOv5的帧处理导致画面卡顿
  • 可根据实际使用场景调整置信度阈值、连续帧触发数量、播报冷却时间三个核心参数,平衡召回率和误触发率
  • 如果需要同时记录未佩戴口罩的抓拍图片,可在触发播报的同时调用cv2.imwrite保存当前帧即可

内容的提问来源于stack exchange,提问作者Sharma IP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:48:05