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

集成pyttsx3致Kivy俯卧撑计数器视频卡顿崩溃问题求助

解决俯卧撑计数器添加语音播报后的卡顿与崩溃问题

问题根源

pyttsx3的语音合成是同步阻塞执行的,会打断OpenCV的视频帧处理流程,导致画面卡顿;同时pyttsx3依赖的comtypes库在多线程环境(尤其是和Kivy UI主线程共存时)容易出现资源冲突,触发调试报错并导致程序崩溃。

解决方案

方案1:更换TTS模块(优先推荐)

pyttsx3的多线程兼容性问题较难彻底解决,更换更稳定的TTS模块是最高效的选择:

  • gTTS:基于Google文本转语音API,生成临时音频文件后用Kivy的音频播放器播放,完全避免阻塞问题。
    示例代码逻辑:
    from gtts import gTTS
    from kivy.core.audio import SoundLoader
    import os
    import tempfile
    
    def speak_count(count):
        # 生成临时音频文件
        tts = gTTS(text=f"第{count}个", lang='zh-CN')
        with tempfile.NamedTemporaryFile(suffix='.mp3', delete=False) as f:
            temp_path = f.name
        tts.save(temp_path)
        # 播放音频
        sound = SoundLoader.load(temp_path)
        if sound:
            sound.play()
            # 播放完成后删除临时文件(绑定on_stop事件实现)
            def on_sound_stop(instance):
                os.remove(temp_path)
            sound.bind(on_stop=on_sound_stop)
    
  • edge-tts:调用微软Edge的TTS接口,支持流式播放,多线程稳定性好,无需生成临时文件。
  • pyttsx4:pyttsx3的官方分支,修复了部分comtypes兼容性问题,调用方式与pyttsx3完全一致,可直接替换测试。

方案2:修复pyttsx3的使用方式(不换模块的前提下)

如果坚持使用pyttsx3,必须通过独立线程+消息队列的方式隔离语音逻辑,避免干扰主线程:

  1. 创建后台语音工作线程,专门处理播报请求,避免跨线程共享pyttsx3引擎对象(comtypes对象无法跨线程复用)
    import threading
    import queue
    import pyttsx3
    
    # 创建消息队列存放待播报的次数
    voice_queue = queue.Queue()
    
    def voice_worker():
        # 在工作线程内初始化引擎
        engine = pyttsx3.init()
        # 禁用comtypes调试日志
        import comtypes
        comtypes.log.setLevel(comtypes.log.CRITICAL)
        while True:
            count = voice_queue.get()
            if count is None:  # 收到终止信号
                break
            engine.say(f"第{count}个")
            engine.runAndWait()
        engine.stop()
    
    # 启动后台线程(设为守护线程,随主程序退出)
    threading.Thread(target=voice_worker, daemon=True).start()
    
    # 检测到俯卧撑动作时,将次数放入队列
    # 示例:当计数更新时调用
    voice_queue.put(current_count)
    
  2. 确保OpenCV的视频采集与姿势检测逻辑也运行在独立子线程中,不要阻塞Kivy的UI主线程,通过Kivy的Clock.schedule_once将计数更新同步到UI。

内容的提问来源于stack exchange,提问作者Devansh Singhal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:17:10