Skip to content
This repository has been archived by the owner on May 2, 2022. It is now read-only.

Latest commit

 

History

History
668 lines (479 loc) · 28.5 KB

readme-ca.md

File metadata and controls

668 lines (479 loc) · 28.5 KB

Mycroft en català

Aquesta és una guia completa, pas per pas, per a configurar Mycroft en català.

Nota: aquest document és una traducció de l'original en anglès que podeu consultar aquí.

Traducció del nucli (core)

Cal traduir alguns fitxers de mycroft-core. Aquests fitxers s'utilitzen principalment en els diàlegs predeterminats.

Podeu trobar aquests fitxers a mycroft-core/mycroft/res/text

  • Copieu la carpeta en-us a ca-es.
  • Traduïu qualsevol fitxer que encara no estigui traduït.

NOTA: Els fitxers de recursos de mycroft-core ja es van traduir al català, però amb el temps és possible que s'hagin creat fitxers nous o hagin canviat els anteriors i ara calgui fer o actualitzar-ne la traducció.

Traducció de les habilitats (skills)

El primer que hauríeu de fer és traduir les habilitats. Altrament, encara que Mycroft us entengui, només us respondrà missatge d'error perquè no sabrà què ha de fer.

La traducció d'habilitats de vegades no és senzilla, hi ha molts casos especials.

NOTES ESPECILAS:

  • Qualsevol habilitat que tingui un fitxer sense traduir no es carregarà. Cal que tots els fitxers estiguin traduïts.
  • El codi de llengua ha de coincidir de forma exacta amb el valor global configurat! Vaig enviar una PR per a millorar-ho l'any 2017, però fou ignorada completament, i la vaig tancar (sense fusionar) després de 3 anys.

translate.mycroft.ai

La millor manera de traduir habilitats és usant la plataforma de traducció de Mycroft, aneu a translate.mycroft.ai i ajudeu a traduir l'habilitat de la botiga.

Després cal que espereu que Mycroft (l'empresa) enviï les traduccions als repositoris de les habilitats.

Exportació manual des de Pootle

Per a les habilitats que es tradueixen a translate.mycroft.ai, cal que l'equip de Mycroft sincronitzi manualment les traduccions amb els repositoris de codi font. Però podeu usar un script personalitzat per a exportar les cadenes del Pootle si no voleu esperar!

Cloneu el repositori mycroft-update-translations en una carpeta de treball i executeu l'script:

git clone https://github.com/jmontane/mycroft-update-translations
cd mycroft-update-translations
./mycroft-update-translations

Nota: actualment aquest script no accepta paràmetres en la línia d'ordres. Està preconfigurat per al català. Si cal, editeu el fitxer mycroft-update-translations.py i canvieu-ne els paràmetres. Per defecte, tradueix les habilitats de la carpeta /opt/mycroft/skills/. Si voleu traduir una altra llengua o heu canviat el data_dir del fitxer mycroft.conf, cal que editeu aquest fitxer.

Traducció manual

Si la vostra habilitat no és a la botiga, cal que la traduïu manualmennt, perquè no hi serà en la plataforma de traducció.

Començament

És molt més fàcil començar traduccions si ja teniu fitxer per traduir, en comptes d'haver-los de crear un per un.

Podeu usar un script de @jmontane per a copiar els recursos de llengua d'una altra llengua, habitualment en-us (la llengua predeterminada per a la majoria d'habilitats) i després traduir els fitxers copiats. Altres vegades potser tindrà sentit copiar d'una altre llengua, per exemple de pt-br a pt-pt o es-es a gl-es.

Cloneu el repositori mycroft-copy-translations i executeu l'script

git clone https://github.com/jmontane/mycroft-copy-translations
cd mycroft-copy-translations
./mycroft-copy-translations

NOTA: actualment aquest script no accepta paràmetres en la línia d'ordres. Si cal, editeu el fitxer mycroft-copy-translations.py i canvieu-ne els paràmetres. Està preconfigurat per al català i de forma predeterminada s'aplica a les habilitats de la carpeta /opt/mycroft/skills/. Si voleu copiar una llengua diferent o heu canviat el paràmetre data_dir del mycroft.conf, cal que editeu aquest fitxer.

Codi de llengua (locale)

TODO

Fitxers de recursos

Algunes habilitats necessiten usar valors diferents en el codi depenent de la llengua. Una aproximació habitual és usar el mètode translate_namedvalues des de les habilitats per a trobar recursos. Això és, essencialment, un fitxer .csv amb parells de valors que s'usen per a alimentar de dades un diccionari de Python.

Aquesta és una bona aproximació per a la localització d'habilitats, però no és tan senzill com traduir els fitxers de diàleg, perquè el contingut d'aquests fitxer no és obvi i depèn del codi de l'habilitat en particular.

Si usem l'habilitat de la Viquipèdia oficial com a exemple, cal traduir aquest fitxer que diu al paquet wikipedia quin codi de llengua ha d'usar:

- dialog
  - en-us
    - wikipedia_lang.value
  - ca-es
    - wikipedia_lang.value

El contingut del fitxer wikipedia_lang.value del directori en-us és:

# Wikipedia language code used to service queries in the active language
code,en

El contingut del fitxer wikipedia_lang.value del directori ca-es és:

# Codi de llengua de Viquipèdia usat per a fer consultes en la llengua activa
code,ca

Això es pot usar en el codi d'aquesta manera:

data = self.translate_namedvalues("wikipedia_lang")
wiki.set_lang(data["code"])

Si el fitxer anterior es tradueix com a code,ca-es l'habilitat no funcionarà. Com a traductor no teniu cap manera de saber-ho sense revisar el codi. Per tant, recomano deixar un comentar amb un enllaç a documentació rellevant. Com podeu veure en els exemples anteriors, les línies que comencen amb # s'ignoren.

Sol·licitud d'entrada (pull request)

TODO

Casos especials

Algunes habilitats no es poden traduir fàcilment i necessiten canvis en el codi per a gestionar-ho:

  • usen una biblioteca o API web que espera contingut en anglès
  • usen una biblioteca o API web que retora resultats en anglès
  • necessiten algun recurs lingüístic específic que no s'ha tingut present per l'autor original

Una aproximació possible per a solucionar-ho és usar traducció en temps d'execució, l'habilitat wolfram alpha skill oficial ho fa. Faig el mateix en l'habilitat icanhazdadjoke

Si desenvolupeu habilitats aquí teniu una plantila que podeu usar com a punt de partida

from mycroft.skills.core import MycroftSkill, intent_handler
from google_trans_new import google_translator

class MySkill(MycroftSkill):
    def __init__(self):
        super().__init__(name="MySkill")
        self.translator = google_translator()
        self.tx_cache = {}  # avoid translating twice

    @intent_handler("my_intent.intent")
    def handle_intent(self, message):
        # fa alguna cosa qeu retorna una frase en anglès
        (...)
        # tradueix la resposta a la llengua de l'usuari
        translated_utt = self.translate(value)
        self.speak(translated_utt)

    @intent_handler("my_other_intent.intent")
    def handle_english_input_intent(self, message):
        # obté el valor que necessita ser en anglès però és la llengua de l'usuari
        value = message.data["value"]
        # tradueix-lo a l'anglès
        tx_value = self.translate(value, "en", self.lang)
        
        # fa alguna cosa amb tx_value
        eng_utt = "this is in english, but will be spoken in catalan"
        
        # tradueix la resposta a la llengua de l'usuari
        translated_utt = self.translate(eng_utt)
        self.speak(translated_utt)

    def translate(self, utterance, lang_tgt=None, lang_src="en"):
        lang_tgt = lang_tgt or self.lang

        # si les llengües són les mateixes, no facis res
        if not lang_tgt.startswith(lang_src):
            if lang_tgt not in self.tx_cache:
                self.tx_cache[lang_tgt] = {}
            # si ja s'ha traduït, no ho tornis a traduir
            if utterance in self.tx_cache[lang_tgt]:
                # get previous translated value
                translated_utt = self.tx_cache[lang_tgt][utterance]
            else:
                # tradueix aquesta frase
                translated_utt = self.translator.translate(utterance, lang_tgt=lang_tgt, lang_src=lang_src).strip()
                # desa la traducció per si la necessitem una altra vegada
                self.tx_cache[lang_tgt][utterance] = translated_utt
            self.log.debug("translated {src} -- {tgt}".format(src=utterance, tgt=translated_utt))
        else:
            translated_utt = utterance.strip()
        return translated_utt

NOTE: afegiu google_trans_new al fitxer requirements.txt de la vostra habilitat.

Desactivació d'habilitats oficials

Mycroft fa difícil de desactivar les habilitats oficials, encara que les esborreu es tornen a instal·lar automàticament.

Si voleu substituir una habilitat oficial, cal que la poseu en la llista negra, que la bloqueu, així Mycroft no la carregarà.

Per a blocar les habilitats oficials que no són compatibles amb el català, editeu el fitxer mycroft.conf i afegiu la secció següent. Assegureu-vos d'usar els noms exactament igual com apareixen en la carpeta d'habilitats. Habitualment en el format nom_repositori_a_github.autor

  "skills": {
    "blacklisted_skills": [
          "mycroft-npr-news.mycroftai", 
          "mycroft-fallback-duck-duck-go.mycroftai", 
          "mycroft-joke.mycroftai"
    ]
  }

Si esteu escrivint una habilitat que explícitament substitueix una habilitat oficial, podeu fer el següent en Python:

from mycroft.messagebus.message import Message
from mycroft.configuration import LocalConf, USER_CONFIG


class MyAlternativeSkill(MycroftSkill):

    def initialize(self):
        self.blacklist_default_skill()

    def blacklist_default_skill(self):
        # carrega la llista d'habilitats que actualment estan blocades
        blacklist = self.config_core["skills"]["blacklisted_skills"]
        
        # comprova el nom de la carpeta (skill_id) de l'habilitat que voleu substituir
        skill_id = "mycroft-skill-to-replace.mycroftai"
        
        # afegeix l'habilitat a la llista negra
        if skill_id not in blacklist:
            self.log.debug("Blacklisting official mycroft skill")
            blacklist.append(skill_id)
            
            # carrega el fitxer de configuració de l'usuari (~/.mycroft/mycroft.conf)
            conf = LocalConf(USER_CONFIG)
            if "skills" not in conf:
                conf["skills"] = {}

            # actualitza el camp blacklist
            conf["skills"]["blacklisted_skills"] = blacklist
            
            # desa el fitxer de configuració de l'usauri
            conf.store()

        # indica a al servei d'intents que descarrega l'habilitat en cas que estigués carregada
        # això hauria d'evitar la necessitat de reiniciar
        self.bus.emit(Message("detach_skill", {"skill_id": skill_id}))

Instal·lació d'extensions (plugins)

Aquest tutorial usa algunes extensions. En cada secció teniu enllaços a aquestes extensions i detalls sobre com configurar-les.

Per a instal·lar una extensió, podeu usar pip, però cal que esteu en l'entorn virtual (venv) de Mycroft!

Podeu fer-ho de diverses maneres.

Instal·lació manual

  • Activeu el .venv manualment, source mycroft-core/.venv/bin/activate.
  • Useu l'script àlies mycroft (pot ser no és disponible) mycroft-venv-activate.
  • Executeu l'script explícitament mycroft-core/venv-activate.sh.

Després executeu l'ordre d'instal·lació:

pip install jarbas-stt-plugin-chromium

Mycroft-pip

Mycroft proporciona un embolcall de pip per a facilitar-vos la part anterior, això potser no és disponible en la vostra plataforma.

  • Useu l'àlies de Mycroft (potser no és disponible) mycroft-pip install jarbas-stt-plugin-chromium.
  • Executeu l'script explícitament mycroft-core/bin/mycroft-pip install jarbas-stt-plugin-chromium.
  • En un Mark I cal que useu sudo sudo mycroft-pip install jarbas-stt-plugin-chromium.

A partir del codi font

Instal·lació des de Github a partir d'un URL usant pip:

mycroft-pip install git+https://github.com/JarbasLingua/jarbas-stt-plugin-chromium

O manualment:

git clone https://github.com/JarbasLingua/jarbas-stt-plugin-chromium
cd jarbas-stt-plugin-chromium
mycroft-pip install .

Lingua franca

TODO

  • Com traduir
  • Ús
  • Actualitzar el nucli per a usar la bifurcació

mycroft.conf

Si voleu editar la configuració d'usuari, el fitxer és a ~/.mycroft/mycroft.conf

Tingueu present que aquest és el directori d'usuari per a l'usuari que executa Mycroft, en un Mark I això significa /home/mycroft/.mycroft/mycroft.conf NO PAS /home/pi/.mycroft/mycroft.conf

Teniu més informació sobre el fitxer mycroft.conf en la documentació (en anglès)

Després d'editar el fitxer mycroft.con cal que reinicieu Mycroft perquè els canvis tinguin efecte.

Llengua (lang)

Primer de tot cal definir la llengua global de Mycroft. Aquesta llengua és la que s'usarà en carregar les habilitats i els fitxers de recursos.

NOTES ESPECIALS:

  • El codi ha de coincidir amb el codi de llengua del fitxers de recursos de nucli de mycroft-core, en el nostre cas ca-es.
  • El codi de llengua ha de coincidir de forma exacta! Vaig enviar una PR per a millorar-ho l'any 2017, però es va ingorar completament.
  • Els habilitats també usaran aquest codi de llengua per a cerca fitxers de recursos.
  • Els termes "codi de llengua" i "lang code" és refereixen als codis de llengua del lBCP-47 (en anglès), habitualment usats pels ordinadors per a identificar una llengua i regió. Farem servir el codi de llengua "ca-es" per a referir-nos a la variant de català parlada a l'estat espanyol. Altres exemples familiars són "en-us" (anglès/Estats Units) i "es-es" (espanyol/Espanya)".

Configuració de la llengua

{
  "lang": "ca-es"
}

Reconeixement de la parla (STT, Speech to Text)

Hem de configurar un motor que admeti el català. Google STT admet el català, i aquest és el que usa el motor de Mycroft.

NOTES ESPECIALS:

El millor que es pot fer és usar extensions que admetin llengües correctament.

Llista de motors del nucli que admeten el català

  • mycroft: Només funciona si la llengua global definida és ca-es, però pot deixar de funcionar perquè funciona de casualitat. Vegeu mycroft chat per a més detalls.
  • google cloud: Bona qualitat, no és lliure. Permet especificar un codi de llengua específic
  • google: Per a usar-lo cal una clau API, però ja no se n'emeten claus. Vegeu els detalls a l'extensió google chromium. A tots els efectes és inútil.

Llista d'extensions que admeten el català

Teniu instruccions detallades sobre la instal·lació d'extensions a la secció d'extensions

Configuració del motor STT

Instal·lació de jarbas-stt-plugin-chromium

Simplement evitem el motor STT de Mycroft perquè pot deixar de funcionar en qualsevol moment.

mycroft-pip install jarbas-stt-plugin-chromium

Configureu l'extensió google chromium i definiu el codi de llengua específic per del motor.

{
  "stt": {
    "module": "chromium_stt_plug",
    "chromium_stt_plug": {
        "lang": "ca-ES"
    }
  }
}

Síntesi de veu (TTS, Text to Speech)

Una altra vegada, hem de triar un motor que admeti el català, per defecte el motor de Mycroft només admet l'anglès.

Llista de motors del nucli que admeten el català

  • espeak: cal instal·lar-lo manualment. La veu és massa robòtica!
  • festival: cal instal·lar-lo manualment. La qualitat és acceptable.
  • gtts: es pot definir des de la interfície web de Mycroft. Sovint té problemes i deixa de funcionar (usa una API no documentada del traductor de Google).

Llista d'extensions que admeten el català

Teniu instruccions detallades per a fer-ne la instal·lació en la secció d'extensions

  • catotron: la millor qualitat, però és lent.
  • softcatala: mateixa qualitat que festival, però funciona en un servidor.
  • voicerss: requereix una clau API (gratuïta).
  • responsive voice: usa espeak per al català. La veu és massa robòtica.

Configuració del motor TTS

Configurem Mycroft perquè usi festival

Instal·lació de festival

El nucli de Mycroft (mycrot-core) admet festival, però cal instal·lar-lo manualment en el sistema operatiu:

sudo apt-get -y install festival festvox-ca-ona-hts lame
{
   "tts": {
      "module": "festival",
      "festival": {
          "lang": "catalan",
          "encoding": "ISO-8859-15//TRANSLIT"
      }
   }
}

Paraula despertadora (stand up) - Desperta

Si useu l'habilitat naptime skill podeu dir al Mycroft "vés a dormir", si ho feu, no es processa el reconeixement de la parla STT. Això és una funcionalitat de privadesa.

Això atura les crides al sistema de reconeixement de la parla STT, i garanteix que la vostra veu no s'envia enlloc per una activacio accidental.

Però això vol dir que heu de traduir aquesta paraula d'activació, per defecte és en anglès: "wake up"

NOTES ESPECIALS:

  • Mentre dorm, Mycroft encara reaccionarà a la paraula d'activació, però en comptes d'activar el motor STT escoltarà per la segona paraula despertadora.
  • Cal que digueu "ei mycroft, desperta" per a reactivar el STT.
  • Atès que això requereix 2 paraules d'activació seguides, la precisió de l'activació pot ser inferior i s'accepten més falses activacions.

Per a traduir tot això al català usem l'extensió snowboy:

  • És molt lleugera
  • Es poden carregar diversos models simultàniament.
  • Podeu entrenar un model personal per a cada membre de la casa.
  • Malauradament, snowboy tanca el 31 de desembre de 2020, entreneu models mentre pugueu!!!

Instal·leu l'extensió amb:

mycroft-pip install jarbas-wake-word-plugin-snowboy

Ara configurem Mycroft perquè usi això:

 "listener": {
      "stand_up_word": "desperta"		
  },
  "hotwords": {
    "desperta": {
        "module": "snowboy_ww_plug",
        "models": [
            {"sensitivity": 0.5, "model_path": "camí/a/model_persona_1.pmdl"},
            {"sensitivity": 0.5, "model_path": "camí/a/model_persona_2.pmdl"},
            {"sensitivity": 0.5, "model_path": "camí/a/model_persona_2.pmdl"}
         ]
    }
  }

Si no heu entrenat un model, no patiu, @jmontane va entrenar alguns models que s'inclouen en l'extensió i que haurien de funcionar correctament! Assegureu-vos d'ajustar-ne les precisions.

  "listener": {
      "stand_up_word": "desperta"
  },
  "hotwords": {
    "desperta": {
        "module": "snowboy_ww_plug",
        "models": [
           {"sensitivity": 0.5, "model_path": "desperta_jm.pmdl"},
           {"sensitivity": 0.5, "model_path": "desperta_jm2.pmdl"}
         ]
    }
  }

Ara podeu activar el Mycroft en català! "ei mycroft, desperta"

Configuració final

Aquest ha estat un tutorial força llarg, però si heu seguit totes les instruccions, el vostre fitxer mycroft.conf hauria de ser similar a aquest:

{
  "lang": "ca-es",
  "stt": {
      "module": "chromium_stt_plug",
      "chromium_stt_plug": {
          "lang": "ca-ES"
      }
   },
  "tts": {
      "module": "festival",
      "festival": {
          "lang": "catalan",
          "encoding": "ISO-8859-15//TRANSLIT"
      }
   },
  "skills": {
    "blacklisted_skills": [
          "mycroft-npr-news.mycroftai", 
          "mycroft-fallback-duck-duck-go.mycroftai", 
          "mycroft-joke.mycroftai"
    ]
  },
  "listener": {
      "stand_up_word": "desperta"
  },
  "hotwords": {
     "desperta": {
        "module": "snowboy_ww_plug",
        "models": [
            {"sensitivity": 0.5, "model_path": "desperta_jm.pmdl"},
           {"sensitivity": 0.5, "model_path": "desperta_jm2.pmdl"}
         ]
      }
   }
}

Ajustaments addicionals

Paraules d'activació

Paraules d'activació (wake words)

Una paraula d'activació és el que heu de dir perquè Mycroft comenci a escoltar.

Mycroft usa el motor precise per a fer això. És un model entrenat amb sons, per tant no requereix una "traducció". Si voleu canviar el nom de Mycroft aleshores cal que feu més de 50 enregistraments i entreneu un model

Alguns usuaris tenen traça amb l'entreament de models, per tant us recomano de revisar el repositori comuntari de Precise, si hi pugeu els enregistraments la comunitat us entrenarà un model! Això també significa que el model millorarà amb el temps.

Hi ha dues paraules d'activació que cal configurar. El "nom" de Mycroft, i la paraula despertadora "desperta" (teniu més informació sobre això més avall)

Precise 0.3

Mycroft baixa el binari de precise en temps d'execució. Hi ha la versió 0.2 i la 0.3. Per defecte Mycroft usa la versió 0.2, però alguns models estan entrenats per a la 0.3 (la versió de github)

 "precise": {
   "dist_url": "https://github.com/MycroftAI/precise-data/raw/dist/{arch}/latest-dev"
 }

Precise 0.2

Si voleu tornar a la versió 0.2

 "precise": {
   "dist_url": "https://github.com/MycroftAI/precise-data/raw/dist/{arch}/latest"
 }

Paraula d'activació - Ey ordenador

Podem canviar la forma amb que activem Mycroft.

Per a aquest exemple farem servir un model comunitari, Ey Ordenador, que funciona prou bé en català si diem "ei ordinador"

Baixeu el model d'aquí i descomprimiu els fitxers a ~/.mycroft/precise/models (o a qualsevol altra ubicació que vulgueu)

Podeu canviar 2 paràmetres per a millorar la detecció amb la vostra veu

  • sensitivity Més alt -> més precisió
  • trigger_level Més alt -> més retard i menys sensible
  "listener": {
      "wake_word": "ey_ordenador"
  },
  "hotwords": {
    "ey_ordenador": {
        "module": "precise",
        "local_model_file": "~/.mycroft/precise/models/hey-computer-es.pb",
        "sensitivity": 0.5, 
        "trigger_level": 3  
        }
  }

Substitució d'habilitats

De vegades ens interessarà substituir una aplacació oficial per una altra d'alternativa que funciona millor en català.

Habilitat de bromes (jokes)

L'habilitat oficial jokes encara no té bromes en català, podeu activar l'habilitat (perquè els fitxers s'han traduït), però no funcionarà correctament, hauríeu de blocar-la per a evitar conflictes.

Podeu usar l'habilitat alternativa, skill-icanhazdadjoke, que usa l'API de icanhazdadjoke.com/, blocarà l'habilitat predeterminada automàtica i admet moltes llengües (mitjançant el traductor de Google).

msm install https://github.com/JarbasSkills/skill-icanhazdadjoke

Habilitat de notícies

Per a funcionar en català ens cal trobar un proveïdor de notícies en català.

Aquesta sol·licitud d'entrada afegeix CCMA Catalunya Informació, però està aturada per un error en el motor de Mycroft.

Podeu instal·lar l'habilitat skill-news, blocarà l'habilitat predeterminada i ja admet el català.

NOTA: això és temporal, quan Mcyroft corregeixi el problema retiraré aquesta habilitat, però intentaré fer-ho de forma transparent, desblocant l'habilitat de notícies predeterminada, no caldrà que feu res.

msm install https://github.com/JarbasLingua/skill-news

Configuració del motor d'àudio

De forma predeterminada, Mycroft usa un motor d'àudio simple que té alguns problemes amb fluxos http. Ens cal que Mycroft usi el motor vlc, a més, això permetrà que altres habilitats funcionin correctament.

sudo apt-get install vlc

Editeu el vostre fitxer mycroft.conf i afegiu-hi el següent:

  "Audio": {
    "backends": {
      "vlc": {
        "active": true
      }
    },
    "default-backend": "vlc"
  }