我正在使用树莓派开发对象检测模型。我使用 Google 的对象检测 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()
在这段代码中,我遇到的问题是
- 声音甚至在检测到对象之前就开始播放,我尝试过调试,但不知道为什么。
- 我再次启动同一个线程
- 如果我使用不同的线程,pi 就会耗尽资源,整个执行就会停止
有什么办法可以让它发挥作用吗?
提前致谢
最佳答案
不要使用线程(你不需要它们),不要使用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)
...
关于python - 如果检测到物体则播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52988902/