speech · 목소리·대화·음성 인식¶
음성 합성(TTS)·음성 인식(STT)과 온디바이스 LLM 대화 기능을 제공합니다.
PiBrain 은 아직 마이크가 없다. STT(Speech.stt · SpeechToText)는 Pibo 와 같은 마이크
(2-mic HAT, arecord -D plug:dmic_sv)를 달 때를 위해 넣어 둔 것이고, 블록은 막혀 있다.
Class:
Speech
SpeechOnDevice
SpeechToText
Dialog
- class openpibo.speech.Speech[소스]¶
기반 클래스:
objectTTS (Text to Speech)
STT (Speech to Text) — 기기 안에서 처리합니다 (
SpeechToText)
example:
from openpibo.speech import Speech speech = Speech() # 아래의 모든 예제 이전에 위 코드를 먼저 사용합니다.
- tts(text, filename='tts.wav', voice='espeak', lang='ko')[소스]¶
TTS(Text to Speech)
Text(문자)를 Speech(말)로 변환하여 파일로 저장합니다.
espeak 로 기기 안에서 처리합니다. 서버를 쓰던 목소리(main/boy/girl/man1/ woman1)는 제거됐습니다. 자연스러운 음성이 필요하면
SpeechOnDevice를 쓰세요 — 온디바이스 ONNX 모델이고lang='na'로 언어를 자동 판별합니다.example:
speech.tts('안녕하세요! 만나서 반가워요!', '/home/pi/tts.wav')
- 매개변수:
text (str) – 변환할 문장
filename (str) – 변환된 음성파일의 경로 (wav)
voice (str) –
espeak만 지원합니다lang (str) – 사용하지 않습니다 (espeak 기본 음성)
- stt(filename='stream.wav', timeout=5, verbose=True)[소스]¶
STT(Speech to Text)
파이보 마이크로 듣고, 말이 끝나면 글자로 바꿉니다. 기기 안에서 처리합니다 (
SpeechToText, 한국어·영어 자동 판별).timeout은 최대로 기다리는 시간입니다. 말이 끝나면(약 0.8초 조용하면) 그 전에 멈춥니다. 처음 부를 때 모델을 올리느라 몇 초 더 걸립니다.example:
text = speech.stt(timeout=5)
- 매개변수:
filename (str) – 들은 소리를 저장할 경로 (
wav).None이면 저장하지 않습니다timeout (int) – 최대 녹음 시간(초)
verbose (bool) – 사용하지 않습니다 (예전 코드와 모양을 맞추려고 남겨 둔 인자입니다)
- 반환:
인식된 문자열. 아무 말도 없으면 빈 문자열
- class openpibo.speech.SpeechOnDevice(onnx_dir: str = '/home/pi/.model/tts/assets/onnx', voice_dir: str = '/home/pi/.model/tts/assets/voice_styles', total_step: int = 5, speed: float = 1.05)[소스]¶
기반 클래스:
objectFunctions:
tts()TTS (Text to Speech)
example:
from openpibo.speech import SpeechOnDevice speech_od = SpeechOnDevice() # 아래의 모든 예제 이전에 위 코드를 먼저 사용합니다.
- tts(text: str, filename: str = 'tts.wav', voice: str = 'm1', lang: str = 'na') str[소스]¶
TTS(Text to Speech) — 텍스트를 음성 파일로 변환합니다.
example:
tts.tts(text='안녕하세요! 만나서 반가워요!', filename='/home/pi/tts.wav', voice='m1', lang='na')
- 매개변수:
text (str) – 변환할 문장
filename (str) – 저장할 음성 파일 경로 (.wav)
voice (str) – 목소리 종류 (m1~m5/f1~f5)
lang (str) – 언어 코드 (‘na’=자동/기타, ‘ko’, ‘en’, ‘ja’ …)
- Returns str:
저장된 파일 경로
- class openpibo.speech.SpeechToText(model_dir='/home/pi/.model/stt', num_threads=4)[소스]¶
기반 클래스:
objectFunctions:
listen()transcribe()transcribe_file()STT (Speech to Text) — 기기 안에서 처리합니다. 인터넷이 필요 없습니다
모델은 SenseVoiceSmall int8(한국어·영어·중국어·일본어·광둥어, 언어 자동 판별)이고, 말이 시작하고 끝나는 곳은 silero VAD 로 찾습니다. 둘 다 sherpa-onnx 로 돌립니다. 모델 파일은
/home/pi/.model/stt(model.int8.onnxtokens.txtsilero_vad.onnx).파이보(Pi 4, 2GB)에서 5초 말을 약 1.3초에 받아 적고, 모델을 올리면 약 240MB 를 씁니다.
example:
from openpibo.speech import SpeechToText stt = SpeechToText() # 아래의 모든 예제 이전에 위 코드를 먼저 사용합니다.
- SAMPLE_RATE = 16000¶
- transcribe(audio, sample_rate=16000)[소스]¶
소리(숫자 배열)를 글자로 바꿉니다.
25초보다 길면 말 단위로 잘라 받아 적고 이어 붙입니다(통째로 넣으면 글자가 뒤섞입니다).
example:
text = stt.transcribe(audio, 16000)
- 매개변수:
audio (numpy.ndarray) – -1~1 사이 float 소리. 두 채널이면 평균을 냅니다
sample_rate (int) – 샘플레이트 (16000 이 아니어도 됩니다)
- 반환:
인식된 문자열
- transcribe_file(filename)[소스]¶
소리 파일을 글자로 바꿉니다.
example:
text = stt.transcribe_file('/home/pi/myaudio/hello.wav')
- 매개변수:
filename (str) – 소리 파일 경로 (wav 등 soundfile 이 읽는 형식)
- 반환:
인식된 문자열
- listen(timeout=5, filename=None, end_silence=0.8)[소스]¶
파이보 마이크로 듣고, 말이 끝나면 글자로 바꿉니다.
말이 끝나고
end_silence초 동안 조용하면 멈춥니다.timeout초가 지나면 말하는 중이어도 멈춥니다.example:
text = stt.listen(timeout=5)
- 매개변수:
timeout (int) – 최대 녹음 시간(초)
filename (str) – 들은 소리를 저장할 경로 (
wav, 16kHz 한 채널).None이면 저장하지 않습니다end_silence (float) – 말이 끝났다고 볼 조용한 시간(초)
- 반환:
인식된 문자열. 아무 말도 없으면 빈 문자열
- class openpibo.speech.Dialog[소스]¶
기반 클래스:
objectFunctions:
start_llm()call_llm()stop_llm()기기 안에서 도는 LLM(llama-server)에 질문을 보내고 답을 받습니다.
n-gram 챗봇(
loadresetngramdiff_ngramget_dialog), 서버 기반 대화·분석(get_dialog_dlnlp_dl), 번역(translate)은 제거했습니다.dialog.csv가 한글 전용이고, 나머지는 자사 서버·Google 에 의존했습니다.example:
from openpibo.speech import Dialog dialog = Dialog() # 아래의 모든 예제 이전에 위 코드를 먼저 사용합니다.
- call_llm(prompt=None, system_prompt=None, temperature=0.8, max_tokens=100)[소스]¶
LLM 서버(OpenAI 호환 Chat Completions API)를 호출합니다.
- 예시:
dialog.call_llm(prompt=”안녕하세요”, system_prompt=”너는 내 스마트한 비서야”)
- 매개변수:
prompt (str) – 사용자의 입력 메시지.
system_prompt (str) – 시스템 프롬프트. (없으면 기본값 유지)
- 반환:
생성된 텍스트 또는 API 응답 전체 JSON.