【问题标题】:play sound if object is detected检测到物体时播放声音
【发布时间】:2018-10-25 20:47:53
【问题描述】:

我正在使用树莓派开发对象检测模型。我使用 Google 的 Object Detection API 来检测模型,我的问题是如何在检测到特定类的对象(例如人类(即 'id' : 22))时播放声音。

我试了一下,得到的代码是这样的,

if 22 in classes:
    threading.Thread(play_sound()).start()
def play_sound():
    pygame.init()
    pygame.mixer.music.load("")
    pygame.mixer.music.play(1,0.0)
    pygame.time.wait(5000)
    pygame.mixer.stop()

在这段代码中,我遇到的问题是

  1. 声音甚至在检测到对象之前就开始播放,我尝试调试但不知道为什么。
  2. 我又开始同一个话题了
  3. 如果我使用不同的线程,pi 会耗尽资源并停止整个执行

有没有办法让它工作?

提前致谢

【问题讨论】:

  • 问题实际上与machine-learningobject-detection 无关 - 请不要向标签发送垃圾邮件(已删除)。
  • 作为一个正交问题,我建议您将pygame.init()pygame.mixes.music.load(...) 移出play_sound()。不要混合构建和运行。
  • 好吧,你检查过你的'classes'变量了吗?它可能总是包含 22 吗?
  • @G.Brown 不,它并不总是包含“22”,它只在检测到人类时包含“22”
  • 我认为 dedObed 询问的是当前时差是多少,而不是所需/预期的时差。

标签: python raspberry-pi pygame


【解决方案1】:

不要使用线程(你不需要它们),不要使用pygame.time.wait,如果你不想将它用于背景音乐,也不要使用pygame.mixer.music

使用Sound object(如果您想使用play 函数,也可以提供maxtime)。

所以你的代码应该看起来更像这样:

pygame.init()
detected_sound = pygame.mixer.Sound('filename')

...
    if 22 in classes:
        # use loops=-1 if the sound's length is less than 5 seconds
        # so it's repeated until we hit the maxtime of 5000ms
        detected_sound.play(loops=-1, maxtime=5000)
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多