STT are independent projects so they can be developed under a github project. Anyone can clone them and place them under the STT repository and reuse them or directly install them
Creating a new STT must follow some rules:
The STT inherits from the SpeechRecognition coming from the Utils file in the STT package.
from kalliope.stt.Utils import SpeechRecognition
class Google(SpeechRecognition):
The STT has a constructor init which is the entry point. The constructor has an incoming callback to call once we get the text. The constructor has a **kwargs argument which is corresponding to the Dict of incoming variables:values defined either in the settings file.
The STT must init itself first.
Attach the incoming callback to the self.attribute.
Obtain audio from the microphone in the constructor. (Note : we mostly use the speech_recognition library)
Use self.start_listening(self.my_callback) from the mother class to get an audio and pass it to the callback of your choice.
The callback methode must implement two arguments: recognizer and audio. The audio argument contains the stream caught by the microphone
Once you get the text back, let give it to the callback method received in the constructor
def __init__(self, callback=None, **kwargs):
OrderListener.__init__(self)
self.callback = callback
self.argument_from_settings = kwargs.get('argument_from_settings', None)
# start the microphone to capture an audio, give to the function a callback
self.stop_listening = self.start_listening(self.my_callback)
def my_callback((self, recognizer, audio):
# ---------------------------------------------
# do amazing code
# 'audio' contain stream caught by the microphone
# ---------------------------------------------
# at the end of the process, send the text into the received callback method
self.callback(audio_to_text)
Example of STT structure
mystt/
├── __init__.py
├── mystt.py
├── dna.yml
├── install.yml
└── README.md
Example of STT code