ホームページ >バックエンド開発 >Python チュートリアル >Pythonを使用してLinux上で音声認識機能を実装する方法

Pythonを使用してLinux上で音声認識機能を実装する方法

WBOY
WBOY転載
2023-05-11 08:04:051528ブラウズ

音声認識の仕組みの概要

音声認識は、1950 年代初頭にベル研究所で行われた研究に由来します。初期の音声認識システムは、単一の話者とわずか 12 語程度の語彙しか認識できませんでした。最新の音声認識システムは、複数の話者を認識し、複数の言語を認識できる豊富な語彙を備えているため、長い道のりを歩んできました。
音声認識の最初の部分はもちろん音声です。マイクを介して、音声は物理的な音から電気信号に変換され、その後アナログ - デジタル コンバーターを介してデータに変換されます。デジタル化すると、音声をテキストに書き写すためにいくつかのモデルを適用できます。
最新の音声認識システムのほとんどは、隠れマルコフ モデル (HMM) に依存しています。その動作原理は、音声信号を非常に短い時間スケール (10 ミリ秒など) の定常プロセス、つまり統計的特性が時間とともに変化しないプロセスとして近似できることです。
現代の音声認識システムの多くは、HMM 認識の前にニューラル ネットワークを使用して、特徴変換と次元削減技術を通じて音声信号を単純化します。音声アクティビティ検出器 (VAD) を使用して、オーディオ信号を音声のみを含む可能性のある部分に減らすこともできます。
Python ユーザーにとって幸いなことに、一部の音声認識サービスは API を通じてオンラインで利用でき、そのほとんどは Python SDK も提供しています。

適切な Python 音声認識パッケージを選択する

PyPI には既製の音声認識パッケージがいくつかあります。
apiai
google-cloud-speech
pocketsphinx
SpeechRcognition
watson-developer-cloud
wit
一部のソフトウェア パッケージ (wit や apiai など) では、話者の意図を識別するための自然言語処理など、基本的な音声認識を超える機能が組み込まれています。 Google Cloud Speech などの他のソフトウェア パッケージは、音声からテキストへの変換に重点を置いています。
その中でも、SpeechRecognition はその使いやすさで際立っています。
音声の認識には音声入力が必要ですが、 SpeechRecognition で音声入力を取得するのは非常に簡単です。マイクにアクセスして音声ファイルを最初から処理するためのスクリプトを構築する必要はありません。必要なのは、ほんの少しだけです。自動的に取得が完了するまで数分かかり、実行されます。

SpeechRecognition のインストール

SpeechRecognition は Python2.6、2.7、および 3.3 と互換性がありますが、Python 2 で使用する場合は追加のインストール手順が必要です。 pip コマンドを使用して、端末から SpeechRecognition をインストールできます: pip3 install SpeechRecognition

インストールが完了したら、インタープリタ ウィンドウを開いてインストールを確認できます:

Pythonを使用してLinux上で音声認識機能を実装する方法

注: このセッションは閉じないでください。次のいくつかの手順で使用します。
既存のオーディオ ファイルを扱っている場合は、特定の使用例のいくつかの依存関係に注意しながら、SpeechRecognition を直接呼び出してください。また、マイク入力を取得するには、PyAudio パッケージをインストールすることにも注意してください。

Recognizer クラス

SpeechRecognition の中核は、Recognizer クラスです。
Recognizer API の主な目的は、音声を認識することです。各 API には、オーディオ ソースの音声を認識するためのさまざまな設定と関数があります。ここでは、recognize_sphinx() を選択します: CMU Sphinx - PocketSphinx のインストールが必要です (## をサポート) #オフライン音声認識) 次に、pip コマンドを使用して PocketSphinx をインストールする必要がありますが、インストール プロセス中に、赤いフォントで大量のエラーが発生する傾向があります。

オーディオ ファイルの使用

関連するオーディオ ファイルをダウンロードし、特定のディレクトリに保存します (ubuntu デスクトップに直接保存します)

注:
AudioFile クラスは、オーディオ ファイルのパス ファイルの内容を読み取り、処理するためのコンテキスト マネージャー インターフェイスを初期化し、提供します。
SpeechRecognition は現在次のファイル タイプをサポートしています:

  • WAV: PCM/LPCM 形式である必要があります

  • AIFF

  • ##AIFF-CFLAC: 初期 FLAC 形式である必要があります。OGG-FLAC 形式は利用できません
  • 英語音声認識

上記の完了後基本的な作業では、英語の音声認識を行うことができます。

(1) ターミナルを開きます

(2) 音声テスト ファイルが配置されているディレクトリを入力します (ブロガーはデスクトップです)
(3) Python インタープリタを開きます
(4)以下に示す関連コマンド

Pythonを使用してLinux上で音声認識機能を実装する方法最後に、音声テキスト変換コンテンツが表示されます (これは匂いがするでしょう...)。実際、その効果は非常に優れています。良い!英語なのでノイズがありません。

音声認識に対するノイズの影響

ノイズは現実世界に存在し、すべての録音にはある程度のノイズが含まれており、未処理のノイズは音声認識アプリケーションの精度を損なう可能性があります。

転写しようとしても効果が良くない場合は、Recognizer クラスのAdjust_for_ambient_noise() コマンドを呼び出してみることができます。

マイクの使用

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 音声認識ツールキットから、対応する中国語のアドミッションと言語モデルをダウンロードする必要があります。

Pythonを使用してLinux上で音声認識機能を実装する方法

写真にマークされている単語は北京語です。関連する音声認識ツールキットをダウンロードします。

ただし、zh_broadcastnews_64000_utf8.DMP を language-model.lm.bin に変換し、zh_broadcastnews_16k_ptm256_8000.tar.bz2 を解凍して zh_broadcastnews_ptm256_8000 フォルダーを取得する必要があります。
ブロガーの方法を学び、Ubuntu で speech_recognition フォルダーを見つけてください。関連フォルダーが見つからない友達もたくさんいるかもしれませんが、実際には隠しファイルの下にあります。フォルダーの右上隅にある 3 本のバーをクリックします。下の図に示すように:

Pythonを使用してLinux上で音声認識機能を実装する方法

次に、下の図に示すように、[隠しファイルを表示] をオンにします:

Pythonを使用してLinux上で音声認識機能を実装する方法

次に、次のディレクトリをたどることでこれを見つけることができます:

Pythonを使用してLinux上で音声認識機能を実装する方法

## そして、元の

en-US の名前を en-US-bak## に変更します。 # 、新しいフォルダー en-US を作成し、抽出した zh_broadcastnews_ptm256_8000acoustic-model に変更し、chinese.lm.bin language に変更します - model.lm.bin のサフィックス pronounciation-dictionary.dicdict に変更し、これら 3 つのファイルを en-US にコピーします。同時に、元の en-US ファイル ディレクトリにある LICENSE.txt を現在のフォルダーにコピーします。 最後に、このフォルダーには次のファイルがあります:

Pythonを使用してLinux上で音声認識機能を実装する方法これで、マイクを通じて音声ファイル (「test.wav」) を録音できます

Inファイル ディレクトリで Python インタープリタを開き、次の内容を入力します:


Pythonを使用してLinux上で音声認識機能を実装する方法 すると出力が表示されますが、ここでは 2 つの中国について話していますが、他の中国についてもテストしました。発見と認識の効果。非常に悪い! ! !


小規模な中国語認識

公式のものは効果が低すぎてほとんど使用できません。そこで、いろいろな記事を読んで最適化方法を考えたのですが、それは小規模な認識にしか適していません。一部のコマンドなどは問題ないはずですが、チャットなどはうまく動作しない可能性があります。

先ほどコピーした4つのフォルダーを見つけます。pronounciation-dictionary.dictというフォルダーがあります。それを開くと、次の内容があります。


Pythonを使用してLinux上で音声認識機能を実装する方法こんな感じです。この内容は「辞書で使われる言葉と日常のコミュニケーションで使われる言葉の間には大きな隔たりがある」に似ています。後は、使い慣れた言葉に置き換えるだけです。試してみたところ、結果は本当に良かったです。認識効果は本当に良いです!

私のアプローチは次のとおりです:

(1) 画像の赤いマークより上のコンテンツを保持し、赤いマークより下のコンテンツを削除します。もちろん、保険上の理由から、このファイルをバックアップすることをお勧めします。
(2) 赤線の下に識別したい内容を入力してください! (ピンインとは違う、ルールに従って入力してください!!!) 最近、新型肺炎の状況も良くなりつつありますが、一番よく聞かれるのは「頑張れ中国」ですので、今日の内容は「頑張れ中国」を「頑張れ中国」に変換するというものです。文章!早く学校が始まるといいですね、ははは。

Pythonを使用してLinux上で音声認識機能を実装する方法3) 次のように入力します:

Pythonを使用してLinux上で音声認識機能を実装する方法

音声合成

音声合成についての私の個人的な理解は、テキスト読み上げです。ただし、この文では、 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 サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。