Welcome to Raspberry Pi 5 repository
1. Online speech-to-text (ASR)
1. Online speech-to-text (ASR)
1. Online speech-to-text (ASR)1. Introduction1.1 What is "ASR"?1.2 Implementation Principles1. Acoustic Model2. Language Model3. Pronunciation Dictionary4. Decoder5. End-to-End ASR2. Project ArchitectureKey Code1. Speech Processing and Recognition Core (largemodel/largemodel/asr.py)2. VAD smart recording (largemodel/largemodel/asr.py)Code Analysis3. Practice3.1 Configuring Online ASR3.2 Start and test the functionality
Note: The Raspberry Pi 5 1GB version does not have this package and cannot run this case.
1. Introduction
1.1 What is "ASR"?
ASR (Automatic Speech Recognition) is a technology that converts human speech signals into text. It is widely used in intelligent assistants, voice command control, telephone customer service automation, and real-time subtitle generation. The goal of ASR is to enable machines to "understand" human speech and convert it into a form that computers can process and understand.
1.2 Implementation Principles
The implementation of an ASR system relies primarily on the following key technical components:
1. Acoustic Model
The acoustic model is responsible for converting the input audio signal into phonemes or subword units. This typically involves a feature extraction step, such as using Mel-Frequency Cepstral Coefficients (MFCCs) or filter banks to represent the audio signal.
These features are then fed into a deep neural network (DNN), convolutional neural network (CNN), recurrent neural network (RNN), or the more advanced Transformer architecture for training to learn how to map audio features to corresponding phonemes or text.
2. Language Model
A language model predicts the most likely next word given the previous context, thereby improving recognition accuracy. It is trained on large amounts of text data to understand which word sequences are most likely to occur.
Common language models include n-gram models, RNN-based language models (LMs), and the more recently popular Transformer-based language models.
3. Pronunciation Dictionary
A pronunciation dictionary provides a mapping between words and their corresponding pronunciations. This is crucial for connecting the acoustic model and language model, as it allows the system to understand and match the sounds it hears based on known pronunciation rules.
4. Decoder
The decoder's task is to find the most likely word sequence as output given the acoustic model, language model, and pronunciation dictionary. This process typically involves complex search algorithms, such as the Viterbi algorithm or graph-based search methods, to find the optimal path.
5. End-to-End ASR
With the development of deep learning, end-to-end ASR systems have emerged. These systems attempt to learn text output directly from raw audio signals, without the need for explicit acoustic models, separate pronunciation lexicons, and language models. These systems are often based on sequence-to-sequence (Seq2Seq) frameworks, using, for example, attention mechanisms or the Transformer architecture, significantly simplifying the complexity of traditional ASR systems.
In general, modern ASR systems achieve efficient and accurate speech-to-text conversion by combining the aforementioned components and leveraging large-scale datasets and powerful computing resources for training. With technological advances, the performance of ASR systems continues to improve, and their application scenarios are becoming increasingly broad.
2. Project Architecture
Key Code
1. Speech Processing and Recognition Core (largemodel/largemodel/asr.py)
x# From largemodel/largemodel/asr.pydef kws_handler(self)->None: if self.stop_event.is_set(): return
if self.listen_for_speech(self.mic_index): asr_text = self.ASR_conversion(self.user_speechdir) # Perform ASR conversion if asr_text =='error': # Check if ASR result length is less than 4 characters self.get_logger().warn("I still don't understand what you mean. Please try again") playsound(self.audio_dict[self.error_response]) # Error response else: self.get_logger().info(asr_text) self.get_logger().info("okay😀, let me think for a moment...") self.asr_pub_result(asr_text) # Publish ASR result else: return
def ASR_conversion(self, input_file:str)->str: if self.use_oline_asr: result=self.modelinterface.oline_asr(input_file) if result[0] == 'ok' and len(result[1]) > 4: return result[1]