Warning, /libraries/libqmycroft/README.md is written in an unsupported language. File is not indexed.

0001 # Libqmycroft
0002 
0003 **Mycroft integration library using a mock API to integrate Qt/QML applications as dynamic skills in Mycroft Core.**
0004 
0005 Libqmycroft allows QML based applications to register themselves as dynamic skills using the Libqmycroft Mock Skills Interface which eliminates the need to create specific skills for traditional applications to gain voice control over the application user interface. 
0006 
0007 *The library is currently limited to usage of only [Mycroft's Padatious](https://mycroft-ai.gitbook.io/docs/mycroft-technologies/padatious) intent parser framework, The library is in early development and interface/API breakage can be expected!*
0008 
0009 
0010 
0011 
0012 --------------------------------
0013 
0014 - [Libqmycroft](#libqmycroft)
0015   * [Libqmycroft Requirements](#libqmycroft-requirements)
0016   * [Libqmycroft Installation](#libqmycroft-installation)
0017   * [Libqmycroft API & Usage](#libqmycroft-api---usage)
0018     - [SkillManager Class & Object](#skillmanager-class-and-object)
0019     - [SkillEntry Class & Object](#skillentry-class-and-object)
0020     - [Controller Class](#controller-class)
0021     - [Audio Transcriber Class and TranscribeButton Component](#audio-transcriber-class-and-transcribebutton-component)
0022   * [Usage Example of Libqmycroft in QML application](#usage-example-of-libqmycroft-in-qml-application)
0023   * [Usage Example of Libqmycroft AudioTranscriber in QML application](#usage-example-of-libqmycroft-audiotranscriber-in-qml-application)
0024 
0025 
0026 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0027 
0028 
0029 
0030 ## Libqmycroft Requirements
0031 
0032 - [Mycroft-Core](https://github.com/MycroftAI/mycroft-core/): Local installation of Mycroft Core. The code itself  includes anything that is generic to all instances of Mycroft. 
0033 - Libqmycroft: Library framework and QML Module contained in this repository and built and installed using cmake.
0034 - Libqmycroft-Mock-Skills-Interface: Mycroft Skill Interface part of this repository, requires installation into Mycroft's skill folder 
0035 
0036 
0037 
0038 ## Libqmycroft Installation
0039 
0040 - Installing Mycroft-Core (git version):
0041 
0042   - ```bash
0043     git clone https://github.com/MycroftAI/mycroft-core
0044     cd mycroft-core
0045     ./dev_setup.sh
0046     ```
0047 
0048 - Installing Libqmycroft & Libqmycroft-Mock-Skills-Interface (installation script for Mycroft-Core git version only):
0049 
0050   - ```bash
0051     git clone https://invent.kde.org/AdityaM/libqmycroft
0052     cd libqmycroft
0053     ./dev_setup.sh
0054     ```
0055 
0056 - Installing Libqmycroft (manually):
0057 
0058   - ```bash
0059     git clone https://invent.kde.org/AdityaM/libqmycroft
0060     cd libqmycroft
0061     mkdir build
0062     cd build
0063     cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DKDE_INSTALL_LIBDIR=lib -DKDE_INSTALL_USE_QT_SYS_PATHS=ON
0064     make
0065     sudo make install
0066     ```
0067 
0068 - Installing & Libqmycroft-Mock-Skills-Interface (manually):
0069 
0070   - ```bash
0071     git clone https://invent.kde.org/AdityaM/libqmycroft
0072     cd libqmycroft
0073     cp -R libqmycroft-mock-interface /opt/mycroft/skills/ 
0074     ```
0075 
0076 
0077 
0078 ## Libqmycroft API & Usage
0079 
0080 Libqmycroft provides developers with a declarative QML API for Skill Management and Skill Registration.
0081 
0082 
0083 
0084 ### SkillManager Class and Object
0085 
0086 The SkillManager Object allows applications to manage and register a list of SkillEntry Objects, The SkillManager class also exposes functions and signals for creating the dynamic skill and listeners for intents and actions that have been invoked by voice interaction. The SkillManager class also exposes additional connection settings like setting the web socket address manually for connecting to a Mycroft-Core instance which can be used in cases of supporting remote instances or different than normal web socket address. 
0087 
0088 Important properties of the SkillManager Object:
0089 
0090 - **skillNamespace** *(required)*: Name of the dynamic skill to register skill entries against.
0091 - **socketAddress** *(optional)*: Web Socket address of the Mycroft-Core instance. *Defaults to local mycroft-core default address*
0092 
0093 Important functions of the SkillManager Object:
0094 
0095 - **createSkill() Method** *(required)*: Registers dynamic skill namespace and skill entries with Libqmycroft-Mock-Skills-Interface
0096 - **deleteSkill() Method** *(optional)*: Deletes the registered skill intents and namespace registration from Libqmycroft-Mock-Skills-Interface, it is automatically called in the SkillManager class deconstructor method when parent object is destroyed. *For example: when the application window in which the SkillManager object was registered is closed*  
0097 
0098 
0099 
0100 ### SkillEntry Class and Object
0101 
0102 The SkillEntry Object allows applications to create skill entries to be registered during the time of skill creation. SkillEntry Object manages entries for:
0103 
0104 - **intent** *(required)*: An intent is the task the user intends to accomplish when they say  something. The role of the intent parser is to extract from the user's  speech key data elements that specify their intent. [Read More](https://mycroft-ai.gitbook.io/docs/skill-development/user-interaction/intents) *Currently should not contain any special characters and should always be defined in lowercase string*
0105 
0106 - **voc** *(required)*: ***Absolute Path to an intent file*** with keywords that can activate the intent. Padatious intents uses a series of example sentences to train a machine learning model to identify an intent. *Currently limited to single Padatious intents. Filenames should start with the application 'namespace_' + define_your_intent_here.intent this is to avoid active intent collision.*
0107 
0108 - **action** *(required)*: A string based action response based on the intent triggered, notifies the Skill Manager `"onIntentResponse"` via `"action"` variable letting the application then decide what action to take based on the action received.
0109 
0110 - **dialog** *(optional)*: A string of text to be spoken by Mycroft when a positive intent response is received for the registered SkillEntry intent.
0111 
0112   
0113 
0114 ### Controller Class
0115 
0116 The controller class is a minified abstraction of the original Mycroft Controller class from the [Mycroft GUI](https://github.com/MycroftAI/mycroft-gui) project, It is a singleton instance that manages web-socket connections and message exchange to the Mycroft message-bus. It additionally also exports signals for various known mycroft type messages that applications can choose to react towards, for example when mycroft is listening or speaking . 
0117 
0118 
0119 
0120 ### Audio Transcriber Class and TranscribeButton Component
0121 
0122 The AudioTranscriber Object allows applications to implement audio transcribing for TextField, TextEntry type QML Objects. The AudioTranscriber Object is directly implemented in a ready to use TranscribeButton component provided by Libqmycroft.
0123 
0124 The TranscribeButton if placed directly in any text field will assume providing the audio transcribed result to the parent.text field, alternatively the TranscribeButton can also be used outside of a TextField component which requires settings its `"target"` property to any TextField component id that wants to implement Audio Transcribe.
0125 
0126 Note: The TranscribeButton component is uniquely always only capable of serving a single textfield, each text field in a form for example would require its own transcribe button.
0127 
0128 
0129 
0130 ## Usage Example of Libqmycroft SkillManager & SkillEntry in QML application
0131 
0132 ***Example QML Implementation***
0133 
0134 ```QML
0135 ...
0136 import Libqmycroft 1.0
0137 
0138 Window {
0139         ...
0140     title: qsTr("Hello Mycroft!")
0141     
0142     SkillManager {
0143         id: skillRegisteration
0144         skillNamespace: "testskill"
0145         
0146         SkillEntry {
0147             intent: "testoneintent"
0148             voc: currentPath + "/vocab/testskill_test_intent_one.intent"
0149             action: "example-action-1"
0150             dialog: "Intent One Successful"
0151         }
0152         
0153         SkillEntry {
0154             intent: "testtwointent"
0155             voc: currentPath + "/vocab/testskill_test_intent_two.intent"
0156             action: "example-action-2"
0157             dialog: "Intent Two Successful"
0158         }
0159         
0160         onSocketReadyChanged: {
0161             if(socketReady){
0162                 skillRegisteration.createSkill()
0163             }
0164         }
0165         
0166         onIntentResponse: {
0167             if(action == "example-action-1"){
0168                 console.log("Got Example 1 Action")
0169             }
0170             if(action == "example-action-2"){
0171                 console.log("Got Example 2 Action")
0172             }
0173         }
0174     }
0175 }
0176 ```
0177 
0178 ***Example Voc `"$application-installed-dir/vocab/testskill_test_intent_one.intent"` file implementation***
0179 
0180 ```
0181 test application example one dynamic intent
0182 test application example one intent
0183 test first intent of dynamic application
0184 ```
0185 
0186 ## Usage Example of Libqmycroft AudioTranscriber in QML application
0187 
0188 ***Example QML Implementation***
0189 
0190 ```QML
0191 ...
0192 import Libqmycroft 1.0
0193 
0194 Window {
0195         ...
0196     title: qsTr("Hello Mycroft!")
0197 
0198     TextField {
0199         id: someFormField
0200         placeHolderText: "Enter Address"
0201 
0202         TranscribeButton {
0203             width: 100
0204             height: 100
0205             target: someFormField
0206         }
0207     }
0208 }