Maison > Article > développement back-end > Comment utiliser Python pour implémenter la fonction de reconnaissance vocale sous Linux
La reconnaissance vocale est issue de recherches effectuées aux Bell Labs au début des années 1950. Les premiers systèmes de reconnaissance vocale ne pouvaient reconnaître qu’un seul locuteur et un vocabulaire d’une douzaine de mots seulement. Les systèmes modernes de reconnaissance vocale ont parcouru un long chemin pour reconnaître plusieurs locuteurs et disposent de vastes vocabulaires reconnaissant plusieurs langues.
La première partie de la reconnaissance vocale est bien sûr la parole. Grâce au microphone, la parole est convertie du son physique en signaux électriques, puis en données via un convertisseur analogique-numérique. Une fois numérisés, plusieurs modèles peuvent être appliqués pour transcrire l’audio en texte.
La plupart des systèmes de reconnaissance vocale modernes s'appuient sur des modèles de Markov cachés (HMM). Son principe de fonctionnement est le suivant : le signal vocal peut être approché comme un processus stationnaire sur une échelle de temps très courte (par exemple 10 millisecondes), c'est-à-dire un processus dont les caractéristiques statistiques ne changent pas avec le temps.
De nombreux systèmes de reconnaissance vocale modernes utilisent des réseaux de neurones avant la reconnaissance HMM pour simplifier le signal vocal grâce à des techniques de transformation des caractéristiques et de réduction de la dimensionnalité. Les détecteurs d'activité vocale (VAD) peuvent également être utilisés pour réduire le signal audio à des parties pouvant contenir uniquement de la parole.
Heureusement pour les utilisateurs de Python, certains services de reconnaissance vocale sont disponibles en ligne via des API, et la plupart d'entre eux fournissent également des SDK Python. Il existe des packages de reconnaissance vocale prêts à l'emploi dans PyPI. Ceux-ci incluent :
SpeechRcognition
watson-developer-cloud
wit
Certains progiciels tels que wit et apiai ) offrent certaines fonctionnalités intégrées au-delà de la reconnaissance vocale de base, telles que des capacités de traitement du langage naturel pour identifier l'intention du locuteur. D'autres logiciels, tels que Google Cloud Speech, se concentrent sur la conversion parole-texte.
Parmi eux, SpeechRecognition se démarque par sa simplicité d'utilisation.
La reconnaissance vocale nécessite une entrée audio, et récupérer l'entrée audio dans
SpeechRecognition
est très simple, cela ne nécessite pas de créer un script pour accéder au microphone et traiter le fichier audio à partir de zéro, cela ne prend que quelques minutes Récupération et exécution automatiquement terminées.
Install SpeechRecognitionSpeechRecognition est compatible avec Python2.6, 2.7 et 3.3+, mais certaines étapes d'installation supplémentaires sont requises si elle est utilisée dans Python 2. Vous pouvez utiliser la commande pip pour installer SpeechRecognition depuis le terminal :
Une fois l'installation terminée, vous pouvez ouvrir la fenêtre de l'interpréteur pour vérifier l'installation : pip3 install SpeechRecognition
Si vous avez affaire à des fichiers audio existants, appelez simplement SpeechRecognition directement, en faisant attention à certaines dépendances du cas d'utilisation spécifique. Notez également qu'installez le package PyAudio pour obtenir l'entrée du microphone
Recognizer class
SpeechRecognition Le noyau est la classe de reconnaissance.
Utilisation des fichiers audioTéléchargez les fichiers audio associés et enregistrez-les dans un répertoire spécifique (enregistrez-les directement sur le bureau Ubuntu)
Remarque :
WAV : doit être au format PCM/LPCM
Après avoir terminé le travail de base ci-dessus, vous pouvez effectuer la reconnaissance vocale en anglais.
(1) Ouvrez le terminal( 4) Suivez l'image ci-dessous Entrez la commande appropriée
En essayant de retranscrire l'effet n'est pas bon, on peut essayer d'appeler la commande ajuster_for_ambient_noise() de la classe Recognizer.
Pour utiliser SpeechRecognizer pour accéder au microphone, vous devez installer le package PyAudio.
Si vous utilisez Linux basé sur Debian (comme Ubuntu), vous pouvez utiliser apt pour installer PyAudio : sudo apt-get install python-pyaudio python3-pyaudio
Vous devrez peut-être toujours activer pip3 install pyaudio une fois l'installation terminée, surtout lors d'une exécution virtuelle. sudo apt-get install python-pyaudio python3-pyaudio
安装完成后可能仍需要启用 pip3 install pyaudio ,尤其是在虚拟情况下运行。
在安装完pyaudio的情况下可以通过python实现语音录入生成相关文件。
pocketsphinx的使用注意:
支持文件格式:wav
音频文件的解码要求:16KHZ,单声道
利用python实现录音并生成相关文件程序代码如下:
from pyaudio import PyAudio, paInt16 import numpy as np import wave class recoder: NUM_SAMPLES = 2000 SAMPLING_RATE = 16000 LEVEL = 500 COUNT_NUM = 20 SAVE_LENGTH = 8 Voice_String = [] def savewav(self,filename): wf = wave.open(filename, 'wb') wf.setnchannels(1) wf.setsampwidth(2) wf.setframerate(self.SAMPLING_RATE) wf.writeframes(np.array(self.Voice_String).tostring()) wf.close() def recoder(self): pa = PyAudio() stream = pa.open(format=paInt16, channels=1, rate=self.SAMPLING_RATE, input=True,frames_per_buffer=self.NUM_SAMPLES) save_count = 0 save_buffer = [] while True: string_audio_data = stream.read(self.NUM_SAMPLES) audio_data = np.fromstring(string_audio_data, dtype=np.short) large_sample_count = np.sum(audio_data > self.LEVEL) print(np.max(audio_data)) if large_sample_count > self.COUNT_NUM: save_count = self.SAVE_LENGTH else: save_count -= 1 if save_count < 0: save_count = 0 if save_count > 0: save_buffer.append(string_audio_data ) else: if len(save_buffer) > 0: self.Voice_String = save_buffer save_buffer = [] print("Recode a piece of voice successfully!") return True else: return False if __name__ == "__main__": r = recoder() r.recoder() r.savewav("test.wav")
注意:在利用python解释器实现时一定要注意空格!!!
最后生成的文件就在Python解释器回话所在目录下,可以通过play来播放测试一下,如果没有安装play可以通过apt命令来安装。
在进行完以前的工作以后,我们对语音识别的流程大概有了一定的了解,但是作为一个中国人总得做一个中文的语音识别吧!
我们要在CMU Sphinx语音识别工具包里面下载对应的普通话升学和语言模型。
图片中标记的就是普通话!下载相关的语音识别工具包。
但是我们要把zh_broadcastnews_64000_utf8.DMP转化成language-model.lm.bin,再解压zh_broadcastnews_16k_ptm256_8000.tar.bz2得到zh_broadcastnews_ptm256_8000文件夹。
借鉴刚才那位博主的方法,在Ubuntu下找到speech_recognition文件夹。可能会有很多小伙伴找不到相关的文件夹,其实是在隐藏文件下。大家可以点击文件夹右上角的三条杠。如下图所示:
然后给显示隐藏文件打个勾,如下图所示:
然后依次按照以下目录就可以找到啦:
然后把原来的en-US
改名成en-US-bak
,新建一个文件夹en-US,把解压出来的zh_broadcastnews_ptm256_8000
改成acoustic-model
,把chinese.lm.bin
改成language-model.lm.bin
,把pronounciation-dictionary.dic
改后缀成dict
Après avoir installé pyaudio, vous pouvez utiliser python pour générer un enregistrement vocal et des fichiers associés.
Remarques sur l'utilisation de Pocketsphinx :
Exigences de décodage pour les fichiers audio : 16 KHZ, mono Utilisez Python pour implémenter l'enregistrement et générer les fichiers associés Le code du programme est le suivant :
rrreeeRemarque : assurez-vous d'utiliser l'interpréteur python à implémenter Attention aux espaces ! ! !
Le fichier final généré se trouve dans le répertoire où se trouve l'interpréteur Python. Vous pouvez le lire via play pour le tester. Si play n'est pas installé, vous pouvez l'installer via la commande apt.
Après avoir terminé les travaux précédents, nous avons une certaine compréhension du processus de reconnaissance vocale, mais en tant que Chinois, nous devons faire une reconnaissance vocale chinoise !
Nous devons télécharger le modèle de langue mandarin et le modèle de langue correspondants à partir de la boîte à outils de reconnaissance vocale CMU Sphinx.Mais nous devons convertir zh_broadcastnews_64000_utf8.DMP en language-model.lm.bin, puis décompresser zh_broadcastnews_16k_ptm256_8000.tar.bz2 pour obtenir le dossier zh_broadcastnews_ptm256_8000.
Apprenez tout de suite la méthode du blogueur et recherchez le dossier Speech_recognition sous Ubuntu. Il se peut que de nombreux amis ne trouvent pas les dossiers pertinents, mais ils se trouvent en fait sous des fichiers cachés. Vous pouvez cliquer sur les trois barres dans le coin supérieur droit du dossier. Comme le montre l'image ci-dessous :
Suivez ensuite les répertoires suivants pour le trouver :
en-US
d'origine en en-US-bak, créez un nouveau dossier en-US, remplacez le <code>zh_broadcastnews_ptm256_8000
extrait par acoustic-model
et remplacez chinese.lm.bin
par langage-model.lm.bin
, remplacez le suffixe de pronounciation-dictionary.dic
par dict
et copiez ces trois fichiers dans en-US . En même temps, copiez LICENSE.txt du répertoire de fichiers en-US d'origine dans le dossier actuel. Enfin il y a les fichiers suivants dans ce dossier :
🎜🎜🎜🎜 Ensuite nous pouvons enregistrer un fichier vocal ("test.wav") via le microphone 🎜Ouvrez l'interpréteur python dans le répertoire des fichiers et saisissez le contenu suivant : 🎜🎜 🎜 🎜🎜J'ai vu le contenu de sortie, mais je parlais de deux Chines. J'en ai également testé d'autres et j'ai trouvé que l'effet de reconnaissance était très faible ! ! ! 🎜🎜🎜Reconnaissance chinoise à petite échelle🎜🎜L'effet fourni par la version officielle est si pauvre qu'elle est presque inutilisable ! J'ai ensuite pensé à une méthode d'optimisation après avoir lu de nombreux articles, mais elle ne convient qu'à une reconnaissance à petite échelle ! Certaines commandes et autres devraient convenir, mais le chat et autres peuvent ne pas fonctionner aussi bien. 🎜Trouvez les 4 dossiers que vous venez de copier. Il y a un dossier de pronounciation-dictionary.dict Après l'avoir ouvert, le contenu suivant est trouvé : 🎜🎜🎜🎜🎜On dirait que ce contenu est similaire à un dictionnaire, avec beaucoup de mots et. mots pour la communication quotidienne. L’écart est relativement grand. Ensuite, nous pouvons simplement le remplacer par les mots auxquels nous sommes habitués ! Avec l’idée de l’essayer, le résultat est vraiment bon. L'effet de reconnaissance est vraiment bon ! 🎜Mon approche est la suivante : 🎜(1) Conservez le contenu au-dessus de la marque rouge dans l'image et supprimez le contenu en dessous de la marque rouge. Bien entendu, pour des raisons d'assurance, il est recommandé de sauvegarder ce fichier ! 🎜(2) Saisissez le contenu que vous souhaitez identifier sous la ligne rouge ! (Saisie selon les règles, différente du pinyin !!!) Récemment, la situation de la nouvelle pneumonie s'est améliorée. La phrase la plus entendue est « Allez, Chine ». Le contenu d'aujourd'hui est donc de convertir « Allez, Chine ». en texte ! J'espère que l'école pourra bientôt commencer, hahahaha. 🎜🎜🎜🎜🎜3) Saisissez ce qui suit : 🎜Ma compréhension personnelle de la synthèse vocale est la synthèse vocale. Cependant, dans cette phrase, vous pouvez définir client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) result = client.synthesis('你好百度', 'zh', 1, { 'vol': 5,'spd': 3,'pit':9,'per': 3})
volume, tonalité, vitesse, mâle/femelle/loli/gratuit.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!