Delay import of webrtc to avoid blocking start up if package is missing (#102594)

* Delay import of webrtc to avoid blocking start up if package is missing

* Update homeassistant/components/assist_pipeline/pipeline.py

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

* Update homeassistant/components/assist_pipeline/vad.py

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
This commit is contained in:
Michael Hansen 2023-10-23 13:34:32 -05:00 committed by GitHub
parent c481fdb7d0
commit a78e3f7b0f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 4 deletions

View File

@ -12,11 +12,13 @@ from pathlib import Path
from queue import Queue from queue import Queue
from threading import Thread from threading import Thread
import time import time
from typing import Any, Final, cast from typing import TYPE_CHECKING, Any, Final, cast
import wave import wave
import voluptuous as vol import voluptuous as vol
from webrtc_noise_gain import AudioProcessor
if TYPE_CHECKING:
from webrtc_noise_gain import AudioProcessor
from homeassistant.components import ( from homeassistant.components import (
conversation, conversation,
@ -522,6 +524,12 @@ class PipelineRun:
# Initialize with audio settings # Initialize with audio settings
self.audio_processor_buffer = AudioBuffer(AUDIO_PROCESSOR_BYTES) self.audio_processor_buffer = AudioBuffer(AUDIO_PROCESSOR_BYTES)
if self.audio_settings.needs_processor: if self.audio_settings.needs_processor:
# Delay import of webrtc so HA start up is not crashing
# on older architectures (armhf).
#
# pylint: disable=import-outside-toplevel
from webrtc_noise_gain import AudioProcessor
self.audio_processor = AudioProcessor( self.audio_processor = AudioProcessor(
self.audio_settings.auto_gain_dbfs, self.audio_settings.auto_gain_dbfs,
self.audio_settings.noise_suppression_level, self.audio_settings.noise_suppression_level,

View File

@ -7,8 +7,6 @@ from dataclasses import dataclass
from enum import StrEnum from enum import StrEnum
from typing import Final, cast from typing import Final, cast
from webrtc_noise_gain import AudioProcessor
_SAMPLE_RATE: Final = 16000 # Hz _SAMPLE_RATE: Final = 16000 # Hz
_SAMPLE_WIDTH: Final = 2 # bytes _SAMPLE_WIDTH: Final = 2 # bytes
@ -51,6 +49,12 @@ class WebRtcVad(VoiceActivityDetector):
def __init__(self) -> None: def __init__(self) -> None:
"""Initialize webrtcvad.""" """Initialize webrtcvad."""
# Delay import of webrtc so HA start up is not crashing
# on older architectures (armhf).
#
# pylint: disable=import-outside-toplevel
from webrtc_noise_gain import AudioProcessor
# Just VAD: no noise suppression or auto gain # Just VAD: no noise suppression or auto gain
self._audio_processor = AudioProcessor(0, 0) self._audio_processor = AudioProcessor(0, 0)