ホームページ >バックエンド開発 >Python チュートリアル >Pythonを使用してLinux上で音声認識機能を実装する方法
音声認識は、1950 年代初頭にベル研究所で行われた研究に由来します。初期の音声認識システムは、単一の話者とわずか 12 語程度の語彙しか認識できませんでした。最新の音声認識システムは、複数の話者を認識し、複数の言語を認識できる豊富な語彙を備えているため、長い道のりを歩んできました。
音声認識の最初の部分はもちろん音声です。マイクを介して、音声は物理的な音から電気信号に変換され、その後アナログ - デジタル コンバーターを介してデータに変換されます。デジタル化すると、音声をテキストに書き写すためにいくつかのモデルを適用できます。
最新の音声認識システムのほとんどは、隠れマルコフ モデル (HMM) に依存しています。その動作原理は、音声信号を非常に短い時間スケール (10 ミリ秒など) の定常プロセス、つまり統計的特性が時間とともに変化しないプロセスとして近似できることです。
現代の音声認識システムの多くは、HMM 認識の前にニューラル ネットワークを使用して、特徴変換と次元削減技術を通じて音声信号を単純化します。音声アクティビティ検出器 (VAD) を使用して、オーディオ信号を音声のみを含む可能性のある部分に減らすこともできます。
Python ユーザーにとって幸いなことに、一部の音声認識サービスは API を通じてオンラインで利用でき、そのほとんどは Python SDK も提供しています。
PyPI には既製の音声認識パッケージがいくつかあります。
apiai
google-cloud-speech
pocketsphinx
SpeechRcognition
watson-developer-cloud
wit
一部のソフトウェア パッケージ (wit や apiai など) では、話者の意図を識別するための自然言語処理など、基本的な音声認識を超える機能が組み込まれています。 Google Cloud Speech などの他のソフトウェア パッケージは、音声からテキストへの変換に重点を置いています。
その中でも、SpeechRecognition はその使いやすさで際立っています。
音声の認識には音声入力が必要ですが、 SpeechRecognition で音声入力を取得するのは非常に簡単です。マイクにアクセスして音声ファイルを最初から処理するためのスクリプトを構築する必要はありません。必要なのは、ほんの少しだけです。自動的に取得が完了するまで数分かかり、実行されます。
SpeechRecognition は Python2.6、2.7、および 3.3 と互換性がありますが、Python 2 で使用する場合は追加のインストール手順が必要です。 pip コマンドを使用して、端末から SpeechRecognition をインストールできます: pip3 install SpeechRecognition
インストールが完了したら、インタープリタ ウィンドウを開いてインストールを確認できます:
注: このセッションは閉じないでください。次のいくつかの手順で使用します。
既存のオーディオ ファイルを扱っている場合は、特定の使用例のいくつかの依存関係に注意しながら、SpeechRecognition を直接呼び出してください。また、マイク入力を取得するには、PyAudio パッケージをインストールすることにも注意してください。
SpeechRecognition の中核は、Recognizer クラスです。
Recognizer API の主な目的は、音声を認識することです。各 API には、オーディオ ソースの音声を認識するためのさまざまな設定と関数があります。ここでは、recognize_sphinx() を選択します: CMU Sphinx - PocketSphinx のインストールが必要です (## をサポート) #オフライン音声認識) 次に、pip コマンドを使用して PocketSphinx をインストールする必要がありますが、インストール プロセス中に、赤いフォントで大量のエラーが発生する傾向があります。
注:
AudioFile クラスは、オーディオ ファイルのパス ファイルの内容を読み取り、処理するためのコンテキスト マネージャー インターフェイスを初期化し、提供します。
SpeechRecognition は現在次のファイル タイプをサポートしています:
(2) 音声テスト ファイルが配置されているディレクトリを入力します (ブロガーはデスクトップです)
(3) Python インタープリタを開きます
(4)以下に示す関連コマンド
最後に、音声テキスト変換コンテンツが表示されます (これは匂いがするでしょう...)。実際、その効果は非常に優れています。良い!英語なのでノイズがありません。
音声認識に対するノイズの影響
SpeechRecognizer を使用してマイクにアクセスするには、PyAudio パッケージをインストールする必要があります。
Debian ベースの Linux (Ubuntu など) を使用している場合は、apt を使用して PyAudio をインストールできます。 sudo apt-get install python-pyaudio python3-pyaudio
pip3 install を有効にする必要がある場合があります。インストール完了後の pyaudio (特に仮想実行時)。
pyaudio をインストールした後、Python を使用して音声入力を生成し、関連ファイルを生成できます。
pocketphinx の使用に関する注意事項:
サポートされるファイル形式:wav
オーディオ ファイルのデコード要件:16KHZ、mono
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 フォルダーを見つけてください。関連フォルダーが見つからない友達もたくさんいるかもしれませんが、実際には隠しファイルの下にあります。フォルダーの右上隅にある 3 本のバーをクリックします。下の図に示すように:
次に、下の図に示すように、[隠しファイルを表示] をオンにします:
次に、次のディレクトリをたどることでこれを見つけることができます:
## そして、元のen-US の名前を
en-US-bak## に変更します。 # 、新しいフォルダー en-US を作成し、抽出した zh_broadcastnews_ptm256_8000
を acoustic-model
に変更し、chinese.lm.bin
を language に変更します - model.lm.bin
のサフィックス pronounciation-dictionary.dic
を dict
に変更し、これら 3 つのファイルを en-US にコピーします。同時に、元の en-US ファイル ディレクトリにある LICENSE.txt を現在のフォルダーにコピーします。 最後に、このフォルダーには次のファイルがあります:
これで、マイクを通じて音声ファイル (「test.wav」) を録音できます
Inファイル ディレクトリで Python インタープリタを開き、次の内容を入力します:すると出力が表示されますが、ここでは 2 つの中国について話していますが、他の中国についてもテストしました。発見と認識の効果。非常に悪い! ! !
小規模な中国語認識
こんな感じです。この内容は「辞書で使われる言葉と日常のコミュニケーションで使われる言葉の間には大きな隔たりがある」に似ています。後は、使い慣れた言葉に置き換えるだけです。試してみたところ、結果は本当に良かったです。認識効果は本当に良いです!
私のアプローチは次のとおりです: (1) 画像の赤いマークより上のコンテンツを保持し、赤いマークより下のコンテンツを削除します。もちろん、保険上の理由から、このファイルをバックアップすることをお勧めします。
(2) 赤線の下に識別したい内容を入力してください! (ピンインとは違う、ルールに従って入力してください!!!) 最近、新型肺炎の状況も良くなりつつありますが、一番よく聞かれるのは「頑張れ中国」ですので、今日の内容は「頑張れ中国」を「頑張れ中国」に変換するというものです。文章!早く学校が始まるといいですね、ははは。
3) 次のように入力します:
音声合成についての私の個人的な理解は、テキスト読み上げです。ただし、この文では、 client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) result = client.Synthetic('Hello Baidu', 'zh', 1, { 'vol': 5,'spd': 3) と設定できます。 ,'pit':9,'per': 3})
音量、口調、スピード、男性/女性/ロリ/屈託なし。
以上がPythonを使用してLinux上で音声認識機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。