语音告警(一)——基于YOLOv5目标检测的语音告警

        当小火苗、山林大火和烟雾的置信度大于预设的阈值时,播放三个类别对应的语音实现语音告警。首先选取FFmpeg播放器来播放自己录制好的mp3文件,FFmpeg拥有LGPL/GPL许可和前沿音/视频编解码库libavcodec,使用方便,功能强大。虽然FFmpeg(Fast Forward mpeg视频编码标准)在Linux系统开发并且在Linux系统使用较多,但在windows系统下也同样可以用来录制、编解码、转换、流化音视频等。然后在命令行调测语音,语音正常播放之后,再最终进行语音告警模块的实现,语音告警实现流程如图1所示。

图1

        上图中第一步计算每四帧图像的最大置信度是为了解决人眼还没看到烟火时计算机已经识别到其中一帧大于阈值的问题,选取四帧计算最大值增加了可靠性;计算后的置信度大于阈值进入下一步,否则返回上一步继续等待,本文阈值设定为0.8count计数滤波相当于设置了一个滤波器,用较短的延时滤除掉一些小毛刺,减少误报的几率,提升准确性;使用time.time函数计算时间差是为了完整的播放语音,防止烟火出现时语音叠加,并且也便于后续编写语音的控制逻辑;时间差大于设定值时播放对应语音,否则返回上一步继续等待,设定值本文设置为3.0s,这个值取决于由语音的时长;最后播放对应语音时,首先使用‘start /b’开始播放语音,可以设置为后台启动,解决了播放语音时视频卡帧的问题,同时在后缀加上‘-autoexit’,播放完语音后自动退出,解决了语音播放完之后,窗口卡顿的问题,再加上‘-nodisp’,可以不显示语音播放窗口。

相关代码如下:(修改detect.py代码中)

1.在循环外添加初始化代码

# Get names and colorsspeed
names = model.module.names if hasattr(model, 'module') else model.names
colors = [[random.randint(0, 255) for _ in range(3)] for _ in names]

# Run inference
if device.type != 'cpu':
    model(torch.zeros(1, 3, imgsz, imgsz).to(device).type_as(next(model.parameters())))  # run once
t0 = time.time()
count = 0
tplay = 0

2.在循环内添加逻辑控制代码

if len(det):
    # Rescale boxes from img_size to im0 size

    value=det[:,4].max().item()#解决的是看到视频就报警 每取四个值 找到最大 大于0.8才告警
    if value>0.8:#大于0.8播放
        count += 1#count等于一个滤波 小延时 防止误报 10个数之后再报
        if count > 10:
            count = 0
            if time.time()-tplay > 2.5:#防止声音叠加 2.5s播放完再继续
                import os#
                os.system('start /b d:/ffmpeg/bin/ffplay.exe -autoexit -nodisp C:/Users/GR/Music/music.mp3')# 音乐播放
                #        start /b 后台启动    音乐播放软件      -autoexit 播放完毕自动退出 -nodisp不显示窗口        音乐位置
                tplay = time.time()#当前系统时钟
    det[:, :4] = scale_coords(img.shape[2:], det[:, :4], im0.shape).round()
  • 7
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是刺猬吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值