o
    s9jZ                     @  s   d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
 ddlmZ eede p2dZed	ejZdddZdddZdS )u   ASR (Spracherkennung) via whisper.cpp — lokal, kostenlos, offline-fähig.

Nimmt eine beliebige Audiodatei (webm/ogg/wav vom Browser), normalisiert sie
per ffmpeg auf 16 kHz Mono WAV und transkribiert sie. Gibt Text + erkannte
Sprache zurück.
    )annotationsN)Path)Tuple   )config   z$auto-detected language:\s*([a-z]{2})srcr   returnc                 C  sB   |  d}tjtjdddt| ddddd	d
t|gdddd |S )Nz.16k.wavz-nostdinz-yz-iz-ar16000z-ac1-fwavT<   capture_outputtexttimeout)with_suffix
subprocessrunr   FFMPEGstr)r   dst r   //home/nk/hobo-godmode/plappi-mvp/backend/asr.py
_to_wav16k   s   
r   
audio_path
str | PathTuple[str, str]c                 C  s  t | }t|}| r| jdk rdtjfS t A}t |d }t	j
tjdtjdt|dddd	d
t|dtddddgdddd}|d}| rT|jdd nd}W d   n1 s`w   Y  t|jpkd}|rv|d ntj}	| }
|
 }|dv rd}
|
|	fS )z:-> (text, language_code). Leerer Text wenn nichts erkannt.    outz-mr   z-lautoz-ntz-otxtz-ofz-tz-bor   z-bsTx   r   z.txtzutf-8)encodingNr   >   
thank you.[blank_audio]thanks for watching!r    .you)r   r   existsstatst_sizer   
CHILD_LANGtempfileTemporaryDirectoryr   r   WHISPER_CLIWHISPER_MODELr   _THREADSr   	read_textstrip_LANG_REsearchstderrgrouplower)r   r   r   tdout_baseproctxt_filer   
lang_matchlangcleanedlowr   r   r   
transcribe!   s.   



rB   )r   r   r	   r   )r   r   r	   r   )__doc__
__future__r   osrer   r.   pathlibr   typingr   r    r   r   max	cpu_countr2   compile
IGNORECASEr5   r   rB   r   r   r   r   <module>   s    

