(μ΄ λ²κ·Έ λ³΄κ³ μμ κ²½μ° ####
λ μ μ£Όμ κ΄νμ΄ νλ‘μ νΈμ μ μ±
μ λͺ¨λ₯΄κΈ° λλ¬Έμ λ³ΈμΈμ΄ μ νν κ²μ΄μ λνλ
λλ€. ****
λ Mycroft κ²μ΄ λ¨μ΄λ₯Ό λνλ
λλ€.)
μ€ν¬μ ν
μ€νΈνλ λμ λλ κ·Έκ²μ΄ κ°μ 쿼리λ‘, λ³ν (*)λ‘ κ²μΆ μμ€μ λκ³ λ΄ μ
λ ₯μ ꡬ문 λΆμμ΄ κ³³μ κΉ¨λ¬μλ€ " ####
λΉμ μ" "λ‘ ν΄μλκ³ $ ****
λΉμ ". μ΄κ²μ ν©λ¦¬μ μΈ κΈ°λ³Έκ° μΌ μ μμ§λ§ λͺ
μμ μΈ μ λͺ©μ΄ ν¬ν¨ λ μ¨λ²μ μ¬μνκ³ μΆμ΅λλ€.μ΄ κΈ°λ₯μ ν΄λΉ κΈ°λ₯μ μμμν΅λλ€.
μ΄κ²μ νμ¬ κΈ°μ λΏλ§ μλλΌ ν΅μ¬μ μν₯μ λ―ΈμΉλ κ² κ°μ΅λλ€.
μ¬ν λ¨κ³ :
####
you." (λ
Έλ μ λͺ©μ κ²μνλ κ²½μ° "Hey Mycroft, NWAμμ ####
κ²½μ°° μ¬μ"κ³Ό κ°μ΄ λ§ν μ μμ΅λλ€.)κ΄μ°° λ νλ :
Mycroftλ " ####
κ·ν"λ₯Ό " ****
κ·ν"λ‘λ³΄κ³ νκ³ ν΄μν©λλ€.
μμλλ λμ :
Mycroftλ λͺ
μμ μΈ μ λͺ©μ΄μλ λ
Έλλ₯Ό μ¬μνλ λ° νμνκΈ° λλ¬Έμ μ μ£Ό λ¨μ΄λ₯Ό κ²μ΄νμ§ μμ΅λλ€. μ νμ μΌλ‘ μ΄κ²μ κ΅¬μ± κ°λ₯νκ³ λ¬Έμν λ λμμ΄μ΄μΌν©λλ€.
16:50:56.682 - mycroft.client.speech.listener:transcribe:144 - DEBUG - STT: f*** you
16:50:56.682 - __main__:handle_utterance:55 - INFO - Utterance: [u'f*** you']
(μ΄κ²μ νλ‘μ νΈμ λν λμ μλ‘κ³ λΉμ μμ μΈ μ±κ²©μλ λΆκ΅¬νκ³ μ€μ λ‘ μ€μ λ²κ·Έμ λλ€.)
λλ μ΄κ²λ λ§λ¬λ€. κΈ°λ³Έκ° λμ μ΅μ μΌλ‘ μ¬μ©νλ κ²μ΄ ν¨μ¬ λ«μ΅λλ€.
μ΄κ²μ μ§λμ£Όμ λ Όμλ₯Όμν κ²μ΄μκ³ κ²°λ‘ μ μ΄κ²μ λλλ‘ λ³κ²½νλ κ²μ΄λΌκ³ μκ°ν©λλ€. @matheuslimaμ λν΄ μΈκΈ ν μ μμ΅λκΉ?
μ λ μ μ§ μΆμ μ΄κ³ λ§ΉμΈλ₯Ό λ§μ΄ν©λλ€. μ΄κ²μ λμκ²λ λ¬Έμ μ λλ€.
μ΄ λ¬Έμ μ λν μ§μ μ΄ μμ΅λκΉ? κ²μ΄μ μ λ§ μ§μ¦λ©λλ€.
μ΄ λ¬Έμ κ° μ²μ μ κΈ°λμμ λ μ λ μ£Όλ³μ μμκΈ° λλ¬Έμ ν λ‘ μ μΌλΆκ° μλμ§λ§ μ€μ λ‘λ κ²μ΄μ μννλ Google STT μλΉμ€μ λλ€. ν΄μ μμ²μ μ€μ ν μμλ νλκ·Έκ° μλμ§ νμΈν΄μΌν©λλ€. μ΄λ―Έ μκ³ κ³μλ€λ©΄ μ°¨μ ν΄μ£ΌμΈμ.
μ΄ λ¬Έμ μ λν μμ£Ό κ°λ¨ν νμ΄λ³΄κΈ°λ₯Ό ν΅ν΄ λ€μμ νμΈν μμμμ΅λλ€.
Mycroftκ° μ§μνλ λλΆλΆμ STT μλΉμ€ (νμ¬ Google STTκ° κΈ°λ³Έκ° μ)μλ APIμ μ λ¬λλ profanity_filter
νλκ·Έκ° μμ΅λλ€.
λ§μ΄ ν¬λ‘ννΈμ STT ν΄λμ€μμ, μ΄κ²μμλ‘ μ€μ false
μ μν΄ IBMWatson
STT ν΄λμ€μ λ°λΌ : μ½λ μ€ κ·Έλ¬λμ΄ λ§€κ° λ³μλ₯Ό μ€μ νμ§ μλ κ²μΌλ‘ GoogleSTT
ν΄λμ€.
GoogleSTT
ν΄λμ€μμλμ΄ λ§€κ° λ³μ κ° μ€μ λμ§ μμ κ²μΌλ‘ 보μ΄λ©° μ΄κ²μ΄μ΄ λ¬Έμ μ κ·Όλ³Έ μμΈμ΄λΌκ³ μκ°ν©λλ€. λ€μμ Googleμ STTμ λν λ¬Έμμ
λλ€ . λ§€κ° λ³μλ ProfanityFilter
μ
λλ€.
κ·Έλ¬λ λλ GoogleSTT
ν΄λμ€μμ profanity_filter
λ₯Ό false
λ‘ μ€μ νλ κ²μ΄ λ΅μ΄ μλλΌκ³ μκ°ν©λλ€. Wake Words λ° STT μμ§ λ° TTS μμ±μ΄ https://account.mycroft.ai/μμ μ₯μΉλ³λ‘ μ€μ λ μμλ κ²μ²λΌ μ¬μ©μμκ² μ₯μΉλ³λ‘μ΄λ₯Ό μ€μ ν μμλ κΈ°λ₯μ μ 곡ν΄μΌνλ€κ³ μκ°ν©λλ€. μ₯μΉ /
λ°λΌμ μ΄μμ μΈ κ΅¬νμ μν΄ Mycroft Home λ°±μλλ₯Ό λ³κ²½ν΄μΌνλ€κ³ μκ°ν©λλ€.
ν΄κ²° λ°©λ²μΌλ‘ μλν κ²μ mycroft.conf
μλ‘μ΄ self.config
λ³μλ₯Ό ꡬννλ κ²μ
λλ€.
// Profanity filter
"profanity_filter": false,
κ·Έλ¬λ©΄ STT
ν΄λμ€μ λν μ§μμ΄ νμν©λλ€. μ¦, STT κΈ°λ³Έ ν΄λμ€μμ μλνμ§λ§ μλνμ§ μμμ΅λλ€.
class STT(metaclass=ABCMeta):
""" STT Base class, all STT backends derives from this one. """
def __init__(self):
config_core = Configuration.get()
self.lang = str(self.init_language(config_core))
config_stt = config_core.get("stt", {})
self.config = config_stt.get(config_stt.get("module"), {})
self.credential = self.config.get("credential", {})
self.recognizer = Recognizer()
self.can_stream = False
# set profanity filter
self.profanity_filter = self.config.get('profanity_filter')
<strong i="36">@staticmethod</strong>
def init_language(config_core):
lang = config_core.get("lang", "en-US")
langs = lang.split("-")
if len(langs) == 2:
return langs[0].lower() + "-" + langs[1].upper()
return lang
<strong i="37">@abstractmethod</strong>
def execute(self, audio, language=None, ProfanityFilter=self.profanity_filter):
pass
(μ΄ μμ μμ λ΄ λ§μ΄ν¬κ° μ΄μν μ΄μ λ‘ Mycroftμ μλμ λ© μ·κ³ , λ§μ΄ν¬λ₯Ό λ€μ μ‘μ μ μμκΈ° λλ¬Έμ ν μ€νΈλ₯Ό κ³μν μ μμμ΅λλ€)
μ΄κ²μ μλνμ§ μμμ΅λλ€. ProfanityFilter
λ μ¬μ ν True
λ‘ μ€μ λκ³ ***
λ λ¨μ μμ΅λλ€. κ·Έλ¬λ μ΄κ²μ μ΄κ²μ ν΄κ²°νλ €λ λ€λ₯Έ μ¬λλ€μκ² λ¨μκ° λ μ μμ΅λλ€.
Google STT λͺ¨λμ ν μ€νΈνλλ° μμ€ νν°κ° κΈ°λ³Έμ μΌλ‘ κΊΌμ Έμλ κ² κ°μ§λ§ Google ν΄λΌμ°λ κ³μ μ μ¬μ©νλ €λ©΄ ν μ¬λμ΄ νμν©λλ€.
Mycroft λ°±μλ (Google Cloud Speech to Text μλΉμ€κ° μλμ§λ§ Googleμ λ€λ₯Έ μ΄μ API μ€ νλ)μμ μ¬μ©νλ APIλ νμ νμ±νλμ΄ μμΌλ©° μ¬λ°λ₯΄κ² κΈ°μ΅ν κ²½μ° λ μ μμ΅λλ€.
κ΅¬μ± μ€μ μ μλ§λ μ’μ μκ° μΌ κ²μ λλ€. λ΄ μ견μΌλ‘λ κΈ°λ³Έκ°μ΄ κΊΌμ Έ μμ΄μΌν©λλ€.
κ°μ₯ μ μ©ν λκΈ
μ λ μ μ§ μΆμ μ΄κ³ λ§ΉμΈλ₯Ό λ§μ΄ν©λλ€. μ΄κ²μ λμκ²λ λ¬Έμ μ λλ€.