(Para este relatório de bug ####
indicará minha própria censura autosselecionada, já que não conheço as políticas deste projeto em relação ao xingamento. ****
indicará palavras de censura do Mycroft.)
Ao testar uma habilidade, percebi que em algum ponto da análise de minha entrada está transformando palavrões detectados em asteriscos, como a consulta " ####
you" sendo interpretada como “ ****
you”. Esse pode ser um padrão razoável, mas quero reproduzir álbuns que contenham títulos explícitos e esse recurso quebra essa funcionalidade.
Isso parece afetar o núcleo, não apenas uma habilidade de terceiros:
Passos para reproduzir:
####
você." (Se você estiver procurando o título de uma música, pode estar dizendo algo como, "ei Mycroft, toque ####
the police by NWA")Comportamento observado:
Mycroft relata e interpreta " ####
you" como " ****
you."
Comportamento esperado:
Mycroft não censura palavrões, pois eles são necessários para reproduzir músicas com títulos explícitos. Opcionalmente, este deve ser um comportamento configurável e documentado.
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']
(Este é realmente um bug real, apesar de minha novidade no projeto e de sua natureza incomum.)
Eu também corri para isso. Seria muito melhor tê-lo apenas como uma opção em vez de como padrão.
Isso estava em discussão na semana passada, acho que a conclusão foi fazer alterações para permitir que isso fosse desativado. @matheuslima você pode comentar sobre isso?
Eu sou de Jersey e juro muito, isso é um problema para mim também.
algum progresso nesta questão? a censura é realmente irritante.
Ei, eu não estava por perto quando esse problema foi levantado pela primeira vez, então não fazia parte dessas discussões, mas este é realmente o serviço Google STT que usamos para fazer a censura. Precisaria ver se há um sinalizador que podemos definir nas solicitações para desligá-lo. Se alguém já sabe, por favor, entre em contato.
Em uma breve leitura deste problema, fui capaz de determinar o seguinte:
A maioria dos serviços STT suportados pelo Mycroft (com o Google STT sendo atualmente o padrão) tem um sinalizador profanity_filter
que é passado para a API.
Nas classes STT do Mycroft, isso é definido como false
para a classe IBMWatson
STT de acordo com: esta linha de código , no entanto, este parâmetro não parece estar definido para GoogleSTT
class.
Na classe GoogleSTT
, esse parâmetro não parece estar definido , e acho que essa é a causa raiz do problema. Estes são os documentos do STT do Google - o parâmetro é denominado ProfanityFilter
.
No entanto, não acho que a resposta seja apenas definir profanity_filter
como false
na classe GoogleSTT
. Acho que devemos dar aos usuários a capacidade de definir isso por dispositivo, assim como Wake Words e motores STT e vozes TTS podem ser definidos por dispositivo em: https://account.mycroft.ai/ dispositivos/
Portanto, acho que isso requer mudanças no backend do Mycroft Home para ter uma implementação ideal.
O que tentei fazer como solução alternativa foi implementar uma nova variável self.config
em mycroft.conf
:
// Profanity filter
"profanity_filter": false,
Isso requer suporte nas classes STT
, ou seja, foi o que tentei na classe base STT, mas não funcionou;
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
(Neste ponto, meu microfone parou de funcionar com o Mycroft por algum motivo estranho, e nada que eu fizesse conseguiu fazer com que ele pegasse o microfone novamente, então não pude continuar o teste)
Isso não funcionou - ProfanityFilter
ainda está definido como True
e ***
permanece. Mas, isso pode ser uma pista para outras pessoas que desejam resolver isso.
Eu testei o módulo STT do Google e o filtro de profanação parece estar desativado por padrão, mas requer que alguém tenha uma conta do Google Cloud para usar.
A API usada pelo backend Mycroft (que não é o serviço Google Cloud Speech to Text, mas outra API mais antiga do Google) está sempre habilitada e não permite desligá-la, se bem me lembro.
Uma definição de configuração é provavelmente uma boa ideia. O padrão deve ser desativado na minha opinião.
Comentários muito úteis
Eu sou de Jersey e juro muito, isso é um problema para mim também.