File size: 1,853 Bytes
485d8e3 6f13b8c fca9809 485d8e3 c0447ed 485d8e3 ca5d527 485d8e3 6f13b8c 485d8e3 6f13b8c 485d8e3 fca9809 485d8e3 fca9809 6f13b8c 485d8e3 6f13b8c 485d8e3 ebd6110 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
from dataclasses import dataclass, field
from multiprocessing import Process, Queue
from multiprocessing import Event
from logging import getLogger
logger = getLogger(__name__)
@dataclass
class Segment:
t0: int
t1: int
text: str
@dataclass
class MetaItem:
segments: list[Segment] = field(default_factory=list)
source_audio: bytes = b""
audio: bytes = b''
transcribe_content: str = ''
translate_content: str = ''
source_language: str = 'zh'
destination_language: str = 'en'
speech_status: str = 'END' # "END", "START"
class BasePipe(Process):
def __init__(self, in_queue=None, out_queue=None) -> None:
super().__init__() # Initialize the Process class
self._in_queue = in_queue if in_queue else Queue()
self._out_queue = out_queue if out_queue else Queue()
self._ready = Event()
def set_ready(self):
self._ready.set()
def is_ready(self):
return self._ready.is_set()
def wait(self):
self._ready.wait()
@property
def output_queue(self):
return self._out_queue
@property
def input_queue(self):
return self._in_queue
def process(self, in_data: MetaItem) -> MetaItem:
raise NotImplementedError("Subclasses should implement this method.")
@classmethod
def init(cls):
raise NotImplementedError
def run(self):
logger.info(f"start initial {self.__class__.__name__}")
self.init()
logger.info(f"finish initial {self.__class__.__name__}")
self.set_ready()
while True:
item = self.input_queue.get()
if item is None: # Check for termination signal
break
out_item = self.process(item)
if out_item:
self.output_queue.put(out_item)
|